基于自定义域的单个帖子页面上的帖子排名

时间:2015-07-17 作者:Hussain Ansari

根据我之前的问题。

How to show posts rank based on custom field value

正如我所希望的,它在主页上工作得非常完美。现在我想在单帖页面中也显示相同的排名。

1 个回复
最合适的回答,由SO网友:Pieter Goosen 整理而成

在这篇文章中,我们将使用我之前的回答中的一小段逻辑。

我们需要做以下工作:

从已运行的查询中获取帖子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();

结束