Conflito de slug de tipo de postagem personalizada / de slug de página - Evitar o uso de slug reservado no salvamento da página?

13

Eu tenho um tipo de post personalizado de portfólio (portfólio de lesmas) no meu tema e tudo está funcionando bem, exceto uma coisa. Quando as pessoas criam uma página com um monte de portfólio, por exemplo: exemplo.com/portfolio, o tema pensa que estou querendo usar a página de arquivo personalizada do tipo de postagem, não a minha página criada no editor.

De alguma forma, posso "reservar" o portfólio de lesmas quando as páginas são salvas para garantir que nunca sejam usadas, talvez renomeadas para página de portfólio?

Meu projeto usa os métodos descritos neste tutorial, eis o conflito ao qual estou me referindo:

"Além de precisar corrigir o código, há outra captura aqui: você não pode chamar a slug de sua página da mesma maneira que a slug de tipo de postagem personalizada. Pense na slug de tipo de postagem personalizada como uma palavra-chave reservada; no entanto, você pode criar o título da sua página com o mesmo nome que a sua lesma de tipo de postagem personalizada, desde que a lesma da sua página seja algo diferente ". - http://wp.tutsplus.com/tutorials/custom-post-type-pagination-chaining-method/

Obrigado por qualquer conselho!

hhins
fonte
Uma opção que vejo seria removê-la do register_post_type () init: 'rewrite' => array ('slug' => 'portfolio', 'with_front' => true) e apenas definir 'rewrite' => false e basta viver com os feios itens "únicos" do portfólio.
Hhins 19/10/11
Vote na sua pergunta, já que eu quero saber a resposta! Já trabalhei com postagens personalizadas algumas vezes, mas nunca percebi isso e, depois de ler sua pergunta, tentei. Você está certo, o WordPress fica confuso aqui!
Rutwick Gangurde 19/10/11

Respostas:

13

Os 2 filtros a seguir permitem conectar quando o WordPress verifica a lesma e são encontrados na função wp_unique_post_slug () no arquivo wp-includes / post.php.

Existem 2 filtros, um para postagens hierárquicas e outro para não hierárquicos. O filtro hierárquico fornece o ID para o pai da postagem, portanto, se o $ post_parent for 0, você saberá que essa é uma postagem "base".

Os filtros também passam o $ post_type se você deseja adicionar tipos de postagem específicos à sua lógica.

Ao retornar "true", você está dizendo ao WordPress que essa lesma é ruim, então o WordPress adiciona um sufixo, assim como faria se você estivesse tentando usar um nome / lesma de postagem que já foi usado.

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;
}
Rachel Carden
fonte
Por alguma razão eu ainda estou enfrentando o mesmo problema
Tan-007
1

Crie uma página com um slug de 'portfólio' e torne-a 'Privada'. Ele ficará escondido do público ao reservar a lesma para uso posterior.

Max Yudin
fonte
1

Me deparei exatamente com esse problema ao investigar um problema de paginação. Temos uma página inicial de Notícias (slug "news") e a paginação falhou ... tentativas de acessar / news / page / 2 / sempre resultavam em '404 - Não encontrado'.

O problema acabou sendo que nosso tipo personalizado de Notícias também recebeu a "notícia" lesma. Alterando o último (por exemplo, para "news_archive"), o problema foi corrigido. Isso deixou inalteradas as referências originais do URL de notícias. Alterar a lesma da página inicial do News também funcionou, mas todos os URLS incorporariam a lesma alterada.

Ross
fonte