カスタムフィールドでwordpressの投稿順を変更

カスタムフィールドで設定した日付の順番で投稿順を設定する方法
(開催日がカスタムフィールドのスラッグ)
$my_query = new WP_Query(array(
    'posts_per_page' => -1,
    'order' => 'DESC',
    'meta_key'=>'開催日',
    'orderby'=>'meta_value',
    'meta_query' => array(
        'relation' => 'AND',
        array(
            'key' => '掲載開始日',
            'value' => date('Y/m/d'),
            'compare' => '<=', 'type' => 'DATE'
        ),
        array(
            'key' => '掲載終了日',
            'value' => date('Y/m/d'),
            'compare' => '>=',
            'type' => 'DATE'
        )
    )
));

 

管理画面だとこう

まずはカスタムフィールドをカラムに表示

function manage_custom_columns($columns) {
    $columns['開催日'] = '開催日';
    return $columns;
}
add_filter('manage_posts_columns', 'manage_custom_columns');
 
function add_custom_columns($column_name, $post_id) {
    if ($column_name == '開催日') {
        echo date('Y年m月d日', strtotime(get_post_meta($post_id, '開催日', true)));
    }
}
add_action('manage_posts_custom_column', 'add_custom_columns', 10, 2);

開催日の順番にソートするには

function column_orderby_custom( $vars ) {
    if ( isset( $vars['orderby'] ) && '開催日' == $vars['orderby'] ) {
        $vars = array_merge( $vars, array(
            'meta_key' => '開催日',
            'orderby' => 'meta_value'
        ));
    }
    return $vars;
}
add_filter( 'request', 'column_orderby_custom' );
 
function posts_register_sortable( $sortable_column ) {
    $sortable_column['開催日'] = '開催日';
    return $sortable_column;
}
add_filter( 'manage_edit-post_sortable_columns', 'posts_register_sortable' );

関連記事