[英]How to make a sortable admin panel column for a custom field counting the number of page impressions in Wordpress
To achieve what I'm asking for I use this code 为了实现我所要求的,我使用此代码
Output count of views 输出视图数
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.'';}
register view 注册视图
function setPostViews($postID) {
$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); }}
output count of views in the admin panel 在管理面板中输出视图计数
add_filter('manage_pages_columns', 'posts_column_views');
add_action('manage_pages_custom_column', 'posts_custom_column_views',10,2);
add_filter('manage_posts_columns', 'posts_column_views');
add_action('manage_posts_custom_column', 'posts_custom_column_views',10,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()); }}
This works fine!!! 这很好用!!!
Adds the ability to sort column 添加了对列进行排序的功能
add_filter('manage_edit-post_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-page_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-slides_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-hp_highlights_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-portfolio_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-staff_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-services_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-testimonials_sortable_columns', 'add_views_sortable_column');
add_filter('manage_edit-faqs_sortable_columns', 'add_views_sortable_column');
function add_views_sortable_column($sortable_columns){
$sortable_columns['post_views'] = 'views_views';
return $sortable_columns;}
It should be possible to sort by column " Views " by entering the string in the form /wp-admin/edit.php?orderby=views_views&order=desc But in fact it sorts " Date " and not " Views ". 通过以/wp-admin/edit.php?orderby=views_views&order=desc的形式输入字符串,应该可以按“ 视图 ”列进行排序,但实际上它是对“ 日期 ”而不是“ 视图 ”进行排序。
Changing the query to sort columns shown by WordPress. 更改查询以对WordPress显示的列进行排序。 Sorting by random fields whose values are numbers 按数值为数字的随机字段排序
(Method 1) (方法1)
add_filter('pre_get_posts', 'add_column_views_request');
function add_column_views_request( $object ){
if( $object->get('orderby') != 'views_views' )
return;
$object->set('meta_key', 'post_views');
$object->set('orderby', 'meta_value_num');}
(Method 2) (方法2)
add_action( 'pre_get_posts', 'add_column_views_request', 1 );
function add_column_views_request( $query ) {
if ( $query->is_main_query() && ( $orderby = $query->get( 'orderby' ) ) ) {
switch( $orderby ) {
case 'views_views':
$query->set( 'meta_key', 'post_views' );
$query->set( 'orderby', 'meta_value' );
break;}}}
(Method 3) (方法3)
add_filter('request', 'add_column_views_request');
function add_column_views_request( $vars ) {
if ( 'views_views' == $vars['orderby'] ){
$vars['meta_key'] = 'post_views';
$vars['orderby'] = 'meta_value_num';}
return $vars;}
But now the sort does not return results: " No entries found. " 但是现在排序不返回结果:“ 找不到条目。 ”
I just should make 我应该做
Method 1 方法1
$object->set('meta_key', 'post_views_count');
Method 2 方法二
$query->set( 'meta_key', 'post_views_count' );
Method 3 方法3
$vars['meta_key'] = 'post_views_count';
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.