我有一个我正在尝试运行的自定义查询。我希望它如何工作,
首先,检查页面标题
如果页面标题与自定义分类中的cat名称相同,则显示该自定义分类中的所有帖子 - 帖子类型。
唯一的麻烦是,它没有返回任何东西,我已经确定我的目标是正确的“帖子类型”&正确的“分类法”名称。它将使用以下内容返回cat id:
$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 :(得分:1)
这里有几个问题。让我们从这一行开始
$args = query_posts(array( 'post_type' => 'team', 'cat'=> $catID, 'orderby' => 'title', 'showposts' => -1 ));
query_posts
,也不应该在一个注意:此功能不适用于插件或主题。如后面所述,有更好的,更高性能的选项来改变主查询。 query_posts()是一种过于简单化和有问题的方法来修改页面的主要查询,方法是用新的查询实例替换它。它是低效的(重新运行SQL查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。
其次showposts
已弃用,以支持posts_per_page
您的术语不正确,因此您在查询中使用了错误的参数。您不是在这里使用类别,而是使用自定义分类和术语。要更好地了解类别,术语和自定义分类,请参阅this post我在WPSE上做过
你应该使用tax_query
而不是category parameters中的WP_Query
回到你如何获得你的条款。使用get_categories()
执行此操作的方式并没有错,但是当您实际使用自定义分类而不是内置category
分类时,它可能会变得混乱。我建议使用get_terms()
代替
我实际上觉得您不需要使用get_terms
,get_categories
或foreach
循环。我已经检查了你的代码,似乎唯一一次显示的东西是术语名称等于页面名称。
您已经拥有了分类名称和术语名称,您可以做的唯一事情就是检查term exists,然后将其提供给您的自定义查询
这是您的代码的修改版本, 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%工作。