【问题标题】:Getting Next/Previous Post ID using Current Post ID in Wordpress使用 Wordpress 中的当前帖子 ID 获取下一个/上一个帖子 ID
【发布时间】: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);


?>

【问题讨论】:

    标签: php jquery ajax wordpress fancybox


    【解决方案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 );
        

        祝你好运!

        【讨论】:

          猜你喜欢
          • 2011-06-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2010-12-04
          • 2012-12-09
          • 2017-04-23
          相关资源
          最近更新 更多