wake-up-neo.com

Wie man hübsche URLs mit add_query_arg in Permalinks bekommt

Mit add_query_arg() können Sie einer URL zusätzliche Parameter hinzufügen und auf einfache Weise eine Umschreiberegel erstellen. So weit, ist es gut. Das Problem ist jedoch die URL-Ersetzung durch WordPress.

Wenn ich eine URL habe, wie:

www.mysite.com/?page_id=1&myvar=test

und ich tippe diese URL in die Adresszeile des Browsers mit aktivierten Permalinks. Dieser Link wird zu:

www.example.com/pagename/?myvar=test

ABER: was ich bekommen möchte ist:

www.example.com/pagename/test

Zum Schluss möchte ich folgenden Code verwenden:

<a href="<?php add_query_arg( 'myvar', 'test', get_permalink() ) ?>"> .... </a>

was dazu führen würde:

www.example.com/pagename/test

Wie kann das erreicht werden? Ich habe stundenlang Dokumente gelesen und konnte keine Lösung finden.

8
user3114592

Stellte gerade die gleiche Situation gegenüber und stolperte über diese Frage beim googeln.

Das scheint nicht möglich zu sein. Core selbst hängt nur Strings an die URL an, wenn hübsche Permalinks aktiviert sind (siehe https://core.trac.wordpress.org/browser/tags/3.9.1/src/wp-includes/link-template.php#L571)

Für alle, die sich dafür interessieren: Sie können so etwas in Ihrem Code tun:

if ( '' != get_option('permalink_structure') ) {
    // using pretty permalinks, append to url
    $read = user_trailingslashit( get_permalink() . 'test' ); // www.example.com/pagename/test
  } else {
    $read = add_query_arg( 'test', '', get_permalink() ); // www.example.com/pagename/?test
  }

Diese Lösung wurde auch von Jon Cave in einem Kommentar im offiziellen Make-Blog empfohlen: https://make.wordpress.org/plugins/2012/06/07/rewrite-endpoints-api/#comment-686

4
swissspidy

Die Wordpress-Lösung würde darin bestehen, Umschreiberegeln hinzuzufügen, um so etwas wie das Folgende zu erreichen:

    add_action( 'init', 'my_rewrite_add_rewrites' );
    function my_rewrite_add_rewrites()
    {
        add_rewrite_rule( 'calendar/([0-9]{4})/?$', 'index.php?post_type=events&year=$matches[1]', 'top' );
        add_rewrite_rule( 'calendar/([0-9]{4})/page/?([0-9]{1,})/?$', 'index.php?post_type=events&year=$matches[1]&paged=$matches[2]', 'top' );
    }

lesen Sie mehr: https://codex.wordpress.org/Rewrite_API/add_rewrite_rule

0