カスタムフィールド “my_meta_key” の値での絞り込み検索機能を、管理画面の投稿一覧に追加する方法。
<?php
add_filter('query_vars', function($vars){
array_push($vars, 'my_meta_key');
return $vars;
});
add_action('restrict_manage_posts', function(){
printf(
'<input type="text" id="%1$s" name="%1$s" value="%2$s" />',
'my_meta_key',
esc_attr(get_query_var('my_meta_key'))
);
});
add_filter('posts_where', function( $where ) {
global $wpdb;
if ( !is_admin() )
return $where;
$value = get_query_var('my_meta_key');
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 = 'my_meta_key'
AND m.meta_value like %s
)",
"%{$value}%"
);
}
return $where;
});