Intereting Posts
Как дублировать запрос curl XML с использованием API HTTP? Как удалить дубликат сайта WordPress из поддомена после переезда Добавить «Категория» в Mysql Query Что такое Oembed Links For? Страница приложения WordPress не найдена ошибка для сообщений с дефис в permalink Как не следовать комментариям с разбивкой по страницам Как вызвать функцию плагина из формы переднего плана Обычное правило переписывания архива пользовательского типа the_content () не будет загружать галереи на главной странице Как я могу корректно разбивать файл loop.php? пользовательский загрузчик в области администратора Есть ли разница между the_title () и echo get_the_title ()? Могу ли я искать только некоторые поля настраиваемого типа сообщений? Создание внешних приложений WordPress / Как они работают Windows Live Writer – опция «Создать новую страницу» отключена. Как обновить конфигурацию учетной записи, чтобы включить возможность страницы

Фильтрация пользовательской таксономической пули на пользовательский тип сообщения

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

Я использую wp_query с аргументами, но не фильтрует пользовательскую таксономию slug – она ​​возвращает все результаты.

Для вашей информации я заказываю по типу персонализированного сообщения, и я показываю paginating results (не включая код для этого в этом примере). Я устанавливаю настраиваемый тип сообщений, настраиваемые поля и пользовательскую таксономию с помощью плагина Types, но я не уверен, что это имеет значение для этого вопроса.

Вот код:

if($wp_query->query->genre != "") { $genre = $wp_query->query->genre; } if($genre != "") { $taxArray = array( 'taxonomy' => 'genre', 'field' => 'slug', 'terms' => $genre, ); $args = array( 'post_type' => 'works', 'posts_per_page' => 40, 'meta_key' => 'wpcf-composition-date', 'orderby' => 'wpcf-composition-date', 'order' => "DESC", 'offset' => $offset, 'tax_query' => $taxArray ); $loop = new wp_query( $args ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <?php get_template_part('templates/content-works', get_post_format()); ?> <?php endwhile; ?> 

Чтобы уточнить, вот вывод $args со страницы, использующей приведенный выше код:

 Array ( [post_type] => works [posts_per_page] => 40 [meta_key] => wpcf-composition-date [orderby] => wpcf-composition-date [order] => DESC [offset] => 0 [tax_query] => Array ( [taxonomy] => genre [field] => slug [terms] => Array ( orchestral ) ) ) 

Как я уже сказал, приведенный выше код перечисляет все результаты всех пользовательских таксономий.

Есть ли ошибка в моем коде? Что я делаю не так? Как я могу отображать результаты, отфильтрованные пользовательским таксономическим слизнем?

Обновление … Просто посмотрел запрос, и кажется, что tax_query не добавляется в запрос:

 SELECT SQL_CALC_FOUND_ROWS testweb_posts.ID FROM testweb_posts INNER JOIN testweb_postmeta ON ( testweb_posts.ID = testweb_postmeta.post_id ) WHERE 1=1 AND testweb_posts.post_type = 'works' AND (testweb_posts.post_status = 'publish' OR testweb_posts.post_status = 'private') AND ( testweb_postmeta.meta_key = 'wpcf-composition-date' ) GROUP BY testweb_posts.ID ORDER BY testweb_posts.post_title ASC LIMIT 0, 40 

Solutions Collecting From Web of "Фильтрация пользовательской таксономической пули на пользовательский тип сообщения"

Как я уже говорил в комментариях, используйте pre_get_posts для изменения основного запроса. Никогда не заменяйте основной запрос на пользовательский. Опять же, из комментариев

Просто для начала, на каждой загрузке страницы вы запускаете один и тот же запрос дважды, он медленный, удваивает количество вызовов db и разбивки на страницы, чтобы настроить почти 100 процентов, это просто для получения одинаковых сообщений 🙂

Вы также можете проверить этот пост, который я сделал по этому вопросу

Сделать переход довольно просто, проще, чем вы думаете. Вот как

  • Создание шаблона taxonomy.php

  • Добавьте сюда следующее (я добавил теги php, чтобы освободить место для вашей маркировки HTML)

     <?php while ( have_posts() ) { the_post(); ?> <?php get_template_part('templates/content-works', get_post_format()); ?> <?php } ?> 
  • Теперь вам нужно переместить свои условия на functions.php внутри pre_get_posts ( требуется PHP 5.3+ )

     add_action('pre_get_posts', function ($q) { if(!is_admin() && $q->is_main_query() && $q->is_tax()) { $q->set('post_type', 'works'); $q->set('posts_per_page', 40); $q->set('meta_key', 'wpcf-composition-date'); $q->set('orderby', 'wpcf-composition-date'); $q->set('order', 'DESC'); } return $q; } 

Этого должно быть достаточно, чтобы заставить

 $args = array( 'post_type' => 'works', 'posts_per_page' => 40, 'meta_key' => 'wpcf-composition-date', 'orderby' => 'wpcf-composition-date', 'order' => "DESC", 'offset' => $offset, 'tax_query' => array( 'taxonomy' => 'genre', 'field' => 'slug', 'terms' => array('orchestral'), ); ); 

Не могли бы вы попробовать этот код для целей тестирования? Дайте мне знать, что возвращает этот запрос.