Intereting Posts
Как проверить фильтруемые $ vars? Второй foreach в цикле возвращает bool (false), хотя массив присутствует Как передать аргумент своему пользовательскому ходоку? Оптимизация производительности структуры дерева После добавления функции роли редактора и вкладчика Можно ли расширить пользовательское меню при редактировании настраиваемого типа сообщений? Каким образом можно использовать фильтр get_image_tag? Как делиться многократными полями на нескольких страницах? Перенаправление пользовательской формы входа в систему Необязательно все группы захвата в правиле перезаписи Отображать содержимое на основе типа пользовательской публикации Могу ли я очистить или удалить параметр 's'? Как правильно получать популярные сообщения по нескольким значениям Плагин, который позволит авторам WordPress «следовать» другим авторам и запрашивать «Информация о деятельности» из этого Отображать сообщение администратора только на главной странице панели мониторинга

Есть ли строка запроса для edit.php для отображения всех сообщений, у которых нет пользовательских терминов таксономии?

Я написал плагин Premium Posts, который регистрирует пользовательскую таксономию, называемую sms_premium_posts, и добавляет столбец в таблицу столбцов в области администрирования WordPress.

В этом настраиваемом столбце, если сообщение было помечено Премиум , термин « Премиум» ссылается на отфильтрованный список только премиальных сообщений. Эта ссылка создается с помощью строки запроса:

http://www.example.com/wp-admin/edit.php?sms_premium_posts=premium

Если сообщение не помечено как Премиум , я хотел бы, чтобы термин « Стандарт» отфильтровывал список, поэтому в таблице отображаются только сообщения, которые НЕ помечены как премии (т.е. сообщения без терминов таксономии).

Есть ли строка запроса для этого?

Пример строки запроса:
http://www.example.com/wp-admin/edit.php?sms_premium_posts!=premium

Вы можете спросить: «Почему бы не добавить термин« Стандарт » ко всем другим сообщениям?» Моя причина не в том, чтобы это сделать, это потребовало бы пометки всех существующих сообщений с пользовательским термином таксономии, когда плагин активирован … что кажется довольно неэффективным.

Заранее спасибо!

РЕШЕНИЕ

Основываясь на ответе от @s_ha_dum ниже, вот что я сделал, чтобы подделать отрицательную строку запроса:

function standard_term_filter( $query ) { if ( ! $query->is_admin || ! isset( $_GET['sms_premium_posts!'] ) ) return $query; if ( 'premium' == $_GET['sms_premium_posts!'] ) { $taxquery = array( array( 'taxonomy' => 'sms_premium_posts', 'field' => 'slug', 'terms' => 'premium', 'operator' => 'NOT IN' ) ); $query->set( 'tax_query', $taxquery ); } return $query; } add_action( 'pre_get_posts', array( $this, 'standard_term_filter' ) ); 

Обратите внимание, что я добавил эту функцию как метод моего класса plugin, поэтому я использовал массив для обратного вызова в add_action ().

Также обратите внимание! в конце строки запроса: sms_premium_posts!

Я сделал ссылки на стандартный термин следующим образом:

http://www.example.com/wp-admin/edit.php?sms_premium_posts!=premium

С sms_premium_posts! отличается от sms_premium_posts (пуля моей пользовательской таксономии), она работает.

Используйте tax_query с оператором NOT IN .

 $args = array( 'post_type' => 'post', 'tax_query' => array( array( 'taxonomy' => 'sms_premium_posts', 'field' => 'slug', 'terms' => 'Premium', 'operator' => 'NOT IN' ) ) ); $query = new WP_Query( $args ); 

Теперь, чтобы сделать эту работу на странице редактирования после строки $_GET чем-то вроде того, что у вас есть в вашем вопросе, вы можете сделать это:

 function alter_edit_php_query_wpse_100794($qry) { if(isset($_GET['notin'])) { $qry->set( 'tax_query', array( array( 'taxonomy' => 'category', 'field' => 'slug', 'terms' => sanitize_title_with_dashes($_GET['notin']), 'operator' => 'NOT IN' ) ) ); } } add_action('pre_get_posts','alter_edit_php_query_wpse_100794'); 

Это очень грубо. Вероятно, вам нужно больше условных is_admin , таких как is_admin , чтобы это не работало глобально.

Справка

http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters

Это невозможно сделать без налогового запроса. Вам было бы лучше назначить термин «премиум» или «стандартный» и никогда не быть пустым – возможно, с выпадающим списком, который содержит значение по умолчанию «Стандарт».

Если вы не хотите показывать «Стандарт» снова и снова в столбце, вы всегда можете проверить и скрыть его с помощью обратного вызова для manage_posts_custom_column .

См. Также: https://stackoverflow.com/questions/10582066/is-that-possible-to-use-in-query-string