ここではカスタム投稿タイプのパーマリンクに関するすべての質問を掘り下げましたが、ほとんどはカスタム分類の書き換えの問題か、flush_rewrite_rules()の明らかな欠落のいずれかです。しかし、私の場合、カスタムポストタイプ(分類なし)のみを使用し、階層に設定して(親子関係を割り当てることができます)、属性メタボックスなどの適切な「サポート」などを使用しています。書き換えルールを何千もの方法でフラッシュしました。さまざまなパーマリンク構造を試しました。しかし、子URLは常に404になります!
私はもともと「親」要素と「子」要素に独立したカスタム投稿タイプがあり(p2pを使用)、おそらく「親」グループ化に分類法を使用しても問題はなかったでしょう。しかし、クライアントにとって、ページがそうであるように、管理者に「投稿」が表示されている場合、階層を視覚化するのが最も簡単です:子が親の下に表示され、「-」で始まるシンプルなツリー適切な順序。また、ドラッグアンドドロップで順序を割り当てるためのさまざまな方法を使用できます。分類法(またはp2p)を使用してグループ化すると、管理リストに「投稿」のフラットリストが作成されますが、これは視覚的に明らかではありません。
だから私が望んでいるのは、文字通りコア「ページ」とまったく同じ動作ですが、カスタム投稿タイプです。期待どおりに投稿タイプを登録しましたが、管理者では完全に機能します。各ニュースレター「投稿」に親とmenu_orderを割り当てることができ、編集リストに正しく表示されます。
Spring 2012
— First Article
— Second Article
そして、彼らのパーマリンクが表示され、適切に構築します。実際、構造について何かを変更したり、投稿タイプの登録時に書き換えスラッグを変更したりしても、それらは自動的に正しく更新されるため、何かが機能していることがわかります。
http://mysite.com/parent-page/child-page/ /* works for pages! */
http://mysite.com/post-type/parent-post/child-post/ /* should work? */
http://mysite.com/newsletter/spring-2012/ /* works! */
http://mysite.com/newsletter/spring-2012/first-article/ /* 404 */
http://mysite.com/newsletter/spring-2012/second-article/ /* 404 */
また、階層関係が作成された標準のコア「ページ」もあり、管理画面ではまったく同じように見えますが、実際にはフロントエンドでも機能します(親URLと子URLの両方が正常に機能します)。
私のパーマリンク構造は次のように設定されています:
http://mysite.com/%postname%/
私もこれを試みました(他の多くの答えがそれが必要であることを示しているように思えたので、私の場合は意味がありませんでした):
http://mysite.com/%category%/%postname%/
私の登録CPT引数には以下が含まれます。
$args = array(
'public' => true,
'publicly_queryable' => true,
'show_ui' => true,
'has_archive' => 'newsletter',
'hierarchical' => true,
'query_var' => true,
'supports' => array( 'title', 'editor', 'thumbnail', 'page-attributes' ),
'rewrite' => array( 'slug' => 'newsletter', 'with_front' => false ),
私のカスタム投稿タイプの子供と通常のページの子供の唯一の目に見える違いは、私のCPTがパーマリンク構造の最初にスラッグを持ち、その後に親/子スラッグが続くことです(ページは親/子スラッグで始まり、 「プレフィックス」なし)。なぜこれが物事を汚すのか、私にはわかりません。多くの記事は、これがまさにそのような階層的なCPTパーマリンクの振る舞いを示しているように見えます-しかし、私のものはうまく形成されていますが、動作しません。
また、その404ページのquery_varsを調べると困惑します。子ページを「見つける」ためのWPの正しい値が含まれているように見えますが、何かが機能していません。
$wp_query object WP_Query {46}
public query_vars -> array (58)
'page' => integer 0
'newsletter' => string(25) "spring-2012/first-article"
'post_type' => string(10) "newsletter"
'name' => string(13) "first-article"
'error' => string(0) ""
'm' => integer 0
'p' => integer 0
'post_parent' => string(0) ""
'subpost' => string(0) ""
'subpost_id' => string(0) ""
'attachment' => string(0) ""
'attachment_id' => integer 0
'static' => string(0) ""
'pagename' => string(13) "first-article"
'page_id' => integer 0
[...]
私は、12を含むさまざまなテーマでこれを試しましたが、それは単に私の一部に欠けているテンプレートがないことを確認するためです。
Rewrite Rules Inspectorを使用すると、次のようなURLが表示されます:http : //mysite.com/newsletter/spring-2012/first-article/
newsletter/(.+?)(/[0-9]+)?/?$
newsletter: spring-2012/first-article
page:
(.?.+?)(/[0-9]+)?/?$
pagename: newsletter/spring-2012/first-article
page:
別のインスペクターページにどのように表示されるか:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
この書き換え出力により、次の「非プリティ」パーマリンクが機能すると信じられます。
http://mysite.com/?newsletter=spring-2012&page=first-article
404ではありませんが、子ではなく親CPTアイテム「ニュースレター」を表示します。リクエストは次のようになります。
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
列に衝突はありません。