正如我之前在评论中所说
您在中使用的值无效get_previous_post()
和get_next_post()
. 您最好在这里编写自己的函数
我得出了以下结论:
获取所有帖子的数组并确定当前帖子的位置。
获取当前帖子两侧帖子的帖子ID。ID的数量取决于$x_from_current
. 当前默认值为1,这意味着它将检索当前帖子旁边的ID。如果设置为2,它将检索当前帖子旁边的两篇帖子
您还可以选择设置该功能,以从与当前帖子相同的期限中获取下一篇/上一篇帖子。只需记住将分类法以及默认值设置为category
我决定只返回相邻帖子的帖子ID,因为您需要显示缩略图,在这种情况下,您只需要帖子ID
下面是函数。我已经对它进行了很好的注释,以便您了解该函数的工作原理和使用方法
function get_x_post_from_current( $x_from_current, $in_same_term, $taxonomy, $previous ) {
// Get the current single post ID. To be save, use get_queried_object_id()
$current_post_id = get_queried_object_id();
// Option to choose if adjacent posts should be from the same term. Should then set $taxonomy
if( true === $in_same_term ) {
/**
* Use wp_get_post_terms() to retrieve the terms/categories the current post belongs
* to
*
* @see http://codex.wordpress.org/Function_Reference/wp_get_post_terms
*
*/
$terms = wp_get_post_terms( $current_post_id, $taxonomy, [\'fields\' => \'ids\'] );
if ( ! empty( $terms ) && ! is_wp_error( $terms ) ){
/**
* Use tax_query to retrieve a list of posts from the same term as the current post.
* To speed up the query, get only post ID\'s. We don\'t need any other field\'s info
*
* @see http://codex.wordpress.org/Class_Reference/WP_Query#Taxonomy_Parameters
*/
$args = [
\'posts_per_page\' => -1,
\'fields\' => \'ids\',
\'tax_query\' => [
[
\'taxonomy\' => $taxonomy,
\'field\' => \'term_id\',
\'terms\' => $terms[0],
\'include_children\' => false,
]
]
];
}
}else{
// Default if $in_same_term is false
$args = [
\'posts_per_page\' => -1,
\'fields\' => \'ids\'
];
}
$q = new WP_Query( $args );
// Get the current post position. Will be used to determine adjacent posts
$current_post_position = array_search( $current_post_id, $q->posts );
/**
* Previous posts = Newer posts
* Next Posts = Older posts
*
* If $previous is true, reverse array, use array_slice to get the desired amount
* of ID\'s on the left of the current post. Reverse that array to keep synchronous order
*
* If $previous is false, slice the array to the right of the current post
*
*/
if( true === $previous ) {
$reverse_position = count( $q->posts ) - ( $current_post_position + 1 );
$array_reverse = array_reverse( $q->posts );
$keys = array_slice( $array_reverse, $reverse_position + 1, $x_from_current );
}else{
$keys = array_slice( $q->posts, $current_post_position + 1, $x_from_current );
}
// Returns an array of post ID\'s or an empty string if no next/previous post is found
return $keys;
}
// Get the previous post\'s ID\'s. Amount of ID\'s to retrieve is set by $x_from_current
function get_previous_x_post_id( $x_from_current = 1, $in_same_term = false, $taxonomy = \'category\' ) {
return get_x_post_from_current( $x_from_current,$in_same_term, $taxonomy, true );
}
// Get the next post\'s ID\'s. Amount of ID\'s to retrieve is set by $x_from_current
function get_next_x_post_id( $x_from_current = 1, $in_same_term = false, $taxonomy = \'category\' ) {
return get_x_post_from_current( $x_from_current,$in_same_term, $taxonomy, false );
}
这就是您应该如何使用单曲中的函数。php。在你的情况下,两边都需要两个帖子(下一个/前一个帖子)
$previous_posts = get_previous_x_post_id( 2 );
?><pre><?php var_dump($previous_posts); ?></pre><?php // Just to see the output
if( $previous_posts ) {
foreach ( $previous_posts as $previous_post ) {
// $previous_post holds the post ID. Use $previous_post to return the post thumbnail
//Get the post title
$get_post = get_post( $previous_post );
echo apply_filters( \'the_title\', $get_post->post_title );
}
}
对下一篇文章也这样做。
这只是最低限度。您可以根据自己的需要进行扩展。你也可以看看this post 我最近做过。这是一个非常广泛的单post分页函数,如果需要,可以使用引用器和多个post类型。您可以非常轻松地在其中构建此功能
根据评论进行编辑,例如,我想从左到右对它们进行排序,即1,2,4,5。但现在是2,1,5,4号订单,我不想让他们回头
在原始代码中,出于某种未知的原因,我为以前的帖子反转了返回的帖子ID数组。现在已经解决了(或者根据知识,很遗憾,我现在无法测试任何东西)
我想在缩略图下添加标题我可以将字段更改为ID和标题吗?
没有选项只返回帖子标题。这里最好的工作是使用函数返回的post ID,并将其用于get_post
要获得特定的帖子,请使用帖子的标题。
改变函数本身来适应这一点会非常昂贵,因为您需要完全检索所有帖子,如果您有1000篇帖子,就有超时的危险。这就是为什么我想得到所有的帖子ID,因为这很快而且不太贵。最好是进行四个小的db查询,以获取四个相关帖子的信息
更新版本请参见以上代码