あのときコード

管理画面の固定ページ一覧にカスタムフィールドの検索条件を追加

WordPress 管理画面 固定ページ一覧 カスタムフィールド 検索条件

クエリパラメータ追加

◆ 条件
クエリパラメータ:param_check

function add_query_vars($vars){
    $vars[] = 'param_check';
    return $vars;
}
add_filter('query_vars', 'add_query_vars');

検索用ドロップダウン追加

◆ 条件

ドロップダウン項目

  • 値:空白、テキスト:すべてのページ
  • 値:1、テキスト:チェックページ
function custom_post_restrict_manage_page() {
    global $post_type;

     if ( $post_type != 'page' ) return;

    $selected = get_query_var('param_check');

    $options = '';
    $options .= sprintf(
                           '<option value="%s" %s>%s</option>',
                           '1',
                           ($selected=='1') ? 'selected="selected"' : '',
                           'チェックページ'
                      );

    $select_html = '<select name="param_check"><option value="">すべてのページ</option>%s</select>';
    printf($select_html , $options);
}

add_action('restrict_manage_posts', 'custom_post_restrict_manage_page');

クエリ編集

◆ 条件

meta_key = page_check

function custom_post_page_where($where){

    global $wpdb;

     if ( !is_admin() ) {
        return $where;
    }

    $param_check= get_query_var('param_check');
    if(empty ($param_check)){
        return $where;
    }

    $where .= $wpdb->prepare("AND EXISTS (SELECT * FROM {$wpdb->postmeta} as m
                                                WHERE m.post_id = {$wpdb->posts}.ID AND m.meta_key='page_check' 
                                               AND m.meta_value is not null and m.meta_value == %s)",
                                               $param_check);

    return $where;
}

add_filter('posts_where', 'custom_post_page_where');

または

function query_pre_get_posts( $query ) {
    global $wpdb;

    if ( !is_admin() ) {
        return;
    }

    $param_check= get_query_var('param_check');
    if(empty ($param_check)){
        return;
    }

    $meta_query = $query->get('meta_query');
    if(!$meta_query || !is_array($meta_query)) {
        $meta_query = array();
    }

    $meta_query['relation'] = 'and';
    $meta_query[] = array(
        'key'		  => 'page_check',
        'value'	  => $param_check,
        'compare'  => '=',
    );

     $query->set('meta_query', $meta_query);
}

add_action('pre_get_posts', 'query_pre_get_posts', 10, 1);

参考サイト