これは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つの重要なことです:
私はWordpressのすぐに使えるパーマリンク機能と戦っていたことに気づいたのですが、振り返ってみると複雑な[不要な]カスタムパーマリンク構造(例えばexample.com/recipes/513/lunch/sandwich/
)を作成しています。私の推論は、投稿IDはパフォーマンス上の理由からURLに含まれるべきであるということです(スラッグとは対照的ですが、WPの場合は一致が遅くなる可能性があります)。私はこれが可能であるかもしれないことを想像しました、しかしトラブルの価値がないかもしれません。代わりに、私は私のカスタムパーマリンクのものを切り取って、ちょうどWPを解決させてください、例えばexample.com/recipes/lunch/sandwich/
- これはまさに期待通りに動作します。 'hierarchical' => true
を設定するのを忘れないでください、そして、世界はあなたのパーマリンクです。
結論
私がやろうとしていたことをやろうとするなら、それは可能かもしれませんが、404エラーを避けるためにカスタムパーマリンク構造を適切に設定する必要があります(私の最初の問題)。今のところ、標準的なWP階層型パーマリンク機能を使い続けるつもりです。
私自身の質問に答えて
Wordpressのパーマリンク構造はカスタムタイプ、例えばexample.com/recipes/lunch/sandwich/ 'hierarchy' => trueを設定した場合、これは予想通りに機能します。
私が最初にやろうとしていたことは、実行するのが不必要に難しく、404エラーを避けるためにカスタムパーマリンク構造を正しく設定することを必要とします。標準のWordpress階層型パーマリンク機能を使用することをお勧めします。