如何在标记页面上执行Query_Posts

时间:2015-03-26 作者:Lukadadiani

所以我用的是tags.php 在我的WordPress网站上创建特色页面;我想做的是在包含前五篇文章的每个页面的索引上创建一个特色区域。

我在主页上有一个类似的特色区域,使用粘性帖子;但在这种情况下,我只想将前五篇帖子放在特色循环中,然后将其余帖子放在普通循环中。

我尝试了很多谷歌搜索和查看WordPress文档,但都失败了。以下是我用于特色区域的代码:(但是,如果我尝试将其放在标记页面上,它只会创建另一个主循环)

    <?php if(is_home() && !is_paged()) { ?>         
<?php query_posts(array(\'post__in\'=>get_option(\'sticky_posts\'))); ?>
    <?php while (have_posts()) : the_post(); ?>
        <article class="sticky">
            <div class="desc">
                <h2 class="header">Featured Post:</h2>
                <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>

                <?php the_content(\'\'); ?>

                <ul class="post-info">
                    <li><?php the_time(\'jS F Y\'); ?></li>
                    <li>Posted in <?php the_category(\', \'); ?></li>
                    <li><a href="<?php the_permalink(); ?>#comments"><?php comments_number(\'No Comments\', \'1 Comment\', \'% Comments\' );?></a></li>
                </ul>
            </div>
        </article>
    <?php endwhile; ?>

<?php wp_reset_query(); ?>
<?php } ?>  

1 个回复
最合适的回答,由SO网友:Tom J Nowell 整理而成

这就是你所有问题的根源:

<?php if(is_home() && !is_paged()) { ?>         
    <?php query_posts(array(\'post__in\'=>get_option(\'sticky_posts\'))); ?>
这将获取当前查询,并将其放在一边,然后在其位置放置新查询。这里你是说你想显示粘性帖子的第一页。你没有提到标签或类别等,记住,计算机完全按照你告诉他们的去做,你也没有提到你所处的环境。

因此,您希望前5篇文章的标记与其他文章不同。因此,不是:

while ( have_posts() ) {
    the_post();
    // it\'s a post! display things!
}
执行:

$counter = 0;
while ( have_posts() ) {
    the_post();
    $counter += 1;
    if ( $counter <= 5 ) {
        //  it\'s one of the first 5 posts! display the special top 5 post!
    } else {
        // it\'s a post! display things!
    }
}
或者,当您到达第6个立柱时,退出循环并开始新的循环:

$counter = 0;
while ( have_posts() ) {
    $counter += 1;
    if ( $counter > 5 ) {
        break; // we\'ve already shown 5 posts! Exit this loop and start the next one!
    }
    the_post();
    //  it\'s one of the first 5 posts! display the special top 5 post!
}
while( have_posts() ) {
    the_post();
    // it\'s a post! Display the post!
}
回到你的post__in, 如果只想显示粘性帖子,则应使用pre_get_posts 筛选器以修改传入当前查询的参数,以包括post__in 论点关于如何使用,网站上有很多很好的答案pre_get_posts 所以我不会在这里复制它们。

作为旁注,切勿使用query_posts 在任何情况下。我知道很多雇主会考虑query_posts 在商业代码中,这是一个严重的事件,许多审查过程都会出于很好的理由彻底拒绝包含它的代码。使用pre_get_posts 如果您需要修改页面上显示的内容,并且如果您需要单独的查询来获取帖子,例如边栏小部件等,请使用WP_Query 对象query_posts 保留在WordPress中主要是因为遗留的原因。遗憾的是,许多教程错误地推荐了它的使用

结束

相关推荐

Search tags in CPTs

我似乎不知道如何在wordpress搜索中包含标签。例如,如果我搜索“apple”,我希望在标题或内容中返回带有“apple”的帖子(默认wordpress功能)as well as 包含标签“apple”的帖子;当我添加\'tag\' => $keyword 行到WP\\u查询中,然后每次搜索都没有结果。$keyword = get_search_query(); $args = array( \'post_type\' => array(\'case_studie