本机无法实现这一点,因此需要通过自定义函数来实现。
以下是您需要执行的操作:
(
此完整解决方案基于内置分类法,category
)
您需要实施一个系统,根据该系统,您需要确定在特定类别中查看的当前职位的当前职位。
您需要获取特定类别中最新帖子的ID,换句话说,就是最新发布的帖子。
查看第7篇文章以及第6篇文章的链接时,请链接到该类别中的最新文章。
仅在所有早于第7篇文章的文章中显示一篇文章的链接。
显示next_post_link()
和previous_post_link()
查看比第7篇文章更新的文章时
让我们进行编码,我们需要获取查看的单个帖子的帖子ID,必要时还需要获取帖子类型。要得到这个,你可以利用get_queried_object()
一旦我们做到了这一点,我们需要确定这篇文章属于哪个类别。这是通过使用get_the_category()
. (请注意,只有当一篇文章只属于一个类别时,这才会成功。如果有多个类别,则使用第一个类别)。
所有这些信息将在自定义查询中使用get_posts
. 因为我们只需要post ID,所以我们只需要检索它。
返回的帖子ID数组是用于确定帖子位置和该类别中最新帖子的数据。
这个查询以后可能会非常昂贵,所以我们将把所有数据保存到一个数据库中transient 我设定每7天过期一次。所有需要的数据都将存储在名为$numbers
一旦帖子被更新、删除或发布,我们还需要删除并重新创建瞬态。为此,我们将使用transition_post_status
行动挂钩
一切准备就绪后,我们转向单曲。php模板。这是您要显示所需内容的地方。如上所述
对于7岁以上的帖子,只显示最新的帖子链接
显示最新的帖子链接和next_post_link()
在7号柱上
显示next_post_link()
和previous_post_link()
查看比第7篇文章更新的文章时
要获取该类别的最新帖子,您将使用get_post()
ID保存在$numbers
变量
这应该可以
这是完整的代码(根据需要进行修改。我已经对其进行了测试,它的工作原理与您在问题中所述的一致)在函数中。php
function get_display_post_number() {
$query_object = get_queried_object();
$id = $query_object->ID;
$transient_id = \'post_number_\' . $id;
if ( false === ( $numbers = get_transient( $transient_id ) ) ) {
$categories = get_the_category( $id );
$cat = $categories[0]->cat_ID;
$post_args = [
\'post_type\' => $query_object->post_type,
\'cat\' => $cat,
\'fields\' => \'ids\',
\'posts_per_page\' => -1,
\'order\' => \'ASC\',
];
$q = get_posts( $post_args );
$total_posts = count( $q );
$post_number = array_search( $id, $q ) + 1;
$current_post = $total_posts - $post_number + 1;
$newest_post = $q[$total_posts - 1];
$numbers = [
\'post_number\' => $post_number,
\'newest_post\' => $newest_post,
\'total_posts\' => $total_posts,
\'current_post\' => $current_post
];
set_transient( $transient_id, $numbers, 7 * DAY_IN_SECONDS );
}
return $numbers;
}
add_action( \'transition_post_status\', function ( $new_status, $old_status, $post )
{
global $wpdb;
$wpdb->query( "DELETE FROM $wpdb->options WHERE `option_name` LIKE (\'_transient%_post_number_%\')" );
$wpdb->query( "DELETE FROM $wpdb->options WHERE `option_name` LIKE (\'_transient_timeout%_post_number_%\')" );
}, 10, 3 );
单件。php$a = get_display_post_number();
if( 7 === $a[\'current_post\'] ) {
next_post_link(\'%link\', \'%title\', TRUE);
echo \'</br>\';
$latest_post = get_post( $a[\'newest_post\'] );
$post_link = get_permalink( $latest_post->ID );
echo \'<a href="\' . $post_link . \'">\' . $latest_post->post_title . \'</a></br>\';
}elseif( 7 < $a[\'current_post\'] ) {
$latest_post = get_post( $a[\'newest_post\'] );
$post_link = get_permalink( $latest_post->ID );
echo \'<a href="\' . $post_link . \'">\' . $latest_post->post_title . \'</a></br>\';
}else{
next_post_link(\'%link\', \'%title\', TRUE);
echo \'</br>\';
previous_post_link(\'%link\', \'%title\', TRUE);
}