web-dev-qa-db-fra.com

Réécrire l'URL personnalisée de WordPress

J'ai une URL personnalisée WordPress qui est générée parID. Je dois réécrire cette URL https://example.com/account/customer-bookings/?view-booking=4 à https://example.com/account/customer-bookings/view-booking/4. Comment puis-je l'enfiler?

Mon code .htaccess actuel suit,

# 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 possède son propre système de gestion des redirections et des itinéraires de page. Vous n'avez pas besoin de modifier le fichier .htaccess. Vous voudrez commencer par la fonction add_rewrite_rule() .

Il faut 3 arguments:

  1. route (comme regex)
  2. vars de requête
  3. priorité

Donc, vous devez d’abord trouver les vars de requête de account/customer-bookings/. Si c'est une page, il peut s'agir de page_id. Pour reproduire ce que WordPress fait déjà, cela pourrait être (XXX étant le nom de page spécifique):

add_rewrite_rule(
    '^account/customer-bookings/?$',
    'index.php?page_id=XXX'
);

Maintenant, vous devez juste développer ceci: ( n'oubliez pas de vider les règles de réécriture après avoir ajouté ce code! )

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'
    );
}

Cela devrait déjà présenter la bonne page. Cependant, vous ne pourrez pas utiliser get_query_var('view-booking'), car il ne s'agit pas d'une variable par défaut. Pour résoudre ce problème, il vous suffit de dire à WP de le regarder comme tel.

add_filter('query_vars', 'wpse_view_bookings_filter');
function wpse_view_bookings_filter($vars) {
    $vars[] = 'view-booking';
    return $vars;
}

À ce stade, WordPress est au courant de la variable et, en appelant get_query_var('view-booking'), vous obtiendrez la variable appropriée.

3
kero