如果标签的帖子少于3条,如何显示更多的随机帖子

时间:2017-11-01 作者:Recofa

当标签页上的帖子数小于3时
我想显示更多相关或随机的帖子,以填充每页的最大帖子数,即10篇

如何做到这一点?是否可以检查默认wordpress循环中循环中的帖子数

我使用默认的wordpress循环,它本质上是这样的。

<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
// posts
<?php endwhile; ?>
<?php endif; ?>
我尝试将此循环更改为wp\\u查询,但无法使其工作,我宁愿使用默认值,但使用默认值可能不可行?

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

有两个步骤可以实现此功能:

在主循环中添加一个计数器,以便检查输出的帖子数量。

如果计数器小于3,请再次运行查询并输出。

因此,对于步骤1,在循环之前设置一个计数器,并在每次循环运行时递增,如下所示:

<?php
// create your counter variable
$counter = 0;
if (have_posts()) :
    while (have_posts()) : the_post();
    // add 1 to your counter, as 1 post was just output
    $counter++;
    // (display the posts)
    endwhile;
endif; ?>
第二步:检查计数器变量,然后根据需要运行另一个查询。

<?php
// if counter is less than 3, run a separate query
if($counter < 3) {
    // get the ID of the current Tag
    $tag_id = get_queried_object()->term_id;
    // set up query arguments
    $args = array(
        // only pull Posts
        \'post_type\' => \'post\',
        // don\'t pull Posts that have the current Tag - prevents duplicates
        \'tag__not_in\' => array("$tag_id"),
        // set how many Posts to grab
        \'posts_per_page\' => 3
    );
    $extraPosts = new WP_Query($args);
    if($extraPosts->have_posts()):
        while($extraPosts->have_posts()) : $extraPosts->the_post();
        // display the posts)
        endwhile;
    endif;
} ?>
如果您希望标记存档始终显示3篇文章,则在“If”语句的开头部分之后,计算要获取的数量:

$numberToGet = 3 - $counter;
然后设置\'posts_per_page\' => "$numberToGet" 所以它是动态的。

SO网友:Tom J Nowell

是的,您可以,尽管我不建议使用随机页面,因为任何涉及随机性的内容都会对性能、流量缩放和页面加载时间造成严重影响

关于$wp_query

交换原因have_posts 对于$wp_query->have_posts() 什么都不做是双重的:

你必须检查这3篇文章,它们是完全一样的$wp_query 是全局变量,表示主查询,have_poststhe_post 等等都是包装纸global $wp_query; $wp_query->the_post() 等等,其中$wp_query 是一个WP_Query 对象

现在我们知道这是WP_Query 对象we can google it and look at that classes docs 并确保它有一个名为的成员变量:

$found_posts

找到的与当前查询参数匹配的帖子总数

所以你的支票是:

// after the main loop
global $wp_query;
if ( 4 > $wp_query->found_posts ) {
    // do something to make up the numbers here
}
这可能是对最新帖子或预选帖子、广告进行另一次查询,谁知道呢,甚至可能是WP_Query 循环,但这是另一个问题的主题

结束

相关推荐

Related Post by Tags Code

我试图实现的基本功能是获取当前帖子的标签,查找附加到这些标签的所有帖子,然后只返回至少有3个共同标签的帖子我已经玩了一个星期左右了。在这里找到了一个几乎完美完成工作的片段。$tags = array( \'bread\', \'cheese\', \'milk\', \'butter\'); $args = array( \'tag_slug__in\' => $tags // Add other arguments here );