如何从父类别中检索帖子,并在显示时按子项进行拆分?

时间:2014-06-25 作者:WPRookie82

我有一个Wordpress数据库,分为三类:

ID 3:欧洲
ID 4:法国(3岁的孩子)
ID 5:巴黎(4岁的孩子)

我现在需要显示其各自类别下的所有帖子,如下所示:

欧洲1号岗位2号岗位3号岗位

法国,1号岗位,3号岗位

巴黎邮政3

第1篇是在法国发表的,第2篇是在欧洲发表的,第3篇是在巴黎发表的,你能确认我这样做是对的吗?

<?php
    $args = array(\'cat\' => 3);
    $category_posts = new WP_Query($args);
?>

<!-- Show EUROPE block, so just loop, no check -->
<?php
    while($category_posts->have_posts()) : $category_posts->the_post();
        the_title("<br />");
    endwhile;
?>          

<!-- Show FRANCE block, check category name -->
<?php
    while($category_posts->have_posts()) : $category_posts->the_post();
        if (strpos(get_the_category()[0]->cat_name,\'France\') !== false)
            the_title("<br />");
    endwhile;
?>

<!-- Show PARIS block, check category name -->
<?php
    while($category_posts->have_posts()) : $category_posts->the_post();
        if (strpos(get_the_category()[0]->cat_name,\'Paris\') !== false)
            the_title("<br />");
    endwhile;
?>          
上述代码中省略了HTML格式用蹩脚的话来说,我只调用了一次WP\\u查询,然后我循环,检查法国和巴黎块的类别名称“France”和“Paris”。有更好的方法吗?如果我调用WP\\u Query三次,是否会导致性能问题?

非常感谢。

2 个回复
SO网友:engelen

使命感WP_Query 三次对性能来说并不太好,因为它会对数据库进行三次查询。在五月看来,你目前的做法似乎是正确的(也是最快的)方式。但是,你应该打电话$category_posts->rewind_posts() 每次while循环后重置WP_Query\'s循环到第一个立柱。

此外,您当前检查类别(如“法国”)的方式也不是很好。WordPress有一个功能来检查帖子是否有术语,has_term, 这非常适合你的事业:has_term( \'France\', \'category\' ) (可以省略最后一个参数,$post, 因为它默认使用循环中的当前post)。

SO网友:Pieter Goosen

您可以使用get_categories. 您拥有三个类别的ID,即使它们是父类别和子类别。您可以通过这些IDinclude 参数仅获取这三个类别,按ID排序并使用foreach 循环使用WP_Query 获取各自类别下的职位

请记住,当您将类别ID添加到include 参数以按升序添加它们。这是查询,根据需要进行修改

<?php 
$categories = get_categories(\'include=3,4,5&orderby=ID\'); //retrieve all the categories and save them as a variable $categories

    foreach($categories as $category) : // Use foreach to split $categories into individual categories and store as variable $category
?>
    <p><?php // Display the category name as a link to the actual category ?>
        Category: <?php echo $category->name ?>
    </p>

<?php
    $catid = $category->cat_ID; //Store the category ID as a variable to be used in WP_Query

    $args = array( 
        \'cat\' => $catid,
    );

    $query = new WP_Query($args);   

    // Start the Loop. You can use your own loop here
        while ( $query->have_posts() ) : $query->the_post(); 
    ?>  
        <p> 
            <?php the_title(); //Display only the title of the posts in the category ?> 
        </p>
    <?php
        endwhile;
    endforeach;
?>

结束

相关推荐

Show post categories

我正在尝试显示一些面包屑的帖子类别。目前,我有:the_category(\' / \', \'multiple\'); 但出于某种原因,它两次声明了父类别(我只想parent > child):FASHION / DAILY FASHION CANDY / FASHION 它应该是:FASHION / DAILY FASHION CANDY 有人知道它为什么这样做,以及如何改变它吗?