У меня есть пользовательский запрос, который я пытаюсь выполнить. Как я хочу, чтобы это работало,
Во-первых, проверьте заголовок страницы
если заголовок страницы совпадает с именем кошки из пользовательской таксономии, отобразите все сообщения, относящиеся к этой пользовательской таксономии — тип сообщения.
Единственная проблема в том, что ничего не возвращается, я убедился, что нацеливаюсь на правильный «тип сообщения» & правильное название таксономии. Он вернет идентификатор кошки со следующим:
$cat->cat_ID;
Но не будет возвращать никаких сообщений, вот мой код:
<?php
// Get the name of the page
$theTitle = get_the_title();
//Get the taxonomy for the custom post type
$categoryselect = array( 'taxonomy' => 'team-members' );
$categories = get_categories($categoryselect);
// loop through each category as cat
foreach ($categories as $cat):
//If cat is the same as title *name* then lets do something
if($theTitle == $cat->cat_name):?>
<h3>We’re here to help.</h3>
<?php
$catID = $cat->cat_ID;
//echo $catID;
//query the posts but, use the cat ID so the page relates to it.
$args = query_posts(array( 'post_type' => 'team', 'cat'=> $catID, 'orderby' => 'title', 'showposts' => -1 ));
$loop = new WP_Query( $args );
// run the loop for posts
while ( $loop->have_posts() ) : $loop->the_post();?>
<div class="person">
<h5><?php the_title(); ?></h5>
</div>
<?php endwhile;
endif;
endforeach;
Это на шаблоне page.php
Какие-либо предложения?
У вас есть пара вопросов здесь. Давайте начнем с этой строки
$args = query_posts(array( 'post_type' => 'team', 'cat'=> $catID, 'orderby' => 'title', 'showposts' => -1 ));
query_posts
никогда не должен использоваться, и вы не должны использовать два запроса в одномЗамечания: Эта функция не предназначена для использования плагинами или темами. Как будет объяснено позже, есть более эффективные варианты для изменения основного запроса. query_posts () — это слишком упрощенный и проблемный способ изменить основной запрос страницы, заменив его новым экземпляром запроса. Он неэффективен (перезапускает SQL-запросы) и в некоторых обстоятельствах потерпит неудачу (особенно часто при разбивке на посты).
во-вторых showposts
был амортизирован в пользу posts_per_page
Ваша терминология неверна, и поэтому вы используете неверные параметры в своем запросе. Вы работаете не с категориями здесь, а с пользовательской таксономией и терминами. Чтобы получить представление о категориях, терминах и пользовательских таксономиях, см. эта почта Я сделал на WPSE
Вы должны использовать tax_query
а не параметры категории в WP_Query
Чтобы вернуться к тому, как вы получаете свои условия. То, как вы делаете это с get_categories()
это не так, но это может сбить с толку, так как вы работаете с пользовательской таксономией, а не со встроенной category
систематики. Я бы предложил использовать get_terms()
вместо
Я на самом деле чувствую, что вам не нужно использовать get_terms
, get_categories
или foreach
петля. Я проверил ваш код, и кажется, что что-то покажет только тогда, когда имя термина совпадает с именем страницы.
У вас уже есть название таксономии и название термина, единственное, что вы можете сделать, это проверить, термин существует, а затем передать это на ваш пользовательский запрос
Это модифицированная версия вашего кода, UNTESTED
<?php
// Get the name of the page
$theTitle = get_the_title();
//Get the taxonomy for the custom post type
$taxonomy = 'team-members';
//Set the page title as term name
$term = $theTitle;
if( term_exists( $term, $taxonomy ) ) : // Check if there is a term that match the page title ?>
<h3>We’re here to help.</h3>
<?php
//query the posts but, use the cat ID so the page relates to it.
$args = array(
'post_type' => 'team',
'orderby' => 'title',
'posts_per_page' => -1,
'tax_query' => array(
array(
'taxonomy' => $taxonomy,
'field' => 'name',
'terms' => $term,
'include_children' => false
),
),
);
$loop = new WP_Query( $args );
// run the loop for posts
while ( $loop->have_posts() ) : $loop->the_post();?>
<div class="person">
<h5><?php the_title(); ?></h5>
</div>
<?php endwhile;
endif;
?>
РЕДАКТИРОВАТЬ
Сейчас протестировали код и внесли несколько небольших корректировок. Он работает на 100% сейчас на моей локальной установке.
Других решений пока нет …