Intereting Posts
Div вокруг видео YouTube Попытка подключения к другой базе данных Категории отображения в результатах поиска ошибка в форме расширенного поиска для пользовательских типов сообщений в WordPress array_key_exists () ожидает, что параметр 2 будет массивом, указанная строка Как запустить фильтр только на настраиваемом экране редактирования типа сообщения Пользовательские типы сообщений и новый WP_Query Как функция `get_sidebar` предназначена для вызова второй боковой панели? Один элемент, который не отображается при программировании. Создание навигационного меню. Выполните функцию, когда пользователь нажимает кнопку регистрации Как получить значение ввода скрытого html из текстового редактора в настраиваемый шаблон страницы? Создание эскизов в бэкэнд Как отменить отмену эскизов Получать сообщения о едином таксономии термина пользовательского типа Как прикреплять изображения, которые я «вставляю с url» в сообщение? Фильтрация того, какие размеры изображений генерируются

WordPress pre_get_posts с комбинированными результатами двух запросов (OR)

Я начинаю, когда дело доходит до разработки WordPress …

У меня есть пользовательская роль «владелец». Те собственные «машины» (пользовательский тип сообщения) Я хочу, чтобы владельцы в бэкэнде администратора видели только свои собственные машины (те, где владелец является автором), и машины, принадлежащие той же компании (таксономия для машин). Компания является мета-полем пользователя и должна соответствовать таксономии почты.

Для условия «той же компании» я меняю запрос на фильтрацию сообщений только с заданной компанией-таксономией (см. «Abc»).

Как я могу продлить запрос, чтобы пользователи также видели свои собственные сообщения, даже если у них нет поля компании?

Цель: запрос (та же компания) ИЛИ запрос (тот же автор)

function only_own_company( $query ) { global $typenow; $current_user = wp_get_current_user(); $post_type = 'machine'; // change to your post type $role = 'owner'; if ( $typenow == $post_type && current_user_can( $role ) ) { $query->set( 'tax_query', array( array( 'taxonomy' => 'company', 'field' => 'slug', 'terms' => 'abc', ), ) ); } } add_action( 'pre_get_posts', 'only_own_company' ); 

Я попытался объединить его со вторым новым запросом, но это не похоже на правильный путь …

 $query2 = new WP_Query( array( 'author', $current_user->ID ) ); $query->posts = array_merge( $query->posts, $query2->posts ); 

Solutions Collecting From Web of "WordPress pre_get_posts с комбинированными результатами двух запросов (OR)"

См. WP_Query в качестве ссылки для фильтров пост-запросов. Вы можете отфильтровать сообщения от своих авторов с помощью запроса 'author' var при фильтрации сообщений по их таксономии с 'tax_query' запроса 'tax_query' var var.

Затем условно задайте запрос var 'tax_query' зависимости от мета-поля компании пользователя. Если он пуст, вместо этого задайте вместо него запрос var.

 add_action( 'pre_get_posts', 'alter_query', 99, 1 ); function alter_query( $query ) { global $typenow; if ( 'machine' === $typenow && current_user_can( 'owner' ) ) { $user = wp_get_current_user(); $company = get_user_meta( $user->ID, 'company', true ); if ( '' !== $company ) { $query->set( 'tax_query', array( array( 'taxonomy' => 'company', 'field' => 'slug', 'terms' => sanitize_key( $company ), ), ) ); } else { $query->set( 'author', $user->ID ); } } } 

Примечание : sanitize_key() может потребоваться в зависимости от того, как вы сохраняете метаинформацию компании. Он уменьшает строку и заменяет в ней пробелы дефисом. Это используется WP, например, для определения заголовка сообщения из заголовка сообщения. Другими словами, это «slugify» строка …