wake-up-neo.com

So übergeben Sie zusätzliche Variablen in URL mit WordPress

Ich habe Probleme beim Versuch, eine zusätzliche Variable in der URL an meine WordPress Installation zu übergeben.

Beispielsweise /news?c=123

Aus irgendeinem Grund funktioniert es nur auf der Website root www.example.com?c=123 aber es funktioniert nicht, wenn die URL weitere Informationen enthält www.example.com/news?c=123. Ich habe den folgenden Code in meiner functions.php-Datei im Themenverzeichnis.

if (isset($_GET['c'])) 
{
  setcookie("cCookie", $_GET['c']); 
}

if (isset($_SERVER['HTTP_REFERER']))
{
  setcookie("rCookie", $_SERVER['HTTP_REFERER']);
}

Irgendwelche Ideen?

65
Chuck D

Es gibt nur wenige Lösungen, um dieses Problem anzugehen. Zuerst können Sie sich ein Plugin zulegen, wenn Sie möchten:

Oder Code manuell auschecken diesen Beitrag:

Schauen Sie sich auch Folgendes an:

31
Sarfraz

Um den Roundtrip "The WordPress Way" auf dem "Frontend" durchzuführen (funktioniert nicht im Kontext von wp-admin), Müssen Sie 3 WordPress Funktionen verwenden:

  • add_query_arg () - um die URL mit Ihrer neuen Abfragevariablen zu erstellen ('c' in Ihrem Beispiel)
  • den query_vars Filter, um die Liste der öffentlichen Abfragevariablen zu ändern, die WordPress kennt (dies funktioniert nur auf der Front-End, da die WP - Abfrage im Back-End nicht verwendet wird - wp-admin - daher auch nicht in admin-ajax)
  • get_query_var () - um den Wert Ihrer in Ihrer URL übergebenen benutzerdefinierten Abfragevariablen abzurufen.

Hinweis: Sie müssen nicht einmal die Superglobalen ($_GET) Berühren, wenn Sie dies auf diese Weise tun.

Beispiel

Auf der Seite, auf der Sie den Link erstellen/die Abfragevariable festlegen müssen:

Wenn es sich um einen Link zurück zu dieser Seite handelt, fügen Sie einfach die Abfragevariable hinzu

<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c ) )?>">

wenn es ein Link zu einer anderen Seite ist

<a href="<?php echo esc_url( add_query_arg( 'c', $my_value_for_c, site_url( '/some_other_page/' ) ) )?>">

In Ihrer functions.php, einer Plugin-Datei oder einer benutzerdefinierten Klasse (nur Front-End):

function add_custom_query_var( $vars ){
  $vars[] = "c";
  return $vars;
}
add_filter( 'query_vars', 'add_custom_query_var' );

Auf der Seite/Funktion, auf der Sie die in Ihrer URL festgelegte Abfragevariable abrufen und bearbeiten möchten:

$my_c = get_query_var( 'c' );

Auf dem Backend (wp-admin)

Im Backend wird wp() nie ausgeführt, daher wird die Hauptabfrage WP nicht ausgeführt. Infolgedessen gibt es kein query vars Und der Hook query_vars Wird nicht ausgeführt.

In diesem Fall müssen Sie zum Standardansatz zurückkehren, bei dem Sie Ihren $_GET - Superglobalen untersuchen. Der beste Weg, dies zu tun, ist wahrscheinlich:

$my_c = filter_input( INPUT_GET, "c", FILTER_SANITIZE_STRING );

zur Not könnten Sie das Bewährte tun

