教文館の社内ナレッジベースです。

訪問ユーザーではなく、管理画面で書誌の検索(カスタムフィールドのシリーズ名、著訳者、出版社)をしたい場合、下記のコードをfunction.phpに貼り付けることで検索が可能になる。

//+++++++++++++++++++++++++++++++++++++++++
// WordPressの投稿一覧からカスタムフィールドの絞り込み検索を追加するカスタマイズその1。副題
// 検索したい内容を入力するフォームを表示
add_action('restrict_manage_posts', 'add_subtitle_filter');
function add_subtitle_filter(){
global $post_type;
//表示するのは投稿一覧画面のみ
if ( $post_type == 'post' ) {
echo '<input type="text" name="シリーズ名" value="'. get_query_var('シリーズ名'). '" placeholder="シリーズ名" />';
}
};

// 検索した内容(URLパラメータに追加される)の値を取得させる・・・”query_vars”というフックから配列に追加
add_filter('query_vars', 'add_subtitle');
function add_subtitle($vars) {
$vars[] = 'シリーズ名';
return $vars;
}

// 入力した内容が、カスタムフィールドの値から検索されるようにする。
// 記事の一覧を取得する時のフックである”posts_where”から、カスタムフィールドのsubtitleの内容を取得させます。
// URLパラメータを見て”subtitle”がある場合は、検索のSQLにカスタムフィールド値の検索を行うようにします。
add_filter('posts_where', 'posts_where_subtitle');
function posts_where_subtitle($where) {
global $wpdb;
//管理画面でのみ実行
if(is_admin()) {
$value = get_query_var('シリーズ名');
if(!empty($value)) {
//検索条件にカスタムフィールド「subtitle」の値を追加
$where .= $wpdb->prepare(" AND EXISTS ( SELECT * FROM {$wpdb->postmeta} as m
WHERE m.post_id = {$wpdb->posts}.ID AND m.meta_key = 'シリーズ名' AND m.meta_value like %s )",
"%{$value}%" );
}
}
return $where;
};

//+++++++++++++++++++++++++++++++++++++++++
// WordPressの投稿一覧からカスタムフィールドの絞り込み検索を追加するカスタマイズその2。著訳者
// 検索したい内容を入力するフォームを表示
add_action('restrict_manage_posts', 'add_auther_filter');
function add_auther_filter(){
global $post_type;
//表示するのは投稿一覧画面のみ
if ( $post_type == 'post' ) {
echo '<input type="text" name="著訳者" value="'. get_query_var('著訳者'). '" placeholder="著訳者" />';
}
};

// 検索した内容(URLパラメータに追加される)の値を取得させる・・・”query_vars”というフックから配列に追加
add_filter('query_vars', 'add_auther');
function add_auther($vars) {
$vars[] = '著訳者';
return $vars;
}

// 入力した内容が、カスタムフィールドの値から検索されるようにする。
// 記事の一覧を取得する時のフックである”posts_where”から、カスタムフィールドのautherの内容を取得させます。
// URLパラメータを見て”auther”がある場合は、検索のSQLにカスタムフィールド値の検索を行うようにします。
add_filter('posts_where', 'posts_where_auther');
function posts_where_auther($where) {
global $wpdb;
//管理画面でのみ実行
if(is_admin()) {
$value = get_query_var('著訳者');
if(!empty($value)) {
//検索条件にカスタムフィールド「auther」の値を追加
$where .= $wpdb->prepare(" AND EXISTS ( SELECT * FROM {$wpdb->postmeta} as m
WHERE m.post_id = {$wpdb->posts}.ID AND m.meta_key = '著訳者' AND m.meta_value like %s )",
"%{$value}%" );
}
}
return $where;
};

//+++++++++++++++++++++++++++++++++++++++++
// WordPressの投稿一覧からカスタムフィールドの絞り込み検索を追加するカスタマイズその3。出版社
// 検索したい内容を入力するフォームを表示
add_action('restrict_manage_posts', 'add_publisher_filter');
function add_publisher_filter(){
global $post_type;
//表示するのは投稿一覧画面のみ
if ( $post_type == 'post' ) {
echo '<input type="text" name="出版社" value="'. get_query_var('出版社'). '" placeholder="出版社" />';
}
};

// 検索した内容(URLパラメータに追加される)の値を取得させる・・・”query_vars”というフックから配列に追加
add_filter('query_vars', 'add_publisher');
function add_publisher($vars) {
$vars[] = '出版社';
return $vars;
}

// 入力した内容が、カスタムフィールドの値から検索されるようにする。
// 記事の一覧を取得する時のフックである”posts_where”から、カスタムフィールドのpublisherの内容を取得させます。
// URLパラメータを見て”publisher”がある場合は、検索のSQLにカスタムフィールド値の検索を行うようにします。
add_filter('posts_where', 'posts_where_publisher');
function posts_where_publisher($where) {
global $wpdb;
//管理画面でのみ実行
if(is_admin()) {
$value = get_query_var('出版社');
if(!empty($value)) {
//検索条件にカスタムフィールド「publisher」の値を追加
$where .= $wpdb->prepare(" AND EXISTS ( SELECT * FROM {$wpdb->postmeta} as m
WHERE m.post_id = {$wpdb->posts}.ID AND m.meta_key = '出版社' AND m.meta_value like %s )",
"%{$value}%" );
}
}
return $where;
};