Intereting Posts
Каков параметр: «Таможенные поля», Связывание wp_enqueue не может найти файл javascript (добавляет «? Ver = xxx» в src) Бесконечная петля – WP_Query Программно разделить сообщение на несколько страниц Каталог ссылок на Symlinked не отображается в Admin Как зарегистрировать новую страницу настроек? Вставить листок Google, когда вы просматриваете его на отдельной вкладке? Перенаправление URL-адреса с API-интерфейсом Twitter Button не работает Увеличьте 10 пост-лимит на страницу Любой простой способ автоматически установить первое встроенное изображение в сообщение в виде миниатюры? Внештатная загрузка CSV в базу данных WP сайт с самоисследованием, медленные API-вызовы REST Изменить страницу редактирования для настраиваемого типа сообщений? Как добавить таблицы стилей только на страницы со специальным коротким кодом? Добавить определенное слово в ссылку по умолчанию по умолчанию

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

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

$args = array( 'manufacturer' => 'Keystone', 'post_type' => 'rv', 'category_name' => 'new', 'rvtype' => 'fifth-wheel' ); $loop = new WP_Query($args); 

Когда я запускаю этот цикл, вместо показа, только пятого колеса, отображаются все сообщения под типом производителя «Keystone». Почему это? Должен ли этот запрос показывать только сообщения с запрошенной пользовательской таксономией по типу post-type = rv с новой категорией, с rvtype = с пятым колесом?

Любое понимание было бы высоко оценено!

Довольно уверен, что вы не можете сопоставить несколько терминов таксономии в запросе – WordPress будет только чтить первый и игнорировать остальные.

По-видимому, это должно быть зафиксировано в 3.1.

В то же время есть плагин, который исправит вас прямо: http://scribu.net/wordpress/query-multiple-taxonomies

EDIT: Если вы хотите не-плагин решения, дайте мне знать. У меня есть один, который я использую.

EDIT: Вот быстрый и грязный способ без плагинов. Выделите этот код в файл functions.php.

 function wpse_5057_match_multiple_taxonomy_terms($where_clause, $wp_query) { // If the query obj exists if (isset($wp_query->query)) { $multi_query = $wp_query->query; if (is_array($multi_query) && isset($multi_query['multiple_terms'])) { global $wpdb; $arr_terms = $multi_query['multiple_terms']; foreach($arr_terms as $key => $value) { $sql = "AND $wpdb->posts.ID IN( SELECT tr.object_id FROM $wpdb->term_relationships AS tr INNER JOIN $wpdb->term_taxonomy AS tt ON tr.term_taxonomy_id = tt.term_taxonomy_id INNER JOIN $wpdb->terms AS t ON tt.term_id = t.term_id WHERE tt.taxonomy='%s' AND t.slug='%s')"; $where_clause .= $wpdb->prepare($sql, $key, $value); // add to the where } } } return $where_clause; // return the filtered where } add_action('posts_where','wpse_5057_match_multiple_taxonomy_terms',10,2); // Hook this to posts_where 

Теперь, когда вы запускаете запрос, добавьте новый аргумент с именем multiple_terms. Это должно содержать массив, в котором ключ является именем таксономии, а значение – это значение, которое вы хотите сопоставить. Вот так:

 $args = array( 'post_type' => 'rv', 'multiple_terms' => array('manufacturer' => 'Keystone', 'rvtype' => 'fifth-wheel') ); 

Работает на меня. Это изменено из идеи, которую я нашел на другом форуме или в блоге, но я не могу найти ее для жизни.