私は本当に明白な何かが欠けているように感じますが、私は見て、これを理解することができません。 CPT(request_form
)があり、投稿のタイトルではなくメタクエリ(wp_postmeta)で検索を実行する必要があります。キャッチは私が管理者ダッシュボードからこれをする必要があることであり、私のコードは機能していません。私はユーザー側で同様の種類の検索をしましたが、以前は管理者側では行っていませんでした。私はpre_get_posts
を使うのが正しいと思いました、しかし私はどこにもなっていません。
私が気づいた2つの奇妙なこと。
meta_query
は$query
オブジェクト内に2回存在します。 $query->query_vars['meta_query']
に一度、$query->meta_query
に一度。wp-config.php
でSAVEQUERIES
を有効にして$wpdb->queries
をダンプしても、クエリがまったく実行されていません。
function my_search($query) {
if (!is_admin()) {
return;
}
if ($query->query['post_type'] !== 'request_form') {
return;
}
if (!$query->is_search) {
return $query;
}
$search = $query->query_vars['s'];
$meta_query = array(
'relation' => 'OR',
array(
'key' => 'request_details',
'value' => $search,
'compare' => 'LIKE'
),
array(
'key' => 'request_subject',
'value' => $search,
'compare' => 'LIKE'
)
);
$query->set('meta_query', $meta_query);
echo "<pre>";
var_dump($query);
echo "</pre>";
return $query;
}
add_action('pre_get_posts', 'my_search');
次のようにsequelproを使用してデータベース内で直接クエリを実行すると、予想どおりの投稿が返されます(申し訳ありませんが、これはまったく同じではありません)。
SELECT * FROM wp_postmeta WHERE meta_value LIKE "%basketball%"
あなたが与えることができるあらゆる助けをありがとう!
Query Monitorプラグインをインストールすると、検索を実行したときに実際に実行されているクエリを確認できます。
私はあなたが抱えている問題はあなたが最初のクエリ変数を設定解除していないということであると思われます。メタクエリを追加していますが、s =パラメータを削除していません。これは、タイトル、コンテンツ、および抜粋でキーワードを検索するだけです。
$query->set('meta_query', $meta_query);
の下に、次のいずれかを追加してみてください。$query->set('s', '');
には、 's'を空の文字列に設定するか、$query->__unset('s');
に設定解除します。