Benutzerdefinierte URL-Parameter in Vorlagendateien

KONFIGURATION

Ich möchte eine Abfragevariable aus der URL ziehen und sie für meine einzelne Postvorlage (single.php) verwenden. Zum Beispiel: mysite.com/2011/07/29/testPost/?myvar=someValue

Um dies zu tun, habe ich die benutzerdefinierte Abfrage-Variable zu functions.php wie folgt hinzugefügt:

add_filter('query_vars', 'parameter_queryvars' ); function parameter_queryvars( $qvars ) { $qvars[] = 'myvar'; return $qvars; } 

Dann habe ich in single.php und index.php den folgenden Code hinzugefügt, um zu testen, ob die benutzerdefinierte Variable gesetzt wurde, und eine Zeichenfolge zu wiederholen, wenn sie wahr ist. Ich habe auch den Inhalt von $ wp_query-> query_vars gedruckt, damit ich sehen konnte, ob meine benutzerdefinierte Variable dort war:

 query_vars['myvar'] )) { echo 'custom variable recognized'; } print_r($wp_query->query_vars); ?> 

PROBLEM

Wenn ich auf eine URL wie mysite.com/2011/07/29/testPost/?myvar=someValue zugreife, die die Vorlage single.php verwendet, wird der echo-Befehl nicht angezeigt und die Ausgabe von print_r () zeigt an, dass mein ‘myvar’ fehlt in der Liste von query_vars.

Ausgabe von single.php:

 Array ( [p] => 0 [page] => 0 [year] => 2011 [monthnum] => 7 [day] => 29 [name] => testpost [error] => [m] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 150 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC [orderby] => wp_posts.post_date DESC ) 

Wenn ich jedoch auf eine URL wie mysite.com/?myvar=someValue zugreife, die die Vorlage index.php verwendet, wird der Befehl echo ausgegeben, und die erste Variable, die von print_r () ausgegeben wird, ist die von mir gesuchte ‘myvar’ zum:

 Array ( [myvar] => someValue [error] => [m] => 0 [p] => 0 [post_parent] => [subpost] => [subpost_id] => [attachment] => [attachment_id] => 0 [name] => [static] => [pagename] => [page_id] => 0 [second] => [minute] => [hour] => [day] => 0 [monthnum] => 0 [year] => 0 [w] => 0 [category_name] => [tag] => [cat] => [tag_id] => [author_name] => [feed] => [tb] => [paged] => 0 [comments_popup] => [meta_key] => [meta_value] => [preview] => [s] => [sentence] => [fields] => [category__in] => Array ( ) [category__not_in] => Array ( ) [category__and] => Array ( ) [post__in] => Array ( ) [post__not_in] => Array ( ) [tag__in] => Array ( ) [tag__not_in] => Array ( ) [tag__and] => Array ( ) [tag_slug__in] => Array ( ) [tag_slug__and] => Array ( ) [meta_query] => Array ( ) [ignore_sticky_posts] => [suppress_filters] => [cache_results] => 1 [update_post_term_cache] => 1 [update_post_meta_cache] => 1 [post_type] => [posts_per_page] => 150 [nopaging] => [comments_per_page] => 50 [no_found_rows] => [order] => DESC [orderby] => wp_posts.post_date DESC ) 

FRAGE

Warum sollte die benutzerdefinierte Abfragevariable auf einer index.php-Seite richtig eingestellt sein, aber nicht auf single.php?

Ich habe mit allen Plugins getestet und versucht mit Default Permalinks, habe aber die gleichen Ergebnisse bekommen.

Solutions Collecting From Web of "Benutzerdefinierte URL-Parameter in Vorlagendateien"

Das global $wp_query Objekt ist nicht das, wonach Sie suchen, wenn Sie zu single.php gelangen. Verwenden Sie stattdessen das global $wp Objekt. Versuchen Sie, Ihren Code folgendermaßen zu ändern:

  global $wp; if (array_key_exists('myvar', $wp->query_vars) && isset($wp->query_vars['myvar'])){ echo 'custom variable recognized'; } print_r($wp->query_vars); 

Ich habe den einfachen Ausweg genommen und einfach so etwas benutzt:

 $user_id = $_GET['user_id']; $user = new WP_User($user_id); 

In der Vorlage. Dann könnte ich diese Vorlage mit einer URL wie http://site.com/profile/?user_id=4 aufrufen und sie funktioniert überall. Nicht so “voll WordPress” wie Filter, aber es funktioniert und ist ziemlich sauber.

Ich arbeite an dem gleichen Problem, und ich denke, wir müssen auch add_query_arg verwenden, um das “? Myvar = someValue” in die neue URL einzubetten, die Sie aufrufen möchten (wie von innerhalb eines

https://wordpress.stackexchange.com/questions/26040/custom-url-parameters-in-template-files/$url_with_param = add_query_arg( 'myvar', 'someValue', site_url('/index.php/') ); Click Here";

Der Add_Filter macht Ihre MyVar einfach zum Lesen mit dem Ziel verfügbar

$wp_query->query_vars['myvar']

Ich weiß, dass dies keine vollständige Lösung ist, aber es ist ein wichtiger Schritt.