2012-03-30 16 views
0

最終的に私のパーマリンクはカスタム投稿タイプとタクソノミのために `a helper class 'を使っていました。Wordpressはルールと正規表現を書き換えます

私のカスタムポストタイプは「メニュー」で、分類は「menutype」です。

私は次の書き換えを書いた:

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

唯一のことは、(変更される可能性があり、私は用語としての私の書き換えルールに分類(すなわち、メニュー/ソースの/、メニュー/ hotboxes)をハードコードしないでしたいですしかし、彼らは常に小文字になります)

私は次のことを試してみました:

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

も:

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

しかしどちらも機能しませんでした。

+0

最初のリファレンス( 'menu /'の直後のもの)を保存する必要がありますか?いいえの場合は、括弧を削除します。もしそうなら、preg_indexに正しい引数を使用していますか? – Madbreaks

+0

ああ、完全に動作します!私はそれを確認することができるように答えとして書くことができますか?ありがとうございます – redconservatory

+0

**なぜ**はパラサンの作業を削除しますか? – redconservatory

答えて

1

次のものへの参照が必要ない場合menu/、そこに括弧を削除してください。

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

参照が必要な場合は、正しいint引数をpreg_indexに渡していることを確認してください。

「なぜ括約辞を削除するのか」というのは、最初のグループの括弧を含めて[^/]+はそこに一致するもののバックリファレンスを作成するためです。だからpreg_index(1)に電話すると、最初の試合を頼んでいるときに、実際には第2試合.+があなたの望むところです。 2preg_indexに渡して、2番目に一致するグループが必要であることを示してもかまいませんが、最初の一致が必要ない場合は、まず参照を作成するためにオーバーヘッドが無駄になります。

関連する問題