WordPressの投稿一覧をカスタムフィールドで絞り込めるようにする

以下をfunctions.phpまたはそれに準ずるファイルに記述します。

ex. test_colorというカスタムフィールドの値で絞り込む場合の例です。

add_filter('query_vars', function($vars){
  array_push($vars, 'test_color');
  return $vars;
});

add_action('restrict_manage_posts', function(){
  printf(
    '<input type="text" id="%1$s" name="%1$s" value="%2$s" />',
    'test_color',
    esc_attr(get_query_var('test_color'))
  );
});

add_filter('posts_where', function( $where ) {
  global $wpdb;

  if ( !is_admin() )
    return $where;

  $value = get_query_var('test_color');
  if ( !empty($value) ) {
    $where .= $wpdb->prepare("
             AND EXISTS (
             SELECT 'x'
             FROM {$wpdb->postmeta} as m
             WHERE m.post_id = {$wpdb->posts}.ID
             AND m.meta_key = 'test_color'
             AND m.meta_value like %s
            )",
      "%{$value}%"
    );
  }

  return $where;
});

参考:[WordPress] 管理画面の投稿一覧にカスタムフィールドの値での絞り込み検索を追加する