Benutzerdefinierte Rewrite-Regel ignoriert

Was ich brauche

Für den Zweck der Produktseitenvariationstests versuche ich, meine Produktseite URL auf etwas wie neu zu schreiben:

www.website.com/products/product-x/variation/1/ 

Was habe ich getan

Ich habe die Abfrage var wie folgt hinzugefügt:

 /** * Adds variation query var */ function gtp_add_variation_query_vars( $vars ) { $vars[] = 'variation'; return $vars; } add_filter( 'query_vars', 'gtp_add_variation_query_vars'); 

Ich habe in generate_rewrite_rules eingebunden, um eine neue Rewrite-Regel wie folgt hinzuzufügen:

 /** * Adds rewrite rule for template variation paramater */ function gtp_add_variation_rewrite_rules() { global $wp_rewrite; // Rewrite rule with (v)ariation parameter $new_rules['products/(.+?)/variation/([0-9]*)/?$'] = 'index.php?post_type=products&products=' . $wp_rewrite->preg_index( 1 ) . '&variation=' . $wp_rewrite->preg_index( 2 ); // Add new rewrite rules to rewrite rules array $wp_rewrite->rules = $wp_rewrite->rules + $new_rules; return $wp_rewrite->rules; } add_action( 'generate_rewrite_rules', 'gtp_add_variation_rewrite_rules' ); 

Wenn ich meine Umschreibregeln $wp_rewrite->rules sehe ich die folgende Regel am Ende der Ausgabe von $wp_rewrite->rules array hinzugefügt:

 [products/(.+?)/variation/([0-9]*)/?$] => index.php?post_type=products&products=$matches[1]&variation=$matches[2] 

Das Problem

Aber wenn ich die Seite www.website.com/products/product-x/variation/1/ : www.website.com/products/product-x/variation/1/ ich einen 404.

Das Seltsame ist, dass es auf meiner XAMPP-localhost-Kopie der Live-Site funktioniert, aber nicht auf der Live-Site selbst. Könnte das ein serverbezogenes Problem sein? Oder eine andere Rewrite-Regel (aber das sollte meiner Meinung nach kein Problem sein, da sich die Regel am Ende des Rewrite-Regel-Arrays befindet)

Zusatzinformation:

Ich habe meine Permalink-Struktur (unter Einstellungen -> Permalinks) auf die benutzerdefinierte Struktur "/%category%/%postname%/" .

Meine .htaccess Datei sieht so aus:

 # BEGIN WordPress  RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L]  # END WordPress 

Solutions Collecting From Web of "Benutzerdefinierte Rewrite-Regel ignoriert"

Die Rewrite-Regeln sind korrekt, aber da Sie das $wp_rewrite direkt $wp_rewrite , haben Sie nicht den Vorteil, dass Sie die Regel mit add_rewrite_rules oben im Stack add_rewrite_rules .

Sie befinden sich auf dem richtigen Weg mit der Position der Regel im Array, aber die Regeln oben werden zuerst überprüft, und die erste Übereinstimmung wird verwendet.

Ersetzen Sie Ihre zwei functionen mit dem folgenden Code sollte die Abfrage_var und die Rewrite-Regel + Positionierung.

 /** * Adds rewrite rule for template variation paramater */ function gtp_add_variation_rewrite_rules() { add_rewrite_tag( '%variation%', '([0-9]*)' ); add_rewrite_rule( 'products/(.+?)/variation/([0-9]*)/?$', 'index.php?post_type=products&products=$matches[1]&variation=$matches[2]', 'top' ); } add_action( 'init', 'gtp_add_variation_rewrite_rules' );