So erhalten Sie hübsche URLs mit add_query_arg in Permalinks

8

Damit ist add_query_arg()es schön, einer URL zusätzliche Parameter hinzuzufügen, und es ist auch einfach, eine Umschreiberegel zu 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 gerne bekommen würde 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 dies erreicht werden? Ich habe Stunden damit verbracht, Dokumente zu lesen, und konnte keine Lösung finden.

user3114592
quelle
1
Ich würde gerne wissen, wie das gemacht wird. +1 auf die Frage.
Henrywright

Antworten:

5

Ich habe mich gerade der gleichen Situation gestellt und bin beim Googeln auf diese Frage gestoßen.

Es scheint, dass dies nicht möglich ist. Core selbst hängt nur Zeichenfolgen 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 daran interessiert sind: 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

swissspidy
quelle
0

Mit WordPress können Sie dies nicht einfach tun. Tatsächlich sind Umschreiberegeln Ihre einzige Option, um diese Art von Dingen in WordPress zu erreichen, und WordPress-Umschreiberegeln können sehr unübersichtlich werden, wenn Ihre Website wächst, da Plugins und Themes (und auch Sie) möglicherweise benutzerdefinierte Umschreiberegeln über den vorhandenen Regeln in Ihrem (Multi) hinzufügen ) Installation vor Ort.

Die @ swissspidy-Lösung funktioniert, wenn Sie bereits eine Umschreiberegel für Ihren Schlüssel (myvar) haben und in der ersten Bedingung Permalinks verwenden und dann ohne diese Bedingungen auf herkömmliche Abfragezeichenfolgen zurückgreifen. Die Lösung von @Johnathan Joosten zeigt, wie das Umschreiben von Regeln in WordPress sehr, sehr komplex werden kann (stellen Sie sich vor, Sie tun dies für alle Ihre Schlüssel und Werte für Abfragezeichenfolgen ...)

Ich habe dieses Problem einige Male zuvor bei der Arbeit an mittelgroßen Projekten für meine Kunden getroffen und konnte mit einem Plugin namens Obfusquer etwas Ähnliches erreichen. Laut der Website maskiert es alle WordPress-Abfragezeichenfolgen mit benutzerdefinierten geheimen Schlüsseln und bietet auch Hooks für erweiterte benutzerdefinierte Anforderungen.

Witzig, es ist nicht im WordPress-Plugin-Repository aufgeführt, und ich denke, Sie benötigen ein Abonnement (was meiner Meinung nach sehr erschwinglich ist, da 1 einzelne Lizenz auch bei der Installation an mehreren Standorten funktioniert), aber hier ist ein Link dazu, wenn Sie maskieren müssen / verstecke Abfragezeichenfolgen in WordPress-Installationen. Sie haben auch Dokumentation hier .

Ich verwende das Plugin jetzt in fast allen meinen WordPress-Projekten und hoffe, es hilft Ihren Anforderungen. Prost.

Ramos Abdellaziz
quelle
-1

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

    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

Jonathan Joosten
quelle
1
Sie hätten es komplizierter machen sollen, es herunterzustimmen ...
Vishal Kumar Sahu