向查询添加类别参数时,仍会显示所有帖子

时间:2014-08-25 作者:Laniakea

我的团队类型中有以下代码。我用来为成员信息创建自定义分类法的php文件:

function create_team_taxonomies() {
    $labels = array(
        \'name\'              => _x( \'Kategooriad\', \'taxonomy general name\' ),
        \'singular_name\'     => _x( \'Kategooria\', \'taxonomy singular name\' ),
        \'search_items\'      => __( \'Otsi kategooriatest\' ),
        \'all_items\'         => __( \'Kõik kategooriad\' ),
        \'parent_item\'       => __( \'Vanem kategooria\' ),
        \'parent_item_colon\' => __( \'Vanem kategooria:\' ),
        \'edit_item\'         => __( \'Muuda kategooriat\' ),
        \'update_item\'       => __( \'Uuenda kategooriat\' ),
        \'add_new_item\'      => __( \'Lisa uus kategooria\' ),
        \'new_item_name\'     => __( \'Uus kategooria nimi\' ),
        \'menu_name\'         => __( \'Kategooriad\' ),
    );

    $args = array(
        \'hierarchical\'      => true, // Set this to \'false\' for non-hierarchical taxonomy (like tags)
        \'labels\'            => $labels,
        \'show_ui\'           => true,
        \'show_admin_column\' => true,
        \'query_var\'         => true,
        \'rewrite\'           => array( \'slug\' => \'categories\' ),
    );

    register_taxonomy( \'team_categories\', array( \'team\' ), $args );
}
add_action( \'init\', \'create_team_taxonomies\', 0 );
但当我调用page team中的查询时。php使用以下方式:

<?php query_posts( \'post_type=team&cat=noukogu&showposts=15\' ); if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

<?php $title=s tr_ireplace( \'"\', \'\', trim(get_the_title())); $desc=s tr_ireplace( \'"\', \'\', trim(get_the_content())); ?>

<div class="member">

    <img class="image" src="<?php print team_thumbnail_url($post->ID) ?>" alt="liikme pilt">

    <h3 class="title"><?php echo $title; ?></h3>
    <p class="description">
        <?php echo $desc; ?>
    </p>

</div>
<!-- End member -->

<?php endwhile; endif; ?>
所有成员帖子都会显示出来。不是noukogu 类别职位。

你知道是什么导致了这个问题吗?

UPDATE: 我现在明白了cat 用于类别ID,但当我将其更改为category_name(使用类别slug)根本没有帖子显示。

2 个回复
最合适的回答,由SO网友:cybmeta 整理而成

第一:不要使用query_post 用于二次回路。它改变了主查询,您最终可以得到wire结果。而是使用new WP_Query实例。See this question for detail info.

现在来谈谈你的问题。您使用的是“cat”参数,它用于“category”分类法,而不是自定义分类法。您应该使用tax_query 改为参数:

<?php
$tax_query =  array(
                 \'taxonomy\' => \'team_categories\',
                 \'field\'    => \'slug\',
                 \'terms\'    => \'noukogu\'
              );

$args = array(
    \'post_type\' => \'team\',
    \'tax_query\' => array( $tax_query ),
 );

$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) {
        $query->the_post();

        $title = str_ireplace( \'"\', \'\', trim(get_the_title())); $desc=str_ireplace( \'"\', \'\', trim(get_the_content()));
        ?>

        <div class="member">
          <img class="image" src="<?php print team_thumbnail_url($post->ID) ?>" alt="liikme pilt">
           <h3 class="title"><?php echo $title; ?></h3>
            <p class="description">
                <?php echo $desc; ?>
            </p>

      </div>
      <!-- End member -->

   <?php
   }
}

wp_reset_postdata();
?>

SO网友:Pieter Goosen

您的代码中有一些导致此失败的缺陷

首先,也是最重要的,never (我的重点)使用query_posts 构造自定义查询。

Note: 此功能不适用于插件或主题。如后文所述,有更好、性能更好的选项来更改主查询。query\\u posts()是一种过于简单且有问题的方法,通过将页面的主查询替换为新的查询实例来修改它。它效率低下(重新运行SQL查询),并且在某些情况下会彻底失败(尤其是在处理POST分页时)

而是使用如下类WP_Query 构造自定义查询的步骤

至于使用category参数时查询失败的原因,很明显,您没有使用categories,或者实际上没有使用categories术语:-)。您正在对术语使用自定义分类法,该分类法不适用于中的类别参数WP_Query. 您应该使用税务参数(tax_query) 你可以去看看this link.

实例

$args = array(
    \'post_type\' => \'team\',
    \'tax_query\' => array(
        array(
            \'taxonomy\' => \'team_categories\',
            \'field\'    => \'slug\',
            \'terms\'    => \'SLUG FOR PARTICULAR TERM\',
        ),
    ),
);
$query = new WP_Query( $args );
此链接还将提供有关如何使用WP_Query

要了解类别和自定义分类法之间的区别,请阅读我的answer here

结束

相关推荐

Featured posts and the loop

我正在尝试在索引中添加一个框。php在何处显示最新的3篇特色帖子。根据this tutorial, 我已将以下内容添加到functions.php:add_theme_support( \'featured-content\', array( \'filter\' => \'magdeleine_get_featured_posts\', \'max_posts\' => 3, ) ); function magdeleine