Non dovrebbe essere facile ?! Permalink tipo di posta personalizzato / tassonomia personalizzata


11

Quindi questo mi sta facendo impazzire. Ho passato giorni a cercare di risolvere questo problema e non riesco a capire perché sia ​​così difficile poiché sicuramente è una struttura permalink molto comune!

Ho esaminato centinaia di risposte e post e nessuno di loro sembra risolvere il problema.

Voglio semplicemente questa struttura:

mysite.com/custom-post-type/custom-taxonomy-term/post-name

Quindi ottengo il seguente:

mysite.com/literature - all literature posts
mysite.com/literature/fiction - all literature posts with 'fiction' term
mysite.com/literature/fiction/mybook - the post

Ogni volta che provo qualcosa ottengo 404 errori o l'impaginazione non funziona.

Non capisco perché sia ​​così difficile!

Qualsiasi aiuto davvero apprezzato!

Grazie

================================================== ==== ================== INFORMAZIONI SUPPLEMENTARI ==================

Attualmente sto registrando il tipo di post e la tassonomia come segue:

register_post_type('literature',$args);
'rewrite' => array('slug' => 'literature/books','with_front' => false),

register_taxonomy('literature_category',array('literature'), array(
'rewrite' => array( 'slug' => 'literature','with_front' => false ),

Se registro entrambi come "letteratura" ottengo un 404 sulla pagina mysite.com/literature ma questo visualizza il mio permalink come: mysite.com/literature/books/mybook

Dopo aver seguito il consiglio su questa domanda: tipi di post personalizzati, tassonomie e permalink

Ho aggiunto questo alle mie funzioni:

function filter_post_type_link($link, $post) {
    if ($post->post_type != 'literature')
        return $link;

    if ($cats = get_the_terms($post->ID, 'literature_category'))
        $link = str_replace('%literature_category%', array_pop($cats)->slug, $link);
    return $link;
}
add_filter('post_type_link', 'filter_post_type_link', 10, 2);

E ho cambiato il mio tipo di post in 'slug' => 'literature/%literature_category%' E ho cambiato la mia tassonomia in'slug' => 'literature'

Funziona benissimo, tranne per il fatto che l' mysite.com/literatureimpaginazione non funziona, quindi ricevo un errore 404 sul seguente URL:

mysite.com/literature/page/2/


Per curiosità, cosa hai provato finora?
Matthew Boynes,

Questa risposta mi ha dato il più vicino - wordpress.stackexchange.com/questions/5308/… - ma poi non ha funzionato con l'impaginazione e neanche il plugin suggerito ha funzionato
fxfuture

Bello, felice di averlo chiesto, mi ha fatto risparmiare un po 'di tempo!
Matthew Boynes,

Risposte:


6

Segui i consigli su questa domanda come hai già fatto, ma aggiungi questo al tuo codice:

add_action( 'generate_rewrite_rules', 'fix_literature_category_pagination' );
function fix_literature_category_pagination( $wp_rewrite ) {
    unset($wp_rewrite->rules['literature/([^/]+)/page/?([0-9]{1,})/?$']);
    $wp_rewrite->rules = array(
        'literature/?$' => $wp_rewrite->index . '?post_type=literature',
        'literature/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?post_type=literature&paged=' . $wp_rewrite->preg_index( 1 ),
        'literature/([^/]+)/page/?([0-9]{1,})/?$' => $wp_rewrite->index . '?literature_category=' . $wp_rewrite->preg_index( 1 ) . '&paged=' . $wp_rewrite->preg_index( 2 ),
    ) + $wp_rewrite->rules;
}

Infine, vai su Impostazioni> Permalink e premi Salva. Se il problema persiste, salva nuovamente i permalink. A volte sento che devi salvarli due volte, ma chi lo sa. Comunque, fammi sapere come fai a capire. Nota che si applica la risposta n. 1 dell'Informatica: Funziona per me ... ;-)

Dalla terra di TMI ...

Per riferimento, il motivo per cui le pagine non funzionano per impostazione predefinita è che WordPress inserisce una regola di riscrittura per la letteratura /% literature_category% /% book% /% page%, il che ha senso se ci pensi. Quindi i permalink predefiniti hanno queste regole concorrenti in questo ordine:

[literature/([^/]+)/([^/]+)(/[0-9]+)?/?$] => index.php?literature_category=$matches[1]&book=$matches[2]&page=$matches[3]
[literature/([^/]+)/page/?([0-9]{1,})/?$] => index.php?literature_category=$matches[1]&paged=$matches[2]

Tutto quello che stiamo facendo qui è cambiare l'ordine di questi annullando quest'ultimo (possiamo tenerlo dentro, ma poi ogni riscrittura in seguito ha un'altra regex da eseguire al caricamento della pagina) e aggiungerlo all'inizio dell'array.

Curiosità: se hai mai un "libro" intitolato "pagina" e ha più pagine, questo ordine entrerà in conflitto e le pagine successive non funzioneranno!


Accidenti, mi è appena venuto in mente che la mia sintassi era sbagliata qui. Abbastanza divertente, funziona per me e quando lo aggiusto, non funziona. Continuerò a farlo e aggiornerò la mia risposta quando lo
capirò

Grazie per l'aiuto Matthew. L'ho provato e sfortunatamente non ha funzionato. Ho aggiunto ulteriori informazioni alla mia domanda che, si spera, lo spiega meglio!
fxfuture,

1
Ok, mi scuso per la confusione. C'era un po 'di gas cerebrale lì (deve aver avuto alcuni fagioli cerebrali di recente). La mia risposta è stata aggiornata e di nuovo funziona per me. Ricorda di risparmiare sui permalink.
Matthew Boynes,

1
Oh ok, ho visto la tua domanda aggiornata. Quindi non è che / literature / fiction / page / 2 non funziona, è che / literature / page / 2 non funziona, giusto? Se è così, è una soluzione semplice, faremo la stessa cosa a un livello
Matthew Boynes,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.