お問い合わせはコチラから

ダッシュボードの投稿一覧にカスタムフィールドを表示してソート機能を付けるカスタマイズ

サイト運営

WordPressで記事毎にカスタムフィールドを使用している場合、ダッシュボードの投稿一覧でカスタムフィールドの内容が確認できると便利です。

カスタムフィールドでPV数などを記録している場合、カスタムフィールドの値で投稿一覧を並べ替えら得ると便利さが増します。

ここまでの内容は検索すると簡単に見つかるのですが、実際に実装してみるとソート機能が思った動きをしないことがほとんどです。

それはなぜかと言えば、ソート機能が数値に対応していないからです。

この記事では、カスタムフィールドに数値を保存しているケースで、投稿一覧にカスタムフィールドを表示し、数値でソートできるカスタマイズをご紹介します。

カスタム投稿の投稿一覧にカスタムフィールドを表示するカスタマイズ

カスタム投稿毎にレビューとレビュー数のカスタムフィールドが2つあり、それを投稿一覧に表示します。

レビューは、0~5.00までの少数点ありの数値で、レビュー数は整数値です。

function add_posts_columns($columns) {

	// $columns['他と被らない名前'] = '任意の名前';
	$columns['review_text'] = 'レビュー';
	$columns['review_count_text'] = 'レビュー数';
	return $columns;
}

function custom_posts_column($column_name, $post_id) {

	// $column_name == '$columns['〇〇'] で指定した名前を入力'
	if ($column_name == 'review_text') {

		// get_post_meta() でカスタムフィールド値の取得しています
		// get_post_meta() の第2引数にカスタムフィールドのフィールド名を指定してください
		$cf_date = get_post_meta($post_id, 'review_text', true);

		// 三項演算子
		// カスタムフィールドに値があるかどうか ? ある場合 = カスタムフィールドの値を表示 : ない場合 = 『 - 』を表示
		echo ($cf_date) ? $cf_date : '-';
	}
	if ($column_name == 'review_count_text') {

		// get_post_meta() でカスタムフィールド値の取得しています
		// get_post_meta() の第2引数にカスタムフィールドのフィールド名を指定してください
		$cf_date = get_post_meta($post_id, 'review_count_text', true);

		// 三項演算子
		// カスタムフィールドに値があるかどうか ? ある場合 = カスタムフィールドの値を表示 : ない場合 = 『 - 』を表示
		echo ($cf_date) ? $cf_date : '-';
	}
}

add_filter('manage_{カスタム投稿名}_posts_columns', 'add_posts_columns');
add_action('manage_{カスタム投稿名}_posts_custom_column', 'custom_posts_column', 10, 2);

function posts_register_sortable( $sortable_column ) {
	$sortable_column['review_text'] = 'review_text';
	$sortable_column['review_count_text'] = 'review_count_text';
	
	return $sortable_column;
}
add_filter( 'manage_edit-{カスタム投稿名}_sortable_columns', 'posts_register_sortable' );

function column_orderby_custom( $vars ) {


	if (isset($vars['orderby']) && 'review_text' == $vars['orderby']) {
		$vars = array_merge($vars, array(
			'orderby' => 'meta_value_num',
			'meta_query' => array(
				array(
					'key' => 'review_text',
					'value' => array(0), // 値が0のものを除く
					'compare' => '>',
				),
			),
		));
	}
	if (isset($vars['orderby']) && 'review_count_text' == $vars['orderby']) {
		$vars = array_merge($vars, array(
			'orderby' => 'meta_value_num',
			'meta_query' => array(
				array(
					'key' => 'review_count_text',
					'value' => array(0), // 値が0のものを除く
					'compare' => '>',
				),
			),
		));
	}

	return $vars;
}
add_filter( 'request', 'column_orderby_custom' );

このコードは、WordPressのカスタム投稿タイプに新たなカラムを追加し、そのカラムをソート可能にするためのものです。具体的には、「レビュー」および「レビュー数」の2つのカラムを追加しています。

  1. add_posts_columns($columns)関数: 新たなカラムを追加します。ここでは、$columns['review_text']$columns['review_count_text']という2つのカラムを追加しています。
  2. custom_posts_column($column_name, $post_id)関数: カラムに表示する値を指定します。カラム名が’review_text’または’review_count_text’の場合、対応するカスタムフィールドの値を取得し、その値が存在する場合はその値を、存在しない場合は’-’を表示します。
  3. add_filteradd_actionの部分: WordPressのフックを使用して上記の関数を登録します。ここで、manage_{カスタム投稿名}_posts_columnsmanage_{カスタム投稿名}_posts_custom_columnは実際にはカスタム投稿タイプの名前に置き換える必要があります。
  4. posts_register_sortable($sortable_column)関数: カラムのソート可能性を設定します。ここでは’review_text’と’review_count_text’のカラムをソート可能に設定しています。
  5. column_orderby_custom($vars)関数: カラムのソート順を定義します。ここでは、’review_text’または’review_count_text’のカラムが選択された場合、そのカラムの値が0以上の投稿をソートの対象にしています。
  6. 最後のadd_filtercolumn_orderby_custom関数を’request’フックに登録します。これにより、ユーザーがソート順を指定したときに上記のソートルールが適用されます。

参考:https://qiita.com/uto-usui/items/6a4987fd1e65bbc22ad6

まとめ

カラムを追加してソート機能を追加しても文字列として比べられてしまうので、自前で実装することで数値でソートできるようになります。

この記事を書いた人
ブーン

はるばる日本よりオランダ王国へやってまいりました。
自分の経験が少しでも参考になれば嬉しいです。
お問い合わせは、『こちら』からお願い致します。

\ブーンをフォロー/
スポンサーリンク
サイト運営
\シェアお願いします!/
\ブーンをフォロー/
こんな記事も読まれています

失敗しないレンタルサーバーランキング

mixhost

不正アクセスに強くて使いやすいおススメサーバー
\本サイトで利用中/
メリット①:自動ウィルス駆除対応
メリット②:サイトの表示速度が速い!
メリット③:転送量の上限が多い!
メリット④:自由にプラン変更ができ、アクセス増にも対応できる!
メリット⑤:バックアップデータが無料で復元できる!
メリット⑥:Wordpressが簡単にインストールできる!
メリット⑦:どのプランでも初期費用が無料!
メリット⑧:10日間の無料お試し期間と30日の返金保証!

Conoha Wing

国内Wordpress最速の最強サーバー
メリット①:圧倒的な表示速度
メリット②:レンタルサーバーと独自ドメインがセットでお得◎
メリット③:プラン変更はすべてのプランで自由自在
メリット④:一か月の利用転送量の制限が緩い(9TB~)
メリット⑤:WordPresサイトの移行が簡単

エックスサーバー

国内シェアNo1の安定性と実績が魅力。ALL SSDで死角なしの万能サーバー。
メリット①:サイトの表示速度が安定して速い!
メリット②:アクセス負荷に強くて安定性が高い!
メリット③:24時間365日の充実サポートで安心!電話サポートもあり!
メリット④:転送量が多い!
メリット⑤:自動バックアップ機能付き!
メリット⑥:WordPressが簡単にインストールできる!
メリット⑦:10日の無料お試し期間がある!

タイトルとURLをコピーしました