ワードプレスでカスタム投稿の一覧テーブルに列を追加してその列に各カスタム投稿のカスタムフィールドの値を表示し、その値で並び替えをする方法を解説いたします。

カスタム投稿の一覧テーブルに列を追加してその列に各カスタム投稿のカスタムフィールドの値を表示し、その値で並び替えをするPHPコード

早速PHPコードを見ていきましょう。このコードはテーマのfunctions.phpや作成中のプラグイン等にコピペいただくと動作します。

$cutomposttype_slug = "books"; //カスタム投稿タイプのスラグ
global $column_name; $column_name = "アクセス数"; //任意のカラム名
global $column_slug; $column_slug = "my_cuctom_column"; //任意のカラム名のスラグ
global $postmeta_key; $postmeta_key = "my_sort_value_metakey"; //カスタム投稿一覧に表示して並べ替えるカスタムフィールドのキー

add_filter( 'manage_edit-'.$cutomposttype_slug.'_columns', 'new_column' );
function new_column( $columns ) {
    global $column_slug;
    global $column_name;
    return array_merge($columns, array( $column_slug => $column_name ));
}

add_filter( 'manage_edit-'.$cutomposttype_slug.'_sortable_columns', 'register_sortable_columns' );
function register_sortable_columns( $columns ) {
    global $column_slug;
    $columns[$column_slug] = $column_slug;
    return $columns;
}

add_action( 'manage_'.$cutomposttype_slug.'_posts_custom_column' , 'custom_columns', 10, 2 );
function custom_columns( $column, $post_id ) {
    global $column_slug;
    global $postmeta_key;
	switch ( $column ) {
		case $column_slug:
			echo get_post_meta( $post_id, $postmeta_key, true ); 
			break;
	}
}

add_filter( 'request', 'views_columns_orderby' );
function views_columns_orderby( $vars ) {
    global $column_slug;
    global $postmeta_key;
    if ( isset( $vars['orderby'] ) && $column_slug === $vars['orderby'] ) {
        $vars = array_merge( $vars,
            array(
                'meta_key' => $postmeta_key,
                'orderby'  => 'meta_value_num',
            )
        );
    }
    return $vars;
}

編集する行は4つです。

$cutomposttype_slug = “books”; カスタム投稿タイプのスラグを指定します。postにするとワードプレスのデフォルトの投稿の一覧になります。

$column_name = “アクセス数”;  任意のカラム名(カスタム投稿一覧に追加する列名)を指定してください。

$column_slug = “my_cuctom_column”;  任意のカラム名(カスタム投稿一覧に追加する列名)のスラグを決めて半角英数で入力してください。(そのままでも問題ございません)

$postmeta_key = “my_sort_value_metakey”;  カスタム投稿一覧のテーブルに表示して並べ替える各投稿のカスタムフィールドのキーを指定します。

コードの流れの解説

‘manage_edit-カスタム投稿タイプのスラグ_columns’ フィルターで任意のカスタム投稿タイプの一覧画面のテーブルに列を追加することができます。

‘manage_edit-カスタム投稿タイプのスラグ_sortable_columns’ フィルタで上記列を並び替え可能な列にします。

add_action( ‘manage_カスタム投稿タイプのスラグ_posts_custom_column’アクションで、そのカラムのデータ取得の場面で、get_post_meta でカスタムフィールドの値を取得しています。

add_filter( ‘request’, ‘views_columns_orderby’ );で並び替えを実施するコードを実行します。
コードの中身の

'meta_key' => カスタムフィールドのキー,
'orderby'  => 'meta_value_num',

でソートしています。

ご参考になりましたら幸いです。

WordPress ワードプレスのテーマやプラグインのコーディングのご依頼・ご相談はWPドクターまでお気軽にお送りください