Ho esaminato tutte le domande qui sui permalink di tipo di post personalizzato, ma la maggior parte sembra essere o problemi con riscritture di tassonomia personalizzate o l'evidente mancanza di flush_rewrite_rules (). Ma nel mio caso, sto usando solo un tipo di post personalizzato (senza tassonomia), impostato su gerarchico (in modo da poter assegnare relazioni genitore-figlio), con il "supporto" adeguato per gli attributi metabox, ecc. I ho arrossito riscrivere le regole in mille modi diversi. Ho provato diverse strutture permalink. Ma gli URL figlio generano sempre 404!
Inizialmente avevo tipi di post personalizzati indipendenti per gli elementi "parent" e "child" (usando p2p) e probabilmente non avrei avuto problemi a usare una tassonomia per il raggruppamento "parentale" - so che sarebbero semanticamente più accurati. Ma per il cliente, è più facile per loro visualizzare la gerarchia quando i "post" sono visualizzati nell'amministratore proprio come le pagine sono: un semplice albero in cui i bambini appaiono sotto il genitore, con il prefisso "-", e nel ordine corretto. Inoltre, è possibile utilizzare vari metodi per assegnare l'ordine tramite il trascinamento della selezione. Il raggruppamento tramite tassonomia (o p2p) si traduce in un elenco semplice di "post" negli elenchi di amministrazione, che non è semplicemente visivamente ovvio.
Quindi quello che sto cercando è letteralmente lo stesso identico comportamento delle "pagine" principali, ma con il mio tipo di post personalizzato. Ho registrato il tipo di post esattamente come previsto, e nell'amministratore funziona perfettamente: posso assegnare un genitore e un menu_order per ogni "post" della newsletter, che appaiono correttamente negli elenchi di modifica:
Spring 2012
— First Article
— Second Article
E i loro permalink sembrano essere costruiti correttamente. In effetti, se cambio qualcosa sulla struttura, o addirittura modifico la lumaca di riscrittura quando registro il tipo di post, si aggiornano automaticamente correttamente, quindi so che qualcosa funziona:
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 */
Ho anche "pagine" di base standard con relazioni gerarchiche create e hanno lo stesso aspetto nell'amministratore, ma in realtà funzionano anche sul front-end (entrambi gli URL padre e figlio funzionano bene).
La mia struttura permalink è impostata su:
http://mysite.com/%postname%/
Ho anche tentato questo (solo perché molte altre risposte sembravano indicare che era necessario, anche se nel mio caso non aveva senso):
http://mysite.com/%category%/%postname%/
I miei argomenti di registro CPT includono:
$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 ),
L'unica differenza visibile tra i miei figli di tipo di post personalizzati e la pagina normale figli di , è che il mio CPT ha la lumaca all'inizio della struttura del permalink, quindi seguita dalle lumache padre / figlio (dove le pagine iniziano con le lumache padre / figlio, nessun "prefisso"). Perché questo rovinerebbe le cose, non lo so. Molti articoli sembrano indicare che questo è esattamente come dovrebbero comportarsi tali permalink CPT gerarchici, ma il mio, sebbene ben formato, non funziona.
Ciò che mi sconcerta anche è quando esamino query_vars per quella pagina 404: sembrano contenere i valori corretti per WP per "trovare" le mie pagine figlio, ma qualcosa non funziona.
$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
[...]
Ho provato questo con vari temi, tra cui venti dodici, solo per essere sicuro che non sia un modello mancante da parte mia.
Usando Rewrite Rules Inspector, questo è ciò che appare per l'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:
come viene visualizzato su un'altra pagina dell'ispettore:
RULE:
newsletter/(.+?)(/[0-9]+)?/?$
REWRITE:
index.php?newsletter=$matches[1]&page=$matches[2]
SOURCE:
newsletter
Questo output di riscrittura mi indurrebbe a credere che il seguente permalink "non carino" avrebbe funzionato:
http://mysite.com/?newsletter=spring-2012&page=first-article
Non 404, ma mostra l'elemento CPT padre "newsletter", non il figlio. La richiesta è simile alla seguente:
Array
(
[page] => first-article
[newsletter] => spring-2012
[post_type] => newsletter
[name] => spring-2012
)
post_name
colonna.