There are lots of articles over the web regarding "WordPress post view count" and "Creating a custom column for Post table". But unfortunately, most of them are not bug-free. In this article, I'm going to cover both of them.
At first, let's see how to create post view count and stored as metadata.
remove_action( 'wp_head', 'adjacent_posts_rel_link_wp_head', 10, 0 );
function wp_set_post_views( $postID ) {
$count_key = 'wpb_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 );
}
}
function wp_get_post_views() {
if ( is_single() ) {
wp_set_post_views(get_the_ID());
}
}
add_filter( 'the_content', 'wp_get_post_views' );
Now let's create a custom column for Post table and show post view counts.
function wp_posts_columns( $defaults ) {
$defaults['wpb_post_views_count'] = esc_html__( 'Post Views', 'text_domain' );
return $defaults;
}
add_filter( 'manage_post_posts_columns', 'wp_posts_columns' );
function wp_post_custom_column( $column_name ) {
if ( $column_name == 'wpb_post_views_count' ) {
$count = get_post_meta( get_the_ID(), 'wpb_post_views_count', true );
$view_count = $count == '0' ? '1' : $count;
echo esc_html__( $view_count, 'text_domain' );
}
}
add_action( 'manage_post_posts_custom_column', 'wp_post_custom_column', 10, 2 );
function wp_post_column_sortable() {
$columns['wpb_post_views_count'] = ['wpb_post_views_count', true ];
return $columns;
}
add_filter( 'manage_edit-post_sortable_columns', 'wp_post_column_sortable' );
function wp_sortable_custom_column_query( $query ) {
$orderby = $query->get( 'orderby' );
if ( 'wpb_post_views_count' == $orderby ) {
$meta_query = array(
array(
'key' => 'wpb_post_views_count',
'value' => '',
'compare' => '>',
),
);
$query->set( 'meta_query', $meta_query );
$query->set( 'orderby', 'meta_value' );
}
}
add_action( 'pre_get_posts', 'wp_sortable_custom_column_query' );
Top comments (0)