从子类别中获取带有父类别ID的帖子

时间:2014-11-25 作者:nanonano

我有一个插件,可以显示所选类别的帖子。当选择子类别时,它可以完美地工作。但是,当我选择父类别时,它不会显示子类别中的任何帖子。

我希望这是必须更改的片段,但我不确定。

如果有人能帮助我就好了。

<ul>

<?php 
   query_posts(array(
      \'post_type\' => \'post\', 
      \'category__in\' => $text, 
      \'orderby\' => \'meta_value_num\', 
      \'meta_key\' => \'rankk\', 
      \'order\' => \'DESC\', 
      \'posts_per_page\' => 100
   )); 
?>

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

正如我在对你的问题的评论中所说的那样

糟糕的插件编写总是会在某些时候导致一些灾难。在我看来,删除该插件并编写自己的代码,或者找到一个编写正确的插件。当整个汽车完全报废时,更换损坏的轮胎是没有用的:-)

刚开始,never 使用query_posts

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

在这里,您最好编写自己的代码并放弃插件。您还可以将当前插件(仅“好”代码)与我将提供给您的代码合并到您自己的插件中(如果需要)。

永远不要对非作者的插件/主题文件进行任何更改。最大的原因是,到了更新日,你会失去all 您可以自定义。而是创建自己的插件或在子主题中进行更改

使用当前的类别参数,您想要完成的是不可行的。你最好在这里使用tax_query 具有WP_Query. 使用tax_query, 默认情况下,要设置的术语中包含子术语,这就是您要查找的

您可以尝试以下操作(请注意:这需要PHP 5.4+)

$args = [
      \'post_type\' => \'post\', 
      \'orderby\' => \'meta_value_num\', 
      \'meta_key\' => \'rankk\', 
      \'order\' => \'DESC\', 
      \'posts_per_page\' => 100,
      \'tax_query\' => [
            [
                \'taxonomy\' => \'category\',
                \'field\'    => \'term_id\',
                \'terms\'    => \'YOUR PARENT CATEGORY ID\',
            ],
        ],
];

$q = new WP_Query( $args );

if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        the_title();
    }
    wp_reset_postdata();
} 
对于5.4之前的PHP版本,请尝试以下操作

$args = array(
      \'post_type\' => \'post\', 
      \'orderby\' => \'meta_value_num\', 
      \'meta_key\' => \'rankk\', 
      \'order\' => \'DESC\', 
      \'posts_per_page\' => 100,
      \'tax_query\' => array(
            array(
                \'taxonomy\' => \'category\',
                \'field\'    => \'term_id\',
                \'terms\'    => \'YOUR PARENT CATEGORY ID\',
            ),
        ),
);

$q = new WP_Query( $args );

if ( $q->have_posts() ) {
    while ( $q->have_posts() ) {
        $q->the_post();
        the_title();
    }
    wp_reset_postdata();
} 

SO网友:Seenuvasan Velayutham

您可以这样使用:

    <?php
$category_id = get_cat_ID(\'Category Name\');
 <!-- Start the Loop. -->
 <?php if ( have_posts() ) : while ( have_posts() ) : the_post(); ?>

 <!-- Test if the current post is in category "Category Name". -->
 <!-- If it is, the div box is given the CSS class "post-cat-special". -->
 <!-- Otherwise, the div box is given the CSS class "post". -->

 <?php if ( in_category($category_id) ) { ?>
           <div class="post-cat-special">
 <?php } else { ?>
           <div class="post">
 <?php } ?>
</div>
 <!-- Stop The Loop (but note the "else:" - see next line). -->

 <?php endwhile; else: ?>


 <!-- The very first "if" tested to see if there were any Posts to -->
 <!-- display.  This "else" part tells what do if there weren\'t any. -->
 <p>Sorry, no posts matched your criteria.</p>


 <!-- REALLY stop The Loop. -->
 <?php endif; ?>
在需要显示的任何地方使用此魔法代码。。。。

结束

相关推荐

Show Pages in Categories

通过将此代码添加到函数中,我创建了category函数。php:function page_category() { register_taxonomy_for_object_type(\'category\', \'page\'); } // Add to the admin_init hook of your theme functions.php file add_action( \'init\', \'page_category\' ); 但问