2012-03-30 9 views
0

Ich habe endlich meine Permalinks arbeiten für benutzerdefinierte Beitragstypen und Taxonomien mit `a helper class.Wordpress Rewrite Regeln und Regex

Meine benutzerdefinierte Beitragstyp ist "Menü" und meine Taxonomie ist "menutype".

Ich schrieb die folgende Umschreibungs:

function custom_rewrite($wp_rewrite) { 
    $feed_rules = array(
     'menu/salads/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1), 
     'menu/hotboxes/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1), 
     'menu/wraps/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1), 
     'menu/sauces/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1), 
     'menu/soups/(.+)' => 'index.php?menu=' . $wp_rewrite->preg_index(1), 
     '(.+)/([^/]+)(/[0-9]+)?/?$' => 'index.php?menutype=' . $wp_rewrite->preg_index(2) 
    ); 

     $wp_rewrite->rules = $feed_rules + $wp_rewrite->rules; 
    } 
    // refresh/flush permalinks in the dashboard if this is changed in any way 
    add_filter('generate_rewrite_rules', 'custom_rewrite'); 

Die einzige Sache ist, möchte ich nicht die Taxonomie codieren (dh Menü/Soßen/Menü/hotboxes) in meine Rewrite-Regeln, wie die Bedingungen ändern könnten (aber sie werden immer Kleinbuchstaben sein)

ich habe versucht, die folgenden:

'menu/([^/]+)/(.+)' 

Und auch:

'menu/([a-z]+)/(.+)' 

Aber keiner funktionierte.

+0

Müssen Sie die erste Referenz speichern (was folgt unmittelbar auf 'menu /')? Wenn nein, entfernen Sie die Parens. Wenn ja, verwenden Sie das richtige Argument für preg_index? – Madbreaks

+0

Ah das funktioniert total! Kannst du es einfach als Antwort schreiben, damit ich es überprüfen kann? Danke – redconservatory

+0

Warum ** funktioniert das Entfernen der Parans? – redconservatory

Antwort

1

Wenn Sie die Referenz zu dem, was folgt, nicht benötigen menu/, dann entfernen Sie die Parens dort, z.

menu/[^/]+/(.+) 

Wenn Sie die Referenz benötigen, stellen Sie sicher, dass Sie das korrekte int-Argument an preg_index übergeben.

Zum "warum funktioniert das Entfernen der Parens", denn einschließlich der Parens um die erste Gruppe [^/]+ erstellt einen Rückverweis auf, was dort übereinstimmt. Also, wenn Sie preg_index(1) anrufen, fragen Sie nach dem ersten Spiel, wenn das, was Sie wollen, ist das 2. Spiel .+. Sie könnten auch 2 an preg_index übergeben, um anzuzeigen, dass Sie die 2. übereinstimmende Gruppe möchten ... aber wenn Sie die erste Übereinstimmung nicht benötigen, ist es nur verschwendeter Aufwand, um die Referenz überhaupt zu erstellen.