Saya telah menggali setiap pertanyaan di sini pada permalink jenis posting kustom, tetapi sebagian besar tampaknya merupakan masalah dengan penulisan ulang taksonomi kustom, atau hilangnya flush_rewrite_rules () yang jelas tidak ada. Tetapi dalam kasus saya, saya hanya menggunakan jenis posting khusus (tanpa taksonomi), diatur menjadi hierarki (sehingga saya dapat menetapkan hubungan orang tua-anak), dengan "dukungan" yang tepat untuk atribut metabox, dll, dll. Saya Sudah menulis ulang aturan ribuan cara yang memerah. Saya sudah mencoba struktur permalink yang berbeda. Tetapi URL anak selalu menghasilkan 404!
Saya awalnya memiliki jenis pos kustom independen untuk elemen "induk" dan "anak" (menggunakan p2p), dan saya mungkin tidak akan kesulitan menggunakan taksonomi untuk pengelompokan "parental" - Saya tahu itu akan secara semantik lebih akurat. Tetapi untuk klien, akan lebih mudah bagi mereka untuk memvisualisasikan hierarki ketika "posting" ditampilkan di admin seperti halaman: pohon sederhana di mana anak-anak muncul di bawah orangtua, diawali dengan "-", dan di pesanan yang tepat. Juga, berbagai metode untuk menetapkan pesanan melalui drag-n-drop dapat digunakan. Pengelompokan melalui taksonomi (atau p2p) menghasilkan daftar "posting" datar dalam daftar admin, yang sama sekali tidak jelas secara visual.
Jadi apa yang saya kejar secara harfiah adalah perilaku yang sama persis dengan inti "halaman", tetapi dengan jenis posting kustom saya. Saya telah mendaftarkan jenis posting seperti yang diharapkan, dan di admin berfungsi dengan baik - Saya dapat menetapkan orangtua dan menu_order untuk setiap "posting" buletin, mereka muncul dengan benar di daftar edit:
Spring 2012
— First Article
— Second Article
Dan permalink mereka tampaknya dibangun dengan benar. Bahkan, jika saya mengubah apa pun tentang struktur, atau bahkan mengubah slug penulisan ulang ketika mendaftarkan jenis posting, mereka secara otomatis memperbarui dengan benar, jadi saya tahu ada sesuatu yang berfungsi:
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 */
Saya juga memiliki "halaman" inti standar dengan hubungan hierarkis dibuat, dan mereka terlihat sama saja di admin, tetapi sebenarnya juga berfungsi di front-end (baik URL induk maupun URL anak berfungsi dengan baik).
Struktur permalink saya disetel ke:
http://mysite.com/%postname%/
Saya juga telah mencoba ini (hanya karena begitu banyak jawaban lain yang mengindikasikan bahwa itu diperlukan, meskipun tidak masuk akal dalam kasus saya):
http://mysite.com/%category%/%postname%/
Daftar CPT saya termasuk:
$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 ),
Satu-satunya perbedaan yang terlihat antara anak - anak jenis posting kustom saya dan anak - anak halaman normal , adalah bahwa CPT saya memiliki siput di awal struktur permalink, kemudian diikuti oleh siput induk / anak (di mana halaman baru dimulai dengan siput induk / anak, tidak ada "awalan"). Mengapa ini akan mengacaukan segalanya, saya tidak tahu. Banyak artikel yang mengindikasikan bahwa ini adalah bagaimana seharusnya permalink CPT hirarkis seperti itu berperilaku - tetapi milik saya, meskipun dibentuk dengan baik, tidak berfungsi.
Yang juga membingungkan saya adalah ketika saya memeriksa query_vars untuk halaman 404 - mereka tampaknya mengandung nilai yang benar untuk WP untuk "menemukan" halaman anak saya, tetapi ada sesuatu yang tidak berfungsi.
$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
[...]
Saya sudah mencoba ini dengan berbagai tema, termasuk dua puluh dua belas, hanya untuk memastikan itu bukan template yang hilang pada bagian saya.
Menggunakan Inspektur Aturan Tulis Ulang, inilah yang muncul untuk 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:
bagaimana ditampilkan di halaman inspektur lain:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Output penulisan ulang ini akan membuat saya percaya bahwa permalink "tidak cantik" berikut ini akan berfungsi:
http://mysite.com/?newsletter=spring-2012&page=first-article
Itu tidak 404, tetapi itu menunjukkan item CPT induk "buletin", bukan anak. Permintaannya terlihat seperti ini:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
kolom.