お問い合わせ

WordPress Popular Postsのページビューをダッシュボードの投稿一覧に表示する

  • URLをコピーしました!

WordPress Popular PostsのPV数を投稿一覧で確認できるようにしたいです。

WordPress Popular PostsはダッシュボードにPV数を確認できる画面があります。

WordPress Popular Postsをインストールしても、ダッシュボードの投稿一覧にPV数を確認できる列を表示することはできません。

ちなみに、SWELLではPV数を表示する列が自動的に追加されます。

SWELLの場合はPV数をpost_metaで保存しているので、ダッシュボードの投稿一覧にPV数の列を追加するのは簡単なのですが、Wordpress Popular Postsは独自テーブルにPV数を保存しているので簡単には実現できません。

この記事では、Wordpress Popular PostsのPV数をダッシュボードの投稿一覧にPV数の列を追加してソートできるようにカスタマイズする方法をご紹介します。

この内容は、公式にある情報をベースに修正しています。

WordPress Popular PostsのPV数をダッシュボードの投稿一覧にPV数の列を追加してソートできるようにカスタマイズ

code snippetsかfunctions.phpに以下のコードを追加するとカスタム投稿名の投稿一覧にWordpress Popular PostsのPV数が表示されます。

表示させたい投稿タイプは、$post_types_with_views_columnで指定します。

wpp_get_viewsに集計期間のオプションを追加すると、期間ごとのPV数を表示できます。

global $post_types_with_views_column;
$post_types_with_views_column= array('カスタム投稿名');

foreach($post_types_with_views_column as $post_type) {
    add_filter('manage_' . $post_type . '_posts_columns' , __NAMESPACE__ . '\item_list_add_views_column');
    add_action('manage_' . $post_type . '_posts_custom_column' , __NAMESPACE__ . '\item_list_views_column', 10, 2);
    add_filter('manage_edit-' . $post_type . '_sortable_columns', __NAMESPACE__ . '\item_list_sortable_columns');
}

function add_posts_columns($columns) {

	// $columns['他と被らない名前'] = '任意の名前';
    $columns['pageviews'] = __('Views', 'wordpress-popular-posts');
	return $columns;
}

function custom_posts_column($column_name, $post_id) {

	// $column_name == '$columns['〇〇'] で指定した名前を入力'
	if ( $column_name == 'pageviews' ){
		echo wpp_get_views($post_id);
	}   
}


function posts_register_sortable( $sortable_column ) {
	$sortable_column['pageviews'] = 'pageviews';
	return $sortable_column;
}


function wpp_item_list_orderby($orderby_statement, $wp_query) {
    global $pagenow, $post_types_with_views_column;

    if (
        is_admin() 
        && 'edit.php' == $pagenow 
        && isset($wp_query->query['post_type'])
        && in_array($wp_query->query['post_type'], $post_types_with_views_column)
        && ( isset($wp_query->query['orderby']) && 'pageviews' == $wp_query->query['orderby'] )
    ) {
        $orderby_statement = "pageviews " . ( isset($wp_query->query['order']) && $wp_query->query['order'] == 'asc' ? 'ASC' : 'DESC' );
    }

    return $orderby_statement;
}
add_filter('posts_orderby', 'wpp_item_list_orderby', 10, 2);

function wpp_item_list_query_fields($fields, $wp_query) {
    global $pagenow, $wpdb, $post_types_with_views_column;

    if (
        is_admin() 
        && 'edit.php' == $pagenow 
        && isset($wp_query->query['post_type'])
        && in_array($wp_query->query['post_type'], $post_types_with_views_column)
    ) {
        $fields .= ", IFNULL(`{$wpdb->prefix}popularpostsdata`.`pageviews`, 0) AS pageviews";
    }

    return $fields;
}
add_filter('posts_fields','wpp_item_list_query_fields', 10, 2);

/**
 * Joins WPP's data table.
 *
 * @param   string  $join
 * @return  string
 */
function wpp_item_list_query_join($join) {
    global $wp_query, $pagenow, $wpdb, $post_types_with_views_column;

    if (
        is_admin() 
        && 'edit.php' == $pagenow 
        && isset($wp_query->query['post_type'])
        && in_array($wp_query->query['post_type'], $post_types_with_views_column)
    ) {
        $join .= "LEFT JOIN `{$wpdb->prefix}popularpostsdata` ON `{$wpdb->posts}`.`ID` = `{$wpdb->prefix}popularpostsdata`.`postid` ";
    }

    return $join;
}
add_filter('posts_join', 'wpp_item_list_query_join');

このコードは、WordPressのデータベースから各投稿の閲覧数(ビュー数)を取得し、それを基に投稿を表示・ソートする機能を提供しています。

  1. 最初に、wpp_item_list_orderby関数を使用して、ビュー数で投稿をソートするためのSQL文を生成します。これにより、ビュー数が多い順、または少ない順に投稿を表示することが可能になります。
  2. 次に、wpp_item_list_query_fields関数を通じて、データベースからビュー数を取得します。ここでは、SQLのSELECT文にビュー数を追加し、IFNULL関数を用いてNULL値がある場合に0を返すように設定しています。
  3. 最後に、wpp_item_list_query_join関数を使用して、WordPress Popular Postsプラグインのデータテーブルと投稿テーブルを結合します。この操作により、各投稿のビュー数を取得できます。ここでは、LEFT JOINを使用し、左側のテーブルの全ての行と右側のテーブルのマッチする行を結合し、右側のテーブルにマッチする行がない場合はNULLが返されるようにしています。

これら三つの関数の統合的な適用により、投稿のビュー数に基づいたデータベース操作・投稿の表示が可能になります。

まとめ

WordPress Popular Postsは有料バージョンが存在しない、純粋なフリーのプラグインです。

とても多機能なので、開発が中止されないことを祈るばかりです。

他の人にもシェアしてね
  • URLをコピーしました!
  • URLをコピーしました!
コメントを閉じる

コメント

コメントする

コメントは日本語で入力してください。(スパム対策)

クリックできる目次