カテゴリー別アーカイブ: カスタムフィールド

検索キーワードにカスタムフィールドの値も使えるようにする。

wordpressでカスタムフィールドを使っているときに、カスタムフィールドの値が検索してもでてこなくて
どうしようか悩んだときのメモ

searcheverythingというプラグインもいいのですが、
それだと、or検索ができなくなってしまいます。

そこで、いろいろと調べていると、こちらのサイト非常に参考になりました!
続・WordPressの検索をカスタマイズしてみた|notnil creation weblog
functions.phpに以下のコードを書き足すだけで悩みは解決です。
細は上のリンクからご確認ください。
Takuro Hishikawaさん、本当にありがとうございました。

function my_search_join( $join, $query ) {
if ( is_admin() || ! $query->is_main_query() )
return $join;

global $wpdb;
if( $query->is_search() ) {
$join .= " LEFT JOIN $wpdb->postmeta ON "
. "$wpdb->posts.ID = $wpdb->postmeta.post_id ";
}
return $join;
}
function my_search_where( $where, $query ) {
if ( is_admin() || ! $query->is_main_query() )
return $where;

global $wpdb;
if ( $query->is_search() ) {
$where = preg_replace(
"/\(\s*$wpdb->posts\.post_title\s+LIKE\s*(\'[^\']+\')\s*\)/",
"($wpdb->posts.post_title LIKE $1) OR ($wpdb->postmeta.meta_value LIKE $1)",
$where
);
}
return $where;
}
add_filter( 'posts_join', 'my_search_join', 10, 2 );
add_filter( 'posts_where', 'my_search_where', 10, 2 );

ちなみにor検索をするのはfunctions.phpに以下のコードを追加

add_filter('posts_search', function($search) { return str_replace(')) AND ((', ')) OR ((', $search); });

カスタムフィールドを使いやすくするプラグイン

カスタムフィールドの設定がすこぶる便利なプラグインを見つけました。

それが「Smart Custom Fields

使い方は上記リンクをご覧ください。

自分が躓いた繰り返しのところだけ追記しておきます。

// 特定のグループのデータを取得(例:グループ名が repeat-group の場合)
$repeat_group = SCF::get( 'repeat-group' );
foreach ( $repeat_group as $field_name => $field_value ) {
    // 適当な処理
}

のところですが、
適当な処理のところがわからず、
下記サイトを参考にさせていただきました。

WordPressプラグイン「Smart Custom Fields」/I.M.Design