Intereting Posts
Изменить формат сообщения с помощью настраиваемого поля admin ajax php success возвращает 0 Как создать метабокс содержимого HTML с инструкциями для редакторов при редактировании сообщения или страницы? Получение этого кода для работы в Multisite Удаление номера версии WordPress из включенных файлов Как добавить пользовательский класс тела для определенного идентификатора страницы? Редактирование навигационного меню? данные, возвращенные из get_post ($ postId), имеют разные ключи, чем wp-json / wp / v2 / posts / {postId} переписывание URL для пользовательских типов сообщений Как получить страничный пул текущей страницы архива для пользовательской таксономии PHP: отображение знака валюты, если входной номер Как предотвратить отображение таблицы стилей в файле header.php или footer.php? Авто добавлять контент, например, страницы при активации плагина? Frontend Form Checkbox Обновление поля ACF if / else по пользовательскому запросу дает 200 OK, если условие не выполнено?

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» строка …