web-dev-qa-db-fra.com

Quelle est la chaîne aléatoire que je vois lorsque j'utilise get_query_var?

Je configure une page de recherche avancée avec des champs ACF avec un type de message personnalisé dans wordpress.

Dans mon exemple, j'envoie 'Etudiants' dans mes paramètres d'URL sous la forme? LicenseType = Students

Search Example

* EDIT en ajoutant PHP code:

<select id="licenseType" name="licenseType">
<option value="">All License Types</option>
            <?php $field = get_field_object('software_license_type');               
                    if( $field )
                    {
                        foreach( $field['choices'] as $key => $value )
                        {
                            echo '<option value="'.$key.'" '.((isset($_GET['licenseType']) && $_GET['licenseType'] == $value)?' selected':'').' >'.$value.'</option>';
                        }
                    }
            ?></select>

J'ai enregistré mes query_vars

 add_filter( 'query_vars', 'software_register_query_vars' );
 function software_register_query_vars( $vars ) {
    $vars[] = 'licenseType';
  return $vars;
 } 

et configurer mon filtre pre_get_posts

add_action('pre_get_posts','software_pre_get_posts');
function software_pre_get_posts( $query ) {
  if ( is_main_query() && $query->get('post_type') == 'uc_software' ) {
    $query->set('nopaging','true');  
    $query->set( 'orderby', 'title' ); 
    $query->set( 'order', 'ASC' ); 

    $meta_query = array(); 

    if( !empty( get_query_var( 'licenseType' ) ) ){
    $meta_query[] = array( 'key' => 'software_license_type', 'value' => 
    get_query_var( 'licenseType' ), 'compare' => 'LIKE' );
    }
// ...
//I will add more fields here...
// ...  
    if( count( $meta_query ) > 1 ){
      $meta_query['relation'] = 'AND';
    }

    if( count( $meta_query ) > 0 ){
      $query->set( 'meta_query', $meta_query );
    }   
  }
}

Lorsque je visualise la requête en cours de création, je vois

SELECT wp_125_posts.* FROM wp_125_posts INNER JOIN wp_125_postmeta ON ( 
wp_125_posts.ID = wp_125_postmeta.post_id ) WHERE 1=1 AND ( ( 
wp_125_postmeta.meta_key = 'software_license_type' AND 
wp_125_postmeta.meta_value LIKE 
 '{4d69cec85576e5c23416d1afb6df73c1a4a288f24aff1da852b18ad70b464309}Students{4d69cec85576e5c23416d1afb6df73c1a4a288f24aff1da852b18ad70b464309}' 
) ) AND wp_125_posts.post_type = 'uc_software' AND (wp_125_posts.post_status = 'publish' 
OR wp_125_posts.post_status = 'acf-disabled' OR wp_125_posts.post_status = 'private') 
GROUP BY wp_125_posts.ID ORDER BY wp_125_posts.post_title ASC

Quelle est la chaîne aléatoire qui est capturée avec mon query_var? Est-il possible de récupérer ma requête_var sans cette requête? Je vois la même chose lorsque j'utilise $ _GET ['licenseType'].

1
Bridget Arrington

Ceci est un symptôme d'avoir un caractère % dans la valeur de votre méta-requête. Depuis la version 4.8.3, % caractères sont échappés (en fait remplacés par une chaîne semi-aléatoire) et ne doivent pas être échappés avant d’exécuter la requête SQL.

Vous devriez vérifier auprès de l'auteur du plug-in quelle serait la meilleure façon de le gérer, mais dans votre cas spécifique, je dirais qu'une légère refonte de votre code serait une meilleure solution que tout code non dissimulé. LIKE est une opération coûteuse qu'il vaut mieux éviter et sur la base de votre interface utilisateur, vous pouvez simplement faire une comparaison stricte des valeurs.

1
Mark Kaplun