GET_PREVICE_POST(),同时考虑粘性帖子

时间:2017-07-08 作者:dodov

假设我有帖子foo, barbaz. 它们按以下顺序发布:

1. foo
2. bar
3. baz
如果我打电话get_previous_post()single.php 属于baz, 我去拿bar.


我设置bar 粘乎乎的。现在,帖子的顺序如下:

2. bar
1. foo
3. baz
如果我打电话get_previous_post() 查看时baz, 我还是会bar, 因为这是前一篇文章的时间顺序。然而,在立柱的实际“循环显示”中,foo 是上一个。

问题

如何在WordPress中获得“视觉上的上一篇”帖子?

Edit: 基本上,我想要get_previous_post() 将粘性帖子作为最新帖子进行处理,而不考虑其发布日期。

1 个回复
SO网友:kero

好吧,这可能有点过于复杂了,但至少它应该可以工作(未经测试)。

只需这样调用函数

get_adjacent_without_sticky( get_the_ID(), true); // get previous post
get_adjacent_without_sticky( get_the_ID(), false); // get next post
如果get_previous_post() 允许ID传递,而不仅仅在当前帖子的上下文中运行它。现在您可以复制get_adjacent_post() 并根据您的需要进行调整,但我不喜欢在WordPress中直接使用SQL,因此使用常见函数时,它应该是这样工作的:

function get_adjacent_without_sticky($id, $previous = true) {

    // get date of current post as reference
    $date = explode(\'.\', get_the_date(\'d.m.Y\', $id));
    $date_array = array(
        \'day\' => $date[0],
        \'month\' => $date[1],
        \'year\' => $date[2],
    );

    // for previous post we need the first post before current one
    if ($previous) {
        $order = \'DESC\';
        $date_query = array(
            \'before\' => $date_array,
        );
    }
    // for next post we need the first post after current one
    else {
        $order = \'ASC\';
        $date_query = array(
            \'after\' => $date_array,
        );
    }

    $args = array(
        // order sticky posts as regular ones
        \'ignore_sticky_posts\' => 1,
        // get only the one post we want
        \'posts_per_page\' => 1,
        \'order\' => $order,
        \'orderby\' => \'date\',
        \'date_query\' => $date_query,
    );

    // now run that query
    $the_query = new WP_Query($args);
    if ($the_query->have_posts()) {
        $the_query->the_post();
        $result = get_post( get_the_ID() );
    } else {
        $result = NULL;
    }
    wp_reset_postdata(); // Restore original Post Data

    return $result;
}
相关主题:

(我的答案基本上是将这两个源组合成一个函数。)

结束

相关推荐

Orderby Post Views

我想为我的帖子制作一个筛选列表(在主页、搜索页面和归档页面中),这是我正在寻找的一个示例排序方式:-日期(/?orderby=Date)-随机(/?orderby=rand)-视图(这里我需要一个orderby=视图或类似的东西)我正在使用以下代码计算和查看帖子视图:// Count views function setPostViews($postID) { $count_key = \'post_views_count\'; $count = get_post_meta