J'aimerais ajouter plusieurs paires query_var/value à n'importe quelle URL. Par exemple, l'URL de base d'une page est:
example.com/Nice-page/
Je peux déjà atteindre un point de terminaison comme (par exemple, une sous-galerie sur une page):
example.com/Nice-page/my-gallery/animals/cats
Où my-gallery
est la requête_var et animals/cats
sa valeur. En utilisant ceci:
add_rewrite_endpoint('my-gallery', EP_PAGES);
add_rewrite_endpoint('my-lightbox', EP_PAGES);
J'ai aussi besoin de ça pour travailler:
example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
Où j'aimerais enregistrer my-lightbox
en tant que noeud final supplémentaire ou query_var, car il pourrait être utilisé indépendamment de sans my-gallery
, tel que:
example.com/another-page/my-lightbox/2345
Actuellement, je reçois le animals/cats/my-lightbox/1234
entier comme valeur. Je ne peux pas informer WP du fait qu'une nouvelle requête_var commence à my-lightbox
lorsque my-gallery
est déjà présent. Il semble que les balises de réécriture agissent sur l'intégralité de l'URL en entrée et les points de terminaison sur la fin de l'URL en entrée, mais l'ancre regex $ end est toujours là. Est-il même possible d’utiliser l’API de réécriture pour personnaliser plusieurs query_vars en une URL complexe?
J'ai aussi besoin de ça pour travailler:
example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
Où j'aimerais enregistrer
my-lightbox
en tant que noeud final supplémentaire ou query_var, car il pourrait être utilisé indépendamment de sansmy-gallery
, tel que:example.com/another-page/my-lightbox/2345
Voici un exemple d'utilisation à l'aide de add_rewrite_rule()
:
add_action( 'init', function() {
// This will let you use get_query_var( 'my-gallery' ).
add_rewrite_endpoint( 'my-gallery', EP_PAGES );
// This will let you use get_query_var( 'my-lightbox' ).
add_rewrite_endpoint( 'my-lightbox', EP_PAGES );
add_rewrite_rule(
'(.?.+?)/(?:my-gallery/(.+?)/my-lightbox/(\d+)|my-gallery/(.+?)|/?my-lightbox/(\d+))/?$',
'index.php?pagename=$matches[1]&my-gallery=$matches[2]&my-lightbox=$matches[3]',
'top'
);
// This is just for testing purposes. You should instead go to the Permalink
// Settings page and click on the Save Changes button to flush the rules. =)
//flush_rewrite_rules();
} );
[EDIT] Version alternative sans utiliser add_rewrite_endpoint()
:
add_filter( 'query_vars', function( $qv ) {
// This will let you use get_query_var( 'my-gallery' ).
$qv[] = 'my-gallery';
// This will let you use get_query_var( 'my-lightbox' ).
$qv[] = 'my-lightbox';
return $qv;
} );
add_action( 'init', function() {
add_rewrite_rule(
'(.?.+?)/(?:my-gallery/(.+?)/my-lightbox/(\d+)|my-gallery/(.+?)|/?my-lightbox/(\d+))/?$',
'index.php?pagename=$matches[1]&my-gallery=$matches[2]&my-lightbox=$matches[3]',
'top'
);
} );
Et je l'ai testé sur ces URL:
..where get_query_var( 'my-gallery' )
renvoie animals/cats
(pour les première et deuxième URL) et get_query_var( 'my-lightbox' )
renvoie 1234
(pour les première et troisième URL).