我有我的主要博客,其中列出了所有帖子。
我还有一个类别页面,仅列出1个类别的帖子。
主要博客
A类网页
B类页面
如果用户点击查看帖子,然后使用默认的next / prev链接功能,则WordPress无法知道下一个帖子应该是什么。
例如,如果用户正在查看帖子#3,那么下一篇文章应该是#4还是#5?这一切都取决于用户来自何处。
所以我编写了以下代码来回答这个问题,并认为我会分享它。
答案 0 :(得分:0)
注意:我知道这不是最有效的方法,特别是如果您有数千个帖子。我有兴趣看到更好的方式来获得下一篇文章。
将以下内容添加到functions.php文件中:
/*
* Session Tracking
*/
add_action('init', 'start_session', 1);
function start_session() {
if(!session_id()) {
session_start();
}
}
// Update Cookie trail
function update_cookie_trail() {
$_SESSION['ref_category'] = get_query_var('cat');
}
/*
* Return next post based off of cookies
*/
function next_post_from_session($text, $categories) {
global $post;
$cat_array = explode(',', $categories);
$cat_array[] = $_SESSION['ref_category'];
// Get all posts, exclude Hidden cat
$args = array(
'numberposts' => -1,
'category' => implode(',', $cat_array),
'orderby' => 'post_date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish',
);
$allPosts = get_posts( $args );
$index = 0;
foreach( $allPosts as $thePost ) {
$index++;
if($post->ID == $thePost->ID) {
$nextPost = $allPosts[$index++];
$url = get_permalink($nextPost->ID);
$a = '<a href="'.$url.'" title="'.esc_attr($nextPost->post_title).'" />'.$text.'</a>';
return $a;
}
}
}
/*
* Return previous post based off of cookies
*/
function previous_post_from_session($text, $categories) {
global $post;
$cat_array = explode(',', $categories);
$cat_array[] = $_SESSION['ref_category'];
// Get all posts, exclude Hidden cat
$args = array(
'numberposts' => -1,
'category' => implode(',', $cat_array),
'orderby' => 'post_date',
'order' => 'DESC',
'post_type' => 'post',
'post_status' => 'publish',
);
$allPosts = get_posts( $args );
$index = 0;
foreach( $allPosts as $thePost ) {
if($post->ID == $thePost->ID) {
$prevPost = $allPosts[$index-1];
$url = get_permalink($prevPost->ID);
$a = '<a href="'.$url.'" title="'.esc_attr($prevPost->post_title).'" />'.$text.'</a>';
return $a;
}
$index++;
}
}
/*
* Generate a "back" URL to the previous category page based off session data
*/
function previous_category_permalink() {
$ref_url = $_SESSION['ref_category'];
return get_category_link($ref_url);
}
然后在任何category.php或您显示多篇博文的页面(如“相关帖子”部分),运行此功能:
update_cookie_trail();
然后在你的single.php上你可以使用以下功能。
<?php echo next_post_from_session('Next', '-24, 10'); ?>
<a class="close" href="<?php echo previous_category_permalink(); ?>">
Back
</a>
<?php echo previous_post_from_session('Previous Post', '-24, 10'); ?>
'-24,10'是一个参数,允许您通过逗号分隔的ID排除或明确包含类别。