wake-up-neo.com

Wie kann man mehrere Umschreibe-Endpunkte in geringer URL haben?

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?

2

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

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:

  • example.com/Nice-page/my-gallery/animals/cats/my-lightbox/1234
  • example.com/Nice-page/my-gallery/animals/cats
  • example.com/Nice-page/my-lightbox/1234

..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.

3
Sally CJ