Pour une raison quelconque, ce n'est pas tout à fait clair, lorsque j'ajoute des query_vars personnalisés, ils sont disponibles partout sans qu'il soit nécessaire de recourir à un accesseur tel que global
ou get_query_var()
// if your url contains the var http://example.com?document_id=99
// and you add it to $query_vars...
<?php
function filter__query_vars( $query_vars ) {
$query_vars[] = 'document_id';
return $query_vars;
}
add_filter( 'query_vars', 'filter__query_vars' );
// you can reference it anywhere.
/* single.php */
<?php
echo $document_id; // outputs 99. wtf?
Pourquoi ça marche?
Dans la méthode WP::parse_request()
( src ), nous localisons le filtre query_vars
:
$this->public_query_vars = apply_filters( 'query_vars', $this->public_query_vars );
et dans WP::register_globals()
nous pouvons voir pourquoi il devient globalement accessible ( src ):
// Extract updated query vars back into global namespace.
foreach ( (array) $wp_query->query_vars as $key => $value ) {
$GLOBALS[ $key ] = $value;
}
où le $Wp_query
global a été alimenté avec les vars de requête de l’objet global $wp
.