Ich möchte jeder URL mehrere Paare aus query_var und value hinzufügen. Die Basis-URL einer Seite lautet beispielsweise:
example.com/Nice-page/
Ich kann bereits einen Endpunkt wie (zum Beispiel eine On-Page-Subgallery) erreichen:
example.com/Nice-page/my-gallery/animals/cats
Dabei ist my-gallery
die Abfragevariable und animals/cats
der Wert. Mit diesem:
add_rewrite_endpoint('my-gallery', EP_PAGES);
add_rewrite_endpoint('my-lightbox', EP_PAGES);
Ich brauche das auch, um zu arbeiten:
example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
Wo ich my-lightbox
als zusätzlichen Endpunkt oder query_var registrieren möchte, da er unabhängig von my-gallery
verwendet werden kann, wie zum Beispiel:
example.com/another-page/my-lightbox/2345
Derzeit erhalte ich den gesamten animals/cats/my-lightbox/1234
als Wert. Ich kann WP nicht darauf aufmerksam machen, dass eine neue query_var bei my-lightbox
beginnt, wenn my-gallery
bereits vorhanden ist. Es scheint, dass Umschreibungs-Tags auf die gesamte Eingabe-URL und Endpunkte auf das Ende der Eingabe-URL wirken, aber der reguläre $ end-Anker ist immer vorhanden. Ist es überhaupt möglich, mit der rewrite-API mehrere query_vars in eine komplexe URL umzuwandeln?
Ich brauche das auch, um zu arbeiten:
example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
Wo ich
my-lightbox
als zusätzlichen Endpunkt oder query_var registrieren möchte, da er unabhängig vonmy-gallery
verwendet werden kann, wie zum Beispiel:example.com/another-page/my-lightbox/2345
Hier ist ein Beispiel für die Verwendung von 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] Alternative Version ohne 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'
);
} );
Und ich habe es auf diesen URLs getestet:
..wobei get_query_var( 'my-gallery' )
animals/cats
(für die erste und die zweite URL) und get_query_var( 'my-lightbox' )
1234
(für die erste und die dritte URL) zurückgibt.