Ошибка WordPress пользовательской таксономии запроса

У меня есть пользовательский запрос, который я пытаюсь выполнить. Как я хочу, чтобы это работало,

  • Во-первых, проверьте заголовок страницы

  • если заголовок страницы совпадает с именем кошки из пользовательской таксономии, отобразите все сообщения, относящиеся к этой пользовательской таксономии — тип сообщения.

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

$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

Какие-либо предложения?

0

Решение

У вас есть пара вопросов здесь. Давайте начнем с этой строки

$args = query_posts(array( 'post_type' => 'team', 'cat'=> $catID, 'orderby' => 'title', 'showposts' => -1 ));
  1. query_posts никогда не должен использоваться, и вы не должны использовать два запроса в одном

Замечания: Эта функция не предназначена для использования плагинами или темами. Как будет объяснено позже, есть более эффективные варианты для изменения основного запроса. query_posts () — это слишком упрощенный и проблемный способ изменить основной запрос страницы, заменив его новым экземпляром запроса. Он неэффективен (перезапускает SQL-запросы) и в некоторых обстоятельствах потерпит неудачу (особенно часто при разбивке на посты).

  1. во-вторых showposts был амортизирован в пользу posts_per_page

  2. Ваша терминология неверна, и поэтому вы используете неверные параметры в своем запросе. Вы работаете не с категориями здесь, а с пользовательской таксономией и терминами. Чтобы получить представление о категориях, терминах и пользовательских таксономиях, см. эта почта Я сделал на WPSE

Вы должны использовать tax_query а не параметры категории в WP_Query

  1. Чтобы вернуться к тому, как вы получаете свои условия. То, как вы делаете это с get_categories() это не так, но это может сбить с толку, так как вы работаете с пользовательской таксономией, а не со встроенной category систематики. Я бы предложил использовать get_terms() вместо

  2. Я на самом деле чувствую, что вам не нужно использовать 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% сейчас на моей локальной установке.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]