$my_c = isset( $_GET['c'] ? $_GET['c'] : "";

oder eine Variante davon.

104
Tom Auger

füge folgenden Code in function.php hinzu

add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{   
    $vars[] = 'var1'; // var1 is the name of variable you want to add       
    return $vars;
}

dann kannst du $ _GET ['var1'] benutzen

15
shankhan

Da dies ein häufig besuchter Beitrag ist, habe ich mir überlegt, meine Lösung zu veröffentlichen, falls sie jemandem hilft. In WordPress zusammen mit der Verwendung von Abfragevariablen können Sie Permalinks auch so ändern

www.example.com?c=123 to www.example.com/c/123

Dazu müssen Sie diese Codezeilen in die Datei functions.php oder in Ihre Plugin-Basisdatei einfügen.

Von shankhan anwer

add_filter( 'query_vars', 'addnew_query_vars', 10, 1 );
function addnew_query_vars($vars)
{   
    $vars[] = 'c'; // c is the name of variable you want to add       
    return $vars;
}

Außerdem wurde dies übersprungen, um benutzerdefinierte Umschreibungsregeln hinzuzufügen.

function custom_rewrite_basic() 
{
    add_rewrite_rule('^c/([0-9]+)/?', '?c=$1', 'top');
}
add_action('init', 'custom_rewrite_basic');

Für den Fall, dass Sie Umschreiberegeln für eine bestimmte Seite hinzufügen müssen, können Sie diesen Seiten-Slug verwenden, um eine Umschreiberegel für diese bestimmte Seite zu schreiben. Wie in der Frage, die OP gestellt hat

www.example.com/news?c=123 to www.example.com/news/123

Wir können es an das gewünschte Verhalten anpassen, indem wir unserer vorherigen Funktion eine kleine Änderung hinzufügen.

function custom_rewrite_basic() 
{
    add_rewrite_rule('^news/([0-9]+)/?', 'news?c=$1', 'top');
}
add_action('init', 'custom_rewrite_basic');

Ich hoffe, dass es für jemanden nützlich wird.

9
shazyriver
<?php
$edit_post = add_query_arg('c', '123', 'news' );

?>

<a href="<?php echo $edit_post; ?>">Go to New page</a>

Sie können jede Seite anstelle von "Nachrichten" hinzufügen.

3
user3777827

Ein Problem, auf das Sie stoßen könnten, ist, dass is_home() true zurückgibt, wenn eine registrierte query_var in der Home-URL vorhanden ist. Wenn beispielsweise http://example.com Anstelle des Blogs eine statische Seite anzeigt, gibt http://example.com/?c=123 Das Blog zurück.

Siehe https://core.trac.wordpress.org/ticket/2514 und https://wordpress.org/support/topic/adding-query-var-makes-front- page-missing / für mehr Infos dazu.

Was Sie tun können (wenn Sie nicht versuchen, die Abfrage zu beeinflussen), ist die Verwendung von add_rewrite_endpoint(). Es sollte während der Aktion init ausgeführt werden, da es sich auf die Umschreiberegeln auswirkt. Z.B.

add_action( 'init', 'add_custom_setcookie_rewrite_endpoints' );

function add_custom_setcookie_rewrite_endpoints() {
    //add ?c=123 endpoint with
    //EP_ALL so endpoint is present across all places
    //no effect on the query vars
    add_rewrite_endpoint( 'c', EP_ALL, $query_vars = false );
}

Dies sollte Ihnen Zugriff auf $_GET['c'] Geben, wenn die URL mehr Informationen wie www.example.com/news?c=123 Enthält.

Denken Sie daran, Ihre Umschreiberegeln zu löschen, nachdem Sie diese hinzugefügt/geändert haben.

2
niall.campbell

Nur so konnte ich das zum Laufen bringen

add_action('init','add_query_args');
function add_query_args()
{ 
    add_query_arg( 'var1', 'val1' );
}

http://codex.wordpress.org/Function_Reference/add_query_arg

1
brenjt

to Parameter hinzufügen, um URLs zu posten (zu perma-links), ich benutze dies:

add_filter( 'post_type_link', 'append_query_string', 10, 2 );
function append_query_string( $url, $post ) 
{
    return add_query_arg('my_pid',$post->ID, $url);
}

ausgabe:

http://yoursite.com/pagename?my_pid=12345678

1
T.Todua