查询自定义分类词wordpress错误

时间:2014-10-16 14:02:04

标签: php wordpress taxonomy

我有一个我正在尝试运行的自定义查询。我希望它如何工作,

  • 首先,检查页面标题

  • 如果页面标题与自定义分类中的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模板

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这里有几个问题。让我们从这一行开始

$args = query_posts(array( 'post_type' => 'team', 'cat'=> $catID, 'orderby' => 'title', 'showposts' => -1 ));
    永远不应该使用
  1. query_posts,也不应该在一个
  2. 中使用两个查询
      

    注意:此功能不适用于插件或主题。如后面所述,有更好的,更高性能的选项来改变主查询。 query_posts()是一种过于简单化和有问题的方法来修改页面的主要查询,方法是用新的查询实例替换它。它是低效的(重新运行SQL查询)并且在某些情况下会彻底失败(特别是在处理帖子分页时)。

    1. 其次showposts已弃用,以支持posts_per_page

    2. 您的术语不正确,因此您在查询中使用了错误的参数。您不是在这里使用类别,而是使用自定义分类和术语。要更好地了解类别,术语和自定义分类,请参阅this post我在WPSE上做过

    3. 你应该使用tax_query而不是category parameters中的WP_Query

      1. 回到你如何获得你的条款。使用get_categories()执行此操作的方式并没有错,但是当您实际使用自定义分类而不是内置category分类时,它可能会变得混乱。我建议使用get_terms()代替

      2. 我实际上觉得您不需要使用get_termsget_categoriesforeach循环。我已经检查了你的代码,似乎唯一一次显示的东西是术语名称等于页面名称。

      3. 您已经拥有了分类名称和术语名称,您可以做的唯一事情就是检查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%工作。