在这篇文章中,我们将使用我之前的回答中的一小段逻辑。
我们需要做以下工作:
从已运行的查询中获取帖子ID数组,以获得100个帖子限制
使用当前帖子ID并在帖子ID的数组中搜索特定的帖子ID
在值匹配的地方使用数组键,添加1
, 并将其作为我们的等级返回#
(NOTE: 如果您使用的是默认的帖子分页,那么您将得到不在100篇帖子限制内的帖子。为此,我们将添加“未排名”的后备选项
以下代码进入functions.php
. (NOTE: 以下内容需要PHP 5.4+且未经测试
function get_single_post_rank()
{
// First check if we are on a single page, else return false
if ( !is_single() )
return false;
/**
* Get our ranked 100 posts as ID\'s
* @link http://wordpress.stackexchange.com/a/194730/31545
*/
$args = [
\'posts_per_page\' => 100,
\'fields\' => \'ids\',
\'meta_key\' => \'custom_field\',
\'orderby\' => \'meta_value_num\', //or \'meta_value_num\'
\'order\' => \'DESC\',
// Add additional args here
];
$post_ids = get_posts( $args );
// Get the current single post ID
$current_post_id = get_queried_object_id();
// Search for our $current_post_id in the $post_ids array
$key = array_search( $current_post_id, $post_ids );
// If $key is false or null, return the fallback value "Not Ranked"
if ( !$key && $key != 0 )
return \'Not Ranked\';
// $key returns a value, lets add one and return the value
return ( $key + 1 );
}
在您的单个页面中,在循环中,只需添加以下内容
$rank = get_single_post_rank();
echo \'Ranked \' . $rank . \' \' . get_the_title();