使用 Wordpress 中的当前帖子 ID 获取下一个/上一个帖子 ID

Posted

技术标签:

【中文标题】使用 Wordpress 中的当前帖子 ID 获取下一个/上一个帖子 ID【英文标题】:Getting Next/Previous Post ID using Current Post ID in Wordpress 【发布时间】:2011-09-13 13:02:35 【问题描述】:

我想写一个自定义的 next/prev 函数来动态地在fancybox弹出窗口中显示帖子信息。因此,我需要使用 php 根据当前显示的任何 Post 获取下一个和上一个 Post ID。我知道当前的帖子 ID 是什么,我可以将其发送给函数,但我不知道如何使用该 ID 来获取相邻的 ID。

编辑:这是我目前的代码(不起作用)

<?php
require_once("../../../wp-blog-header.php");

if (isset($_POST['data']))
    $post_id = $_POST['data'];
else
    $post_id = "";

$wp_query->is_single = true;
$this_post = get_post($post_id);
$in_same_cat = false;
$excluded_categories = '';
$previous = false;
$next_post = get_adjacent_post($in_same_cat,$excluded_categories,$previous);


$post_id = $next_post->id;
$title = $next_post->post_title;

$dataset = array ( "postid"=>$post_id, "posttitle"=>$title );

//Because we want to use json, we have to place things in an array and encode it for json.
//This will give us a nice javascript object on the front side.

echo json_encode($dataset);


?>

【问题讨论】:

【参考方案1】:

get_adjacent_post() 使用全局 $post 作为其参考点,因此您需要替换它:

$this_post = get_post($post_id);

用这个:

global $post;
$post = get_post($post_id);

WordPress 还提供 get_next_post()get_previous_post(),您可以在此处使用它们,而不是使用带有所有这些参数的 get_adjacent_post()。这是最终产品:

<?php
require_once("../../../wp-blog-header.php");

if (isset($_POST['data']))
    $post_id = $_POST['data'];
else
    $post_id = "";

$wp_query->is_single = true;

global $post;
$post = get_post($post_id);

$previous_post = get_previous_post();
$next_post = get_next_post();

$post_id = $next_post->id;
$title = $next_post->post_title;

$dataset = array ( "postid"=>$post_id, "posttitle"=>$title );

//Because we want to use json, we have to place things in an array and encode it for json.
//This will give us a nice javascript object on the front side.

echo json_encode($dataset);

?>

我不确定您想为 $dataset 数组中上一篇和下一篇文章的 ID 和标题使用什么键,所以我暂时保留它。

【讨论】:

【参考方案2】:

要让它工作,我必须将$next_post-&gt;id; 更改为$next_post-&gt;ID;,即大写ID

我在 Wordpress 中的 index.php 上这样使用它——我将它插入到循环的顶部:

<div class="work-post" id="<?php the_ID(); ?>">

然后在循环中我使用这个: `

        if (isset($_POST['data']))
            $post_id = $_POST['data'];
        else
            $post_id = "";
        
        $wp_query->is_single = true;

        global $post;
        $post = get_post($post_id);

        $next_post = get_next_post();
        $previous_post = get_previous_post();

        ?>

        <!-- call only if a value exists -->
            <?php if($next_post) : ?>
                <a href="#<?php echo $next_post->ID;?>" class="anchorLink"><div>PREV.</div></a>
            <?php endif; ?>
        <!-- call only if a value exists -->

        <!-- call only if a value exists -->
            <?php if($previous_post) : ?>
                <a href="#<?php echo $previous_post->ID;?>" class="anchorLink"><div>NEXT</div></a>
            <?php endif; ?>
        <!-- call only if a value exists -->`

【讨论】:

【参考方案3】:

这是我的代码,效果很好。 $post_id 是当前帖子 ID。

function get_previous_post_id( $post_id ) 
    // Get a global post reference since get_adjacent_post() references it
    global $post;
    // Store the existing post object for later so we don't lose it
    $oldGlobal = $post;
    // Get the post object for the specified post and place it in the global variable
    $post = get_post( $post_id );
    // Get the post object for the previous post
    $previous_post = get_previous_post();
    // Reset our global object
    $post = $oldGlobal;
    if ( '' == $previous_post ) 
        return 0;
    return $previous_post->ID; 
 

function get_next_post_id( $post_id ) 
    // Get a global post reference since get_adjacent_post() references it
    global $post;
    // Store the existing post object for later so we don't lose it
    $oldGlobal = $post;
    // Get the post object for the specified post and place it in the global variable
    $post = get_post( $post_id );
    // Get the post object for the next post
    $next_post = get_next_post();
    // Reset our global object
    $post = $oldGlobal;
    if ( '' == $next_post ) 
        return 0;
    return $next_post->ID; 
 

然后你只需调用函数。示例:

echo get_previous_post_id( $current_id );
echo get_next_post_id( $current_id );

祝你好运!

【讨论】:

以上是关于使用 Wordpress 中的当前帖子 ID 获取下一个/上一个帖子 ID的主要内容,如果未能解决你的问题,请参考以下文章

如何从 wordpress 中的帖子页面 id 获取 acf 的画廊图片 url

在functions.php中获取wordpress帖子ID

根据 phpmyadmin 中的类别 ID 获取 wordpress 帖子 ID 列表

在 wordpress 中获取 2 级类别中的下一个、上一个帖子

Wordpress 循环:获取循环内的当前帖子计数

从帖子标题获取 WordPress 帖子 ID