Je rencontre un problème lié à une requête personnalisée var nommée date
que j'ai ajoutée à l'aide de query_vars
hook. Lorsque le paramètre date
est présent dans l'URL de la page de couverture ( https://example.com/?date=23.08.2016 ), WordPress charge les archives de messages au lieu de la page de couverture. Lorsque d’autres paramètres aléatoires sont ajoutés au lien ( https://exemple.com/?foo=bar ) ou qu’aucun paramètre n’est présent, la page de couverture est correctement chargée de la page statique que j’ai définie.
La page de messages dans le backend est différente de la page de couverture.
J'ai ajouté la requête personnalisée var en utilisant le code suivant:
my_query_vars( $vars ) {
$vars[] = 'date';
return $vars;
}
add_filter( "query_vars", "my_query_vars" );
Une idée pourquoi une telle chose se produit?
Après le débogage détaillé de WP::parse_request()
et WP_Query::parse_query()
, j'ai découvert que unset( $query_vars['date'] );
dans le filtre 'request'
aide.
Il désactive fondamentalement la requête de date var avant que WP_Query::parse_query()
soit invoqué afin que is_home()
renvoie false.
add_filter( 'request', function( $query_vars ) {
global $wp_query, $wp;
if ( ! $wp_query->is_main_query() ) {
return $query_vars;
}
$qv_keys = array_keys( $wp->query_vars );
if ( ! ( in_array( 'product_cat', $qv_keys, true )
|| in_array( 'product_tag', $qv_keys, true )
|| in_array( 'post_type', $qv_keys, true ) && 'product' === $wp->query_vars['post_type']
|| in_array( 's', $qv_keys, true )
) ) {
unset( $query_vars['date'] );
}
return $query_vars;
} );
Explication:
Les archives des charges sont chargées lorsque WP_Query::$is_home = true
, j'ai donc remonté aux endroits où cette valeur est définie et, en bref, je pense que c'est comme ceci:
$this->query_vars['post_type']
et $this->query_vars['name']
ne sont pas définis dans cette condition car la requête de date n'est affectée à aucun type de publication.WP_Query::$is_singular
est défini sur false hereWP_Query::$is_home = true
.