前提・実現したいこと
WordPress+Advanced custom fieldの管理画面上でカスタムポストタイプ投稿での一覧ページでカスタムフィールドによる復数条件(AND)での絞り込み検索を行いたいと思っております。
ホテル名 AND ステータス
での絞り込み検索を行いたいと考えております。
下記にも書いておりますように、単数でのセレクトボックス検索はできておりますが復数のAND検索のやり方が分かっておらず、アドバイスいただけましたら幸いです。
該当のソースコード
使用言語:PHP
CMS:WordPress
関連プラグイン:Advanced custom field
下記の中での補足
カスタムポストタイプ:guests
検索対象カスタムフィールド名:ホテル名
// 管理画面の検索範囲を変更する
function add_subtitle_filter(){
global $post_type;
global $searched_text;
//表示するのは投稿一覧画面のみ
if ( $post_type == 'guests' ) {
echo '
<select name="hotel" class="selecting">
<option value="">--ホテル名を選択--</option>
<option value="ホテル名1">ホテル名1</option>
<option value="ホテル名2">ホテル名2</option>
<option value="ホテル名3">ホテル名3</option>
<option value="ホテル名4">ホテル名4</option>
<option value="ホテル名5">ホテル名5</option>
</select>
<div class="searched_text">検索内容:'. get_query_var('hotel').'</div> '; ; }
};
add_action('restrict_manage_posts', 'add_subtitle_filter');
function add_subtitle($vars) {
$vars[] = 'hotel';
return $vars;
}
add_filter('query_vars', 'add_subtitle');
function posts_where_subtitle($where) {
global $wpdb;
//管理画面でのみ実行
if(is_admin()) {
if(!empty(get_query_var('hotel'))){ $value = get_query_var('hotel'); if(!empty($value)) { //検索条件にカスタムフィールド「hotel」の値を追加 $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 = %s )","{$value}" ); } }
}
return $where;
};
add_filter('posts_where', 'posts_where_subtitle');
## 試したこと 下記URLを参考に単数セレクトボックスのでの検索が行えるようにしました。 WordPressの投稿一覧からカスタムフィールドの絞り込み検索を追加するカスタマイズ 〜カスタムフィールドの値をselectで検索できるようにする https://nxpg.net/blog/tech/?p=7467 上記の選択条件をカスタマイズして // 管理画面の検索範囲を変更する function add_subtitle_filter(){ global $post_type; global $searched_text; //表示するのは投稿一覧画面のみ if ( $post_type == 'guests' ) { echo ' <select name="hotel" class="selecting"> <option value="">--ホテル名を選択--</option> <option value="ホテル名1">ホテル名1</option> <option value="ホテル名2">ホテル名2</option> <option value="ホテル名3">ホテル名3</option> <option value="ホテル名4">ホテル名4</option> <option value="ホテル名5">ホテル名5</option> </select> <select name="status" class="selecting"> <option value="">--ステータスを選択--</option> <option value="チェックイン済み">チェックイン済み</option> <option value="チェックアウト済み">チェックアウト済み</option> <option value="キャンセル">キャンセル</option> <option value="予約">予約</option> <option value="その他">その他</option> </select> <div class="searched_text">検索内容:'. get_query_var('hotel').'</div> '; ; } }; add_action('restrict_manage_posts', 'add_subtitle_filter'); function add_subtitle($vars) { $vars[0] = 'hotel'; $vars[1]= 'status'; return $vars; } add_filter('query_vars', 'add_subtitle'); function posts_where_subtitle($where) { global $wpdb; //管理画面でのみ実行 if(is_admin()) { if(!empty(get_query_var('hotel'))){ $value1 = get_query_var('hotel'); $value2 = get_query_var('status'); if(!empty($value1) || !empty($value2) ) { $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 = %s )","{$value1}" ); } } } return $where; }; add_filter('posts_where', 'posts_where_subtitle'); ====== $wpdbの使い方を理解していないからだと思っておりまして、ご助言をいただけましたら幸いです。
あなたの回答
tips
プレビュー