Проблемы с пользовательским таксономическим фильтром

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

function taxonomy_filter_post_type_request( $query ) { global $pagenow, $typenow; if ( 'edit.php' == $pagenow ) { $filters = get_object_taxonomies( $typenow ); foreach ( $filters as $tax_slug ) { $var = &$query->query_vars[$tax_slug]; if ( isset( $var ) ) { $term = get_term_by( 'id', $var, $tax_slug ); if($var){ $var = $term->slug; } } } } } add_filter( 'parse_query', 'taxonomy_filter_post_type_request' ); 

Линия, которая читает $ var = $ term-> slug; похоже, вызывает проблему, но если я заменю:

 if($var){ $var = $term->slug; } 

чтобы:

 if(is_array($var)){ $var = $term->slug; } 

Затем он работает, когда я нажимаю на количество сообщений, содержащих определенный термин, но ниспадающие меню не работают.

Посмотрев на это, можно ли заставить их обоих работать?

Solutions Collecting From Web of "Проблемы с пользовательским таксономическим фильтром"

Я считаю, что проблема связана с этой строкой:

 $var = &$query->query_vars[$tax_slug]; 
  1. & $ query не требуется, simle $ query следует пренебречь.
  2. $ query-> query-> vars [$ tax_slug] возвращает не идентификатор термина, а термин slug

Так

 $term = get_term_by( 'id', $var, $tax_slug ); 

следует изменить на

 $term = get_term_by( 'slug', $var, $tax_slug ); 

Но не нужно, так как вы хотите получить слизню.

Далее, обратите внимание. Таксономии «Категория» и «Почтовый тег» не представлены как «категория» и «тег», но сохраняются как «category_name» и «tag», поэтому вам нужно преобразовать $ tax_slug соответственно в ваш цикл foreach. Например:

 $tax_slug_original = $tax_slug; if( $tax_slug == 'category' ){ $tax_slug = 'category_name'; } if( $tax_slug == 'post_tag' ){ $tax_slug = 'tag'; } $var = $query->query_vars[$tax_slug]; $tax_slug = $tax_slug_original;