web-dev-qa-db-ja.com

Wordpressは、パラメータのカスタムリライトルールの競合について404を返します

私はここで 答えのステップに従ってきました そしてそれは不思議に働きました。

しかし、私の問題はこの部分にあります、

元の

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules['custom-post-type-base/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment
    $newRules['custom-post-type-base/(.+)/?$']                = 'index.php?taxonomy_name=$matches[1]'; 

    return array_merge($newRules, $rules);
} 

私のバージョン:

add_filter('rewrite_rules_array', 'mmp_rewrite_rules');
function mmp_rewrite_rules($rules) {
    $newRules  = array();
    $newRules['custom-post-type-base/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type=$matches[3]'; 
    $newRules['custom-post-type-base/(.+)/?$']           = 'index.php?custom_taxonomy=$matches[1]';

    return array_merge($newRules, $rules);
} 

私のタクソノミーには2つのレベルがあるので、2番目のパラメーター(custom-post-type-base/(.+)/[here]/)がカスタム投稿かカスタム分類かを認識できませんでした。親の分類法.

サンプルURLを参照してください。

"/custom-post-type-base/taxonomy-parent/taxonomy-child/single-custom-post-type/"
/*works as single custom post*/

"/custom-post-type-base/taxonomy-parent/taxonomy-child/"
/*works as custom taxonomy page*/

"/custom-post-type-base/taxonomy-parent/"
/*works as custom taxonomy page too*/

"/custom-post-type-base/taxonomy-parent/single-custom-post-type/"
/*returns a 404*/
1
reikyoushin

あなたが持っている:

  • 第5部にある投稿を処理する書き換え規則
  • 分類法の部分を処理するための書き換え規則

2番目または3番目の部分にある投稿を処理するための書き換え規則が上記のリストに含まれていないため、404が返されます。

この書き換え規則に従うと、

$newRules['basename/(.+)/(.+)/(.+)/(.+)/?$'] = 'index.php?custom_post_type_name=$matches[4]'; // my custom structure will always have the post name as the 5th uri segment

そして常識を使ってそれを少し修正してください。

  • basename /(.+)/(.+)/(.+)/(.+)/?$ ....

    custom_post_type_name = $が一致します[4]

    //私のカスタム構造は常にポスト名を5番目のuriセグメントとして持つ

  • basename /(.+)/(.+)/(.+)/?$。 ...

    custom_post_type_name = $が一致します[3]

    //私のカスタム構造は常に投稿名を4番目のuriセグメントにします。

  • basename /(.+)/(.+)/?$ ....

    custom_post_type_name = $が一致します[2]

    //私のカスタム構造は常に投稿名を3番目のuriセグメントにします

既存のルールの前にこれらを昇順に配置し、必要な回数だけ繰り返します。

1
Tom J Nowell