meta_query
で "Dalton's Law"というフレーズを含むデータをWP_Queryで検索しようとしています。これはAJAX
検索です、そして、これが私がしていることです:
//in this case $_POST['query'] is the phrase "Dalton's Law"
$query = apply_filters( 'get_search_query', $_POST['query'] );
$query = esc_html( $query );
$guide_meta_args = array(
'post_type' => array( 'guide' ),
'post_status' => 'publish',
'ignore_sticky_posts' => true,
'posts_per_page' => 4,
'meta_query' => array(
array(
'key' => 'guide_raw_data',
'value' => $query,
'compare' => 'LIKE',
),
)
);
"Dalton"まで入力しても成功しますが、アポストロフィに達するとすぐに検索が失敗します。私のJavascriptからコードを取り戻すとき、私は検索文字列をconsole.log
でき、それはdalton\'s
です。エンコーディングは正しく機能しているようですが、WP_Query
はアポストロフィが好きではありません...誰かが提案をしますか?本当にありがとう!
esc_html
の代わりに sanitize_text_field を使ってみてください。
wp> $search_query = "Dalton's Law <br/>";
string(18) "Dalton's Law <br/>"
wp> $query = apply_filters( 'get_search_query', $search_query );
string(18) "Dalton's Law <br/>"
wp> $esc_html = esc_html( $query );
string(29) "Dalton's Law <br/>"
wp> $sanitized = sanitize_text_field( $query );
string(12) "Dalton's Law"
esc_html
は、 から HTMLに進む前に出力をエスケープするために使用されるべきです。