Meta_valueまたはtitleでクエリする方法
Meta_valuesを設定すると、
$args['meta_query'] = array(
'relation' => 'OR',
array(
'key' => 'model_name',
'value' => $thesearch,
'compare' => 'like'
)
);
それらは自動的にANDとして追加されます。
この検索は次のようになります。
WHERE title = 'Search' AND (model_name = 'Search' OR ...)
私は欲しい
WHERE title = 'Search' OR (model_name = 'Search' OR ...)
meta_query
引数のrelation
部分は、 sub meta query間の関係を定義するためにのみ使用されることに注意してください。
あなたはこの設定を試すことができます:
$args = [
'_meta_or_title' => $thesearch, // Our new custom argument!
'meta_query' => [
[
'key' => 'model_name',
'value' => $thesearch,
'compare' => 'like'
]
],
];
meta OR title クエリを有効にするためにカスタム引数_meta_or_title
を導入しました。
これは以下のプラグインでサポートされています。
<?php
/**
* Plugin Name: Meta OR Title query in WP_Query
* Description: Activated through the '_meta_or_title' argument of WP_Query
* Plugin URI: http://wordpress.stackexchange.com/a/178492/26350
* Plugin Author: Birgir Erlendsson (birgire)
* Version: 0.0.1
*/
add_action( 'pre_get_posts', function( $q )
{
if( $title = $q->get( '_meta_or_title' ) )
{
add_filter( 'get_meta_sql', function( $sql ) use ( $title )
{
global $wpdb;
// Only run once:
static $nr = 0;
if( 0 != $nr++ ) return $sql;
// Modify WHERE part:
$sql['where'] = sprintf(
" AND ( %s OR %s ) ",
$wpdb->prepare( "{$wpdb->posts}.post_title = '%s'", $title ),
mb_substr( $sql['where'], 5, mb_strlen( $sql['where'] ) )
);
return $sql;
});
}
});