Ein paar Dinge. Zunächst müssen Ihren Funktionsnamen etwas Einzigartiges vorangestellt werden. WordPress ist ein großes Ökosystem, und wahrscheinlich hat jemand anderes alle generischen Funktionsnamen verwendet, die Sie sich vorstellen können.
Zweitens add_rewrite_endpoint
kümmert sich das Hinzufügen von Abfragevariablen für Sie. Das brauchst du also nicht:
add_filter( 'query_vars', 'add_query_vars');
function add_query_vars($vars){
$vars[] = "tours";
$vars[] = "activities";
return $vars;
}
Es ist keine gute Idee, die Regeln für das Umschreiben bei jeder Ladung zu spülen. Dies muss nur einmal durchgeführt werden, nachdem Ihre Regeln hinzugefügt wurden. Wie bei der Plugin-Aktivierung. Ihre add_endpoints
Funktion könnte also kurzgeschlossen werden (mit einem besseren Funktionsnamen pro Punkt eins oben).
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PERMALINK);
add_rewrite_endpoint('activities', EP_PERMALINK);
}
Welches funktioniert gut für Beiträge. Wenn Sie möchten, dass es auf Seiten oder einem anderen hierarchischen Beitragstyp funktioniert, müssen Sie die EP_PAGES
Endpunktmaske verwenden.
<?php
add_action('init', 'wpse42279_add_endpoints');
function wpse42279_add_endpoints()
{
add_rewrite_endpoint('tours', EP_PAGES);
add_rewrite_endpoint('activities', EP_PAGES);
}
Aber das wird für Sie immer noch nicht wie erwartet funktionieren. Endpunkte setzen ihre Abfragevariable gleich dem, was danach kommt. Also, wenn Ihre URL ist ...
yoursite.com/some-country/some-city/activities/asdf
Die Aktivitäten der Abfragevariablen lauten asdf. Wenn nichts folgt activities
, ist Ihre Abfragevariable leer (aber gesetzt), sodass sie immer als falsch ausgewertet wird, wenn Sie versuchen, sie abzufangen ...
<?php
add_action( 'template_redirect', 'wpse42279_catch_vars' );
function wpse42279_catch_vars()
{
if( get_query_var( 'tours' ) )
{
// do stuff!
exit();
}
}
Sie können dies umgehen, indem Sie request
den Wert Ihrer Touren- und Aktivitätsvariablen filtern und in true ändern, wenn sie festgelegt sind.
<?php
add_filter( 'request', 'wpse42279_filter_request' );
function wpse42279_filter_request( $vars )
{
if( isset( $vars['tours'] ) ) $vars['tours'] = true;
if( isset( $vars['activities'] ) ) $vars['activities'] = true;
return $vars;
}
Sie sollten sich dieses Handbuch zur von mir geschriebenen Rewrite-API ansehen . Die relevanten Teile für Ihre Frage sind jedoch oben zusammengefasst.