web-dev-qa-db-ja.com

親/子のカスタム投稿タイプパーマリンク、404ページが見つかりませんエラー

これはfunctions.phpファイルからの抜粋です。

add_action('init', 'create_recipes');
function create_recipes() {
   $recipes_args = array(
       ...some properies...,
       'hierarchical' => false,
       'rewrite' => array('slug' => 'recipes')
       ...maybe more properties...
   }
   register_post_type('recipes',$recipes_args);
}

add_action( 'init', 'recipes_rewrites_init' );
function recipes_rewrites_init(){
    global $wp_rewrite;
    $gallery_structure = 'recipes/%post_id%/%recipe%';
    $wp_rewrite->add_rewrite_tag("%recipe%", '([^/]+)', "recipe=");
    $wp_rewrite->add_permastruct('recipe', $gallery_structure, false);
}

これにより、カスタム投稿タイプ 'recipes'が登録され、パーマリンク構造が設定されるため、次のようになります。

(1) example.com/recipes/394/lunch/

「昼食」ページで、私はおいしい昼食の美徳を称賛します。ここまでは順調ですね。

しかし、「昼食」を「サンドイッチ」、「ハンバーガー」、「サラダ」に細かく分類したい場合はどうすればよいですか(たとえば、「サンドイッチ」ページでランチ、特にサンドイッチについて説明します)。最初に、これらの追加のページを 'recipe'カスタム投稿タイプセクションの下に作成し、それらの親として 'lunch'ページを選択します。これで、は/ presumeを期待しているかもしれません。例えば、

(2) example.com/recipes/513/lunch/sandwich/

ああ、これはと推定されるとしては動作しません - 私たちは404エラーを受け取ります。さて、どうやって 'sandwich'ページにたどり着くのですか?どれどれ...

(3) example.com/recipes/513/sandwich/

それはうまくいきます - でも、サンドイッチページの親スラッグ( 'lunch')をURLの前に置くことを望みました( (2) を参照)。これを解決するには?どこかから始めましょう….

ステップ1

私が知っていることは、'hierarchical' => false'hierarchical' => trueに変更すれば、the_permalink()関数は(望まれるように)(2)のようにパーマリンクを構築するということです。素晴らしいですが、これは (2) で404エラーになります。 create_recipes関数を間違えたか、recipes_rewrites_init関数を十分に実行していない可能性があります。

ステップ2

私は(理論的には)WPパーマリンク機能にフックしてリクエスト/パーマリンクを傍受し、投稿の親スラッグ(もしあれば)を取り出し、投稿のスラッグの直前にドロップすることができると思います。しかし、それはおそらく、私がすでにステップ1で行った結果のパーマリンクを変更するだけです。私が本当に必要なのは、リクエストが正しくルーティングされるようにすることです。

質問

どうやってこれをやるの? WPという既知の方法(つまり、最初のカスタムタイプ設定の既存の機能/オプション)はありますか?

他の考え

私はまた、カスタム分類法を(少なくとも部分的に)投稿の分類の問題を解決するために使用できること、そして役立つプラグインがあることを知っています。ただし、可能であれば、最初はカスタム投稿タイプを使用したいと思います。

ありがとう。


アップデート1

私は今、 "Posts 2 Posts"と呼ばれるプラグインに気づいています。これは、とりわけ、カスタム投稿タイプ間、特に異なるカスタム投稿タイプ間の接続を可能にします。ただし、私の例では、カスタム投稿タイプを1つだけ使用し、異なるカスタム投稿タイプ間の関係を強制するのではなく、自然な親子階層(かなり標準的なWPのように思われる)を目指しています。 。


アップデート2

いくつかのさらなる情報とある種の解決策。これは2つの重要なことです:

  1. カスタム投稿タイプへのカスタムパーマリンク構造の追加はtrickyになります。
  2. カスタム投稿タイプにカスタムパーマリンク構造を追加することは不要になります。

私はWordpressのすぐに使えるパーマリンク機能と戦っていたことに気づいたのですが、振り返ってみると複雑な[不要な]カスタムパーマリンク構造(例えばexample.com/recipes/513/lunch/sandwich/)を作成しています。私の推論は、投稿IDはパフォーマンス上の理由からURLに含まれるべきであるということです(スラッグとは対照的ですが、WPの場合は一致が遅くなる可能性があります)。私はこれが可能であるかもしれないことを想像しました、しかしトラブルの価値がないかもしれません。代わりに、私は私のカスタムパーマリンクのものを切り取って、ちょうどWPを解決させてください、例えばexample.com/recipes/lunch/sandwich/ - これはまさに期待通りに動作します。 'hierarchical' => trueを設定するのを忘れないでください、そして、世界はあなたのパーマリンクです。

結論

私がやろうとしていたことをやろうとするなら、それは可能かもしれませんが、404エラーを避けるためにカスタムパーマリンク構造を適切に設定する必要があります(私の最初の問題)。今のところ、標準的なWP階層型パーマリンク機能を使い続けるつもりです。

4
41st

私自身の質問に答えて

Wordpressのパーマリンク構造はカスタムタイプ、例えばexample.com/recipes/lunch/sandwich/ 'hierarchy' => trueを設定した場合、これは予想通りに機能します。

私が最初にやろうとしていたことは、実行するのが不必要に難しく、404エラーを避けるためにカスタムパーマリンク構造を正しく設定することを必要とします。標準のWordpress階層型パーマリンク機能を使用することをお勧めします。

0
41st