我正在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视图也可以排序,但单击视图列不会根据视图对帖子进行排序。
请帮我解决这个问题。
最合适的回答,由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视图”。将其中一个更改为与另一个匹配,应该可以正常工作。