[英]Getting Next/Previous Post ID using Current Post ID in Wordpress
I want to write a custom next/prev function to dynamically display post information in a fancybox pop-up.我想编写一个自定义的下一个/上一个 function 以在fancybox弹出窗口中动态显示帖子信息。 So I need to use PHP to get the next and previous Post ID based on whatever Post is currently showing.所以我需要使用 PHP 根据当前显示的任何帖子获取下一个和上一个帖子 ID。 I know what the current post ID is and I can send that to a function ok, but I can't figure out how to use that ID to obtain the adjacent IDs.我知道当前的帖子 ID 是什么,我可以将其发送到 function 好的,但我不知道如何使用该 ID 来获取相邻的 ID。
Edit:Here is my code so far (which is not working)编辑:到目前为止,这是我的代码(不起作用)
<?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);
?>
get_adjacent_post()
uses the global $post
as its reference point, so you'll want to replace this: get_adjacent_post()
使用全局$post
作为其参考点,因此您需要替换它:
$this_post = get_post($post_id);
with this:有了这个:
global $post;
$post = get_post($post_id);
WordPress also provides get_next_post()
and get_previous_post()
, which you can use here instead of using get_adjacent_post()
with all of those arguments. WordPress 还提供了get_next_post()
和get_previous_post()
,您可以在此处使用它们,而不是在所有这些 arguments 中使用get_adjacent_post()
。 Here's the final product:这是最终产品:
<?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);
?>
I'm not sure what keys you'd like to use for the IDs and titles of the previous and next posts in the $dataset
array, so I'll leave that as is for now.我不确定你想为$dataset
数组中上一篇和下一篇文章的 ID 和标题使用什么键,所以我暂时保留它。
To get this to work I had to change $next_post->id;
为了让它工作,我不得不改变$next_post->id;
to $next_post->ID;
到$next_post->ID;
, ie capitalise ID
. ,即大写ID
。
I used it in Wordpress on index.php like this – I inserted this at the top of the loop:我在 index.php 上的 Wordpress 中使用了它,就像这样 - 我将它插入到循环的顶部:
<div class="work-post" id="<?php the_ID(); ?>">
then within the loop I use this: `然后在循环中我使用这个:`
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 -->`
This is my code, it worked good.这是我的代码,效果很好。 $post_id is current post ID. $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;
}
Then you just call function.然后您只需致电 function。 Example:例子:
echo get_previous_post_id( $current_id );
echo get_next_post_id( $current_id );
Good luck!祝你好运!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.