Ich habe eine benutzerdefinierte WordPress-URL, die vonIDgeneriert wird. Ich muss diese URL https://example.com/account/customer-bookings/?view-booking=4
in https://example.com/account/customer-bookings/view-booking/4
umschreiben. Wie kann ich es anziehen?
Mein aktueller .htaccess-Code lautet:
# BEGIN WordPress
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
# END WordPress
# php -- BEGIN cPanel-generated handler, do not edit
# Set the “ea-php56” package as the default “PHP” programming language.
<IfModule mime_module>
AddType application/x-httpd-ea-php56 .php .php5 .phtml
</IfModule>
# php -- END cPanel-generated handler, do not edit
WordPress hat ein eigenes System, das Weiterleitungen und Seitenrouten verwaltet. Sie müssen die .htaccess-Datei nicht bearbeiten. Sie möchten mit der Funktion add_rewrite_rule()
beginnen.
Es braucht 3 Argumente:
Als erstes müssen Sie die Abfragevarianten von account/customer-bookings/
herausfinden. Wenn es sich um eine Seite handelt, kann es sich um page_id
handeln. Um zu reproduzieren, was WordPress bereits tut, könnte es sein (XXX ist die spezifische page_id):
add_rewrite_rule(
'^account/customer-bookings/?$',
'index.php?page_id=XXX'
);
Jetzt müssen Sie nur noch Folgendes erweitern: ( Vergessen Sie nicht, die Umschreiberegeln nach dem Hinzufügen dieses Codes zu leeren! )
add_action('init', 'wpse_view_booking_rewrite');
function wpse_view_booking_rewrite() {
add_rewrite_rule(
'^account/customer-bookings/view-booking/([^/]+)/?$',
'index.php?page_id=XXX&view-booking=$matches[1]',
'top'
);
}
Dies sollte bereits die richtige Seite anzeigen. Sie können get_query_var('view-booking')
jedoch nicht verwenden, da es sich nicht um eine Standardvariable handelt. Um dies zu lösen, sagen Sie einfach WP, dass Sie darauf achten sollen
add_filter('query_vars', 'wpse_view_bookings_filter');
function wpse_view_bookings_filter($vars) {
$vars[] = 'view-booking';
return $vars;
}
Zu diesem Zeitpunkt kennt WordPress die Variable und durch Aufrufen von get_query_var('view-booking')
erhalten Sie die richtige Variable.