web-dev-qa-db-de.com

Schreiben Sie die benutzerdefinierte URL von WordPress neu

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
2
Sonjoy Datta

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:

  1. route (als regulärer Ausdruck)
  2. abfragevariablen
  3. priorität

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.

3
kero