Making post views as sortable

时间:2012-02-27 作者:Sandeep

我正在wordpress管理帖子页面上使用自定义字段,添加以下代码,然后尝试根据帖子视图对帖子进行排序,但排序不起作用。下面是我在函数中添加的代码。php:

add_filter(\'manage_posts_columns\', \'posts_column_views\');
add_action(\'manage_posts_custom_column\', \'posts_custom_column_views\',5,2);
function posts_column_views($defaults){
    $defaults[\'post_views\'] = __(\'Views\');
    return $defaults;
}
function posts_custom_column_views($column_name, $id){
    if($column_name === \'post_views\'){
        echo getPostViews(get_the_ID());
    }
}

// Register the column as sortable
function posts_column_register_sortable( $columns ) {
$columns[\'post_views\'] = \'post_views\';

return $columns;
}
add_filter( \'manage_edit-post_sortable_columns\', \'posts_column_register_sortable\' );


function posts_column_orderby( $vars ) {
if ( isset( $vars[\'orderby\'] ) && \'post_views_count\' == $vars[\'orderby\'] ) {
    $vars = array_merge( $vars, array(
        \'meta_key\' => \'post_views\',
        \'orderby\' => \'meta_value_num\'
    ) );
}

return $vars;
}
add_filter( \'request\', \'posts_column_orderby\' );


function getPostViews($postID){
    $count_key = \'post_views_count\';
    $count = get_post_meta($postID, $count_key, true);
    if($count==\'\'){
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, \'0\');
        return "0";
    }
    return $count;
}
function setPostViews($postID) {
if (!current_user_can(\'level_7\') ) :
    $count_key = \'post_views_count\';
    $count = get_post_meta($postID, $count_key, true);
    if($count==\'\'){
        $count = 0;
        delete_post_meta($postID, $count_key);
        add_post_meta($postID, $count_key, \'0\');
    }else{
        $count++;
        update_post_meta($postID, $count_key, $count);
    }
endif;
}
现在的问题是,我可以在wordpress管理编辑中看到帖子视图。php页面和volumn视图也可以排序,但单击视图列不会根据视图对帖子进行排序。

请帮我解决这个问题。

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

这个posts_column_register_sortable 函数,连接到posts_column_register_sortable 返回一个数组,其中包含作为键的可排序列的名称及其相应的排序依据值(例如“post\\u title”等)。

在你的例子中,你给了它“post\\u视图”来排序,它不作为列存在,所以你需要告诉WordPress如何按它排序。你在posts_column_orderby 函数,连接到request. 然而,变量orderby 您检查的变量为\'post_views_count\', 不是您上面设置的“post\\u视图”。将其中一个更改为与另一个匹配,应该可以正常工作。

结束

相关推荐

是否使用COUNT_USER_POSTS包括草稿或未来的帖子?

我使用下面的代码来获取用户的帖子数量,虽然效果很好,但它只包含已发布的帖子。例如,如何修改此代码或使用不同的代码使其包含“future”post\\u状态或“drafts”。<?php $post_count = count_user_posts($curauth->ID); echo \'<p>User post count is \' . $post_count; ?>