Tipo di messaggio personalizzato Slug / Conflitto di lumache di pagina - Impedisci l'uso di lumache riservate sul salvataggio della pagina?


13

Ho un tipo di post personalizzato di portfolio (portfolio di lumache) nel mio tema e tutto funziona bene tranne una cosa. Quando le persone creano una pagina con una lumaca di portfolio, ad esempio: example.com/portfolio, il tema pensa che io voglia usare la pagina di archivio del tipo di post personalizzato, non la mia pagina creata nell'editor.

Posso in qualche modo "riservare" il portfolio di lumache quando le pagine vengono salvate per essere sicuro che non vengano mai utilizzate, magari rinominate in portfolio-page?

Il mio progetto utilizza i metodi descritti in questo tutorial, ecco il conflitto a cui mi riferisco:

"Oltre a dover patchare il codice, qui c'è un altro problema in cui non puoi chiamare il tuo slug Pagina come lo stesso tipo di post personalizzato. Pensa al tuo tipo di post personalizzato come una parola chiave riservata; tuttavia, puoi fare il titolo della tua Pagina ha lo stesso nome del tuo slug di tipo di post personalizzato purché il tuo slug di Page sia qualcosa di diverso. " - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

Grazie per qualsiasi consiglio!


Un'opzione che vedo sarebbe quella di rimuovere questo da register_post_type () init: 'rewrite' => array ('slug' => 'portfolio', 'with_front' => true), e basta impostare 'rewrite' => false e vivi solo con gli orribili "singoli" elementi del portafoglio.
hhins,

Vota la tua domanda perché anche io voglio sapere la risposta! Ho lavorato con post personalizzati per un paio di volte, ma non l'ho mai notato, e ora dopo aver letto la tua domanda, l'ho provato. Hai ragione, WordPress si confonde qui!
Rutwick Gangurde,

Risposte:


13

I seguenti 2 filtri ti consentono di collegarti quando WordPress controlla lo slug e si trovano nella funzione wp_unique_post_slug () nel file wp-Includes / post.php.

Ci sono 2 filtri, uno per i messaggi gerarchici e uno per i non gerarchici. Il filtro gerarchico fornisce l'ID per il genitore post, quindi se $ post_parent è 0, sai che si tratta di un post "base".

I filtri passano anche $ post_type se si desidera aggiungere tipi di post specifici alla propria logica.

Restituendo "vero", stai dicendo a WordPress che questa lumaca è cattiva, quindi WordPress aggiunge un suffisso, proprio come farebbe se ci stessi provando un nome post / lumaca che è già stato preso.

add_filter( 'wp_unique_post_slug_is_bad_hierarchical_slug', 'portfolio_is_bad_hierarchical_slug', 10, 4 );
function portfolio_is_bad_hierarchical_slug( $is_bad_hierarchical_slug, $slug, $post_type, $post_parent ) {
    if ( !$post_parent && $slug == 'portfolio' )
        return true;
    return $is_bad_hierarchical_slug;
}

add_filter( 'wp_unique_post_slug_is_bad_flat_slug', 'portfolio_is_bad_flat_slug', 10, 3 );
function portfolio_is_bad_flat_slug( $is_bad_flat_slug, $slug, $post_type ) {
    if ( $slug == 'portfolio' )
        return true;
    return $is_bad_flat_slug;
}

Per qualche motivo, sto ancora affrontando lo stesso problema
Tan-007,

1

Crea una pagina con una lumaca di "portfolio" e rendila "Privata". Sarà nascosto al pubblico quando si riserva la lumaca da un ulteriore utilizzo.


1

È venuto incontro esattamente a questo problema quando si studiava un problema di impaginazione. Abbiamo una homepage di notizie ("notizie" di lumache) e l'impaginazione non ha funzionato ... i tentativi di accedere a / news / page / 2 / hanno sempre portato a "404 - Not Found".

Il problema si è rivelato che al nostro tipo personalizzato di News era stata anche data la "notizia" della lumaca. Modificando quest'ultimo (ad esempio in "news_archive") il problema è stato risolto. Ciò ha lasciato invariati i riferimenti URL delle notizie originali. Anche la modifica della lumaca della home page di Notizie ha funzionato, ma tutti gli URL incorporerebbero la lumaca modificata.

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.