web-dev-qa-db-fra.com

wp_query ne cherche pas avec apostrophe

J'essaie de rechercher dans WP_Query les données contenant l'expression "loi de Dalton" dans meta_query. Ceci est une recherche AJAX, et voici ce que je fais:

//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',
        ),
    )

);

J'aurai du succès en tapant jusqu'à "Dalton", mais dès que j'arriverai à l'apostrophe, la recherche échouera. Quand je récupère le code javascript, je peux console.log la chaîne de recherche et elle est dalton\'s Il semble donc que l'encodage fonctionne correctement, mais WP_Query n'aime pas l'apostrophe ... Quelqu'un a-t-il des suggestions? Merci beaucoup!

1
go_cuc

Essayez d’utiliser sanitize_text_field au lieu de esc_html

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&#039;s Law &lt;br/&gt;"
wp> $sanitized = sanitize_text_field( $query );
string(12) "Dalton's Law"

esc_html devrait être utilisé pour échapper la sortie avant de passer dans HTML.

2
phatskat