Tipo de Postagem Personalizada Slug / Page Slug Conflict - Evita o uso de slug reservado no salvamento da página?

12

Eu tenho um tipo de portfólio personalizado (portfólio de slug) 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: example.com/portfolio, o tema pensa que estou querendo usar a página de arquivo de tipo de postagem personalizada, não minha página criada no editor.

Posso de alguma forma "reservar" o portfólio de slug quando as páginas são salvas para ter certeza de que ele nunca será usado, talvez renomeado para portfolio-page?

Meu projeto usa os métodos descritos neste tutorial. Aqui está o conflito a que estou me referindo:

  

"Além de ter que corrigir o código, há outro problema aqui   você não pode chamar sua lesma de página da mesma maneira que seu tipo de postagem personalizado   lesma. Pense no seu slug de tipo de postagem personalizado como uma palavra-chave reservada;   no entanto, você pode transformar o título da sua página no mesmo nome da sua   Slug tipo de pós personalizado apenas enquanto sua lesma de página é algo   diferente." -    enlace

Obrigado por qualquer conselho!

    
por hhins 19.10.2011 / 16:50

3 respostas

13

Os seguintes 2 filtros permitem que você conecte quando o WordPress verifica o slug e são encontrados na função wp_unique_post_slug () no arquivo wp-includes / post.php.

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

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

Ao retornar "true", você está dizendo ao WordPress que este slug é ruim, então o WordPress adiciona um sufixo, assim como faria se você estivesse tentando um apelido / slug que já tenha sido 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;
}
    
por Rachel Carden 10.03.2012 / 22:49
1

Crie uma página com um slug de 'portfolio' e torne-a 'Privada'. Ele será escondido do público ao reservar o slug de outro uso.

    
por Max Yudin 08.03.2012 / 12:26
1

Surgiu exatamente esse problema ao investigar um problema de paginação. Temos uma homepage de notícias (slug "news") e a paginação estava falhando ... as tentativas de acessar / news / page / 2 / sempre resultaram em "404 - Not Found".

O problema foi que nosso tipo personalizado de Notícias também recebeu o slug "news". Ao alterar o último (por exemplo, para "news_archive"), o problema foi corrigido. Isso deixou as referências originais do URL de notícias inalteradas. Alterar o slug da página inicial do News também funcionou, mas todos os URLs incorporariam o slug alterado.

    
por Ross 16.08.2013 / 01:26