Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Olá Nura, tudo bem?
Já tentou alterar a estrutura de permalink nas Configurações para apenas “nome do post” (mesmo que esteja usando CPTs deve funcionar) ?
Abraços
Criador do tópico
Nura
(@archer-master)
Bom dia, e muito obrigado por tentar me ajudar. A links permanentes do post está assim nas configurações,só com o /%postname%/, teria alguma forma de remover o id do post caso não exista a category do custom post type, faz 3 semanas que estou tentando resolver o problema, procurei em vários tópicos de outros sites e nada.
queria fazer igual esse site, dá uma olhada por gentileza.
quando tiver a category a url fica assim.
www.animeunited.com.br/noticias/anime/hajimete-no-gal-ganha-imagem/
e quando não tiver a category exibi
www.animeunited.com.br/noticias/avex-pictures-proibe-vendas-de-seus-titulos-fora-do-japao/
Tem como eu fazer assim, porque só conseguir deixar com o id do post caso não tenha category marcada.
Agradeço
-
Esta resposta foi modificada 8 anos atrás por
Nura.
-
Esta resposta foi modificada 8 anos atrás por
Nura.
-
Esta resposta foi modificada 8 anos atrás por
Nura.
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Nura, se o permalink está correto, então não deveria estar aparecendo o ID.
Verifica por favor se o SLUG do post está como você quer. As vezes, quando você cria um post (enquanto o permalink ainda é ID) o slug é criado como um número. Aí quando você muda a estrutura de permalink para postname, o postname (slug) se mantem como um número.
Para alterar um slug, basta ir abaixo do título do post e salvar novamente.
P.S.: estou considerando que você não está executando o código que postou no começo, então por favor, comente-o ou remova-o, se for o caso.
Criador do tópico
Nura
(@archer-master)
O slug está certo, o problema é que eu queria uma solução pra retirar o id do post caso não tivesse marcado uma categoria.
Eu queria remover o id do post caso não houvesse a categoria marcada, o problema é que a condição else não tá funcionando.
Fica assim quando não tem categoria
http://localhost/wordpress/noticias/1/ola-mundo/
Eu queria deixar a url assim: sem o ID do post quando não houver categoria selecionada
http://localhost/wordpress/noticias/ola-mundo/
Cpt Notícias com Categoria: Tech
http://localhost/wordpress/noticias/tech/amd-ryzen-em-marco/
Código completo do custom post type:
http://pastebin.com/qV8mGx0V.
-
Esta resposta foi modificada 8 anos atrás por
Nura.
-
Esta resposta foi modificada 8 anos atrás por
Nura.
-
Esta resposta foi modificada 8 anos atrás por
Nura.
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Agora com o código do CPT fica mais fácil de entender.
Antes de tudo, tenta tirar o filtro post_type_link e vê se funciona.
Não sei se o WordPress trata o %category% no slug sozinho.
Estou chutando, mas uma possibilidade é que o WordPress troca o %category% pela categoria quanto existe e quando não existe o filtro está trocando %category% pelo ID do post…
Uma confusão…
Então tenta tirar o filtro e vê se funciona. Se não funcionar, então vamos fazer o seguinte:
1 – Troca para ‘noticias/%category_if_exist%’
(category_if_exist pode ser qualquer coisa que o WordPress não usa)
2 – No filtro post_type_link vamos fazer o seguinte:
add_filter( 'post_type_link', 'my_post_type_link2', 99, 2 );
function my_post_type_link2( $post_link, $post = null ) {
if ( ! empty( $post ) && $post->post_type === "noticias" ) {
$category = get_the_terms( $post, 'category' );
$category_if_exist = '';
if ( $category ) {
$category_if_exist = $category[0]->slug;
}
$post_link = str_replace( '%category_if_exist%', $category_if_exist, $post_link );
}
return $post_link;
}
E é isso! Acho que vai funcionar (não testei aqui, mas qualquer problema, me avise). Não esqueça de salvar os permalinks novamente para atualizar.
Criador do tópico
Nura
(@archer-master)
Não funcionou, teria que ser com category mesmo pois quando eu busco pelo custom post type noticias/tech ele não aparece. Error 404 quando uso category_if_exist
com o category funciona normal o noticias/tech
ficou assim a url sem a categoria
http://localhost/wordpress/noticias//amd-ryzen-em-marco redireciounou para http://localhost/wordpress/noticias/amd-ryzen-em-marco e deu error 404
Só preciso resolver esse problema quando não houver categoria marcada.
-
Esta resposta foi modificada 8 anos atrás por
Nura.
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Você não pode usar barra “/” no tipo de post.
Algo está errado… Não deve existir o tipo de post “noticias/tech”.
Agora se está falando da página de categoria, não iria existir mesmo não.
A URL de categoria seria a mesma dos posts comuns, se estiver usando a mesma taxonomia.
Criador do tópico
Nura
(@archer-master)
Ah, sim, só tô com o problema da url quando não tiver a categoria selecionada pra não mostrar o id.
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
A solução fácil seria ter uma categoria padrão e sempre usá-la quando não tiver outra (Off ou Notícias, por exemplo).
Mas tenta aquele seu código inicial sem a função my_post_type_link2.
Ela basicamente diz:
if ( !empty($post) ) {
Se $post não estiver vazio
$post_type = get_post_type($post->ID);
$post_type é o tipo de post do $post
if($post_type == "noticias") {
Se $post_type for ‘noticias’
$newlink = str_replace('%category%', $post->ID, $post_link);
O $newlink será o link do post, trocando %category% pelo ID do $post.
Como você não quer o ID na URL, não faz sentido.
Criador do tópico
Nura
(@archer-master)
Tentei assim mas sem sucesso
add_filter('post_type_link', 'noticias_permalink', 99, 4);
function noticias_permalink($post_link, $post, $leavename, $sample) {
if ($post->post_type == 'noticias') {
global $post;
$terms = get_the_terms($post->id, 'category');
$term = $terms[0]->slug;
$permalink = str_replace('noticias/%category%', 'noticias' . $term . '', $post_link);
}
return $permalink;
}
Vou deixar como está mesmo, se fosse reescrever a url pra retirar o post id é possível?
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Você testou o que eu disse ali em cima?
Sobre o código novo:
– Não use global $post porque interfere no $post recebido pela função
– Seria bom checar se $terms é falso (sem categoria)
– 'noticias' . $term . ''
não funciona porque falta a barra e não precisa da string vazia no final…
– Ela não retorna nada, se não entrar no IF
O código certo fica assim:
add_filter( 'post_type_link', 'noticias_permalink', 99, 2 );
function noticias_permalink( $post_link, $post ) {
if ( $post->post_type == 'noticias' ) {
$terms = get_the_terms( $post->id, 'category' );
if ( $terms ) {
$post_link = str_replace( 'noticias/%category%', 'noticias', $post_link );
} else {
$post_link = str_replace( 'noticias/%category%', 'noticias/' . $terms[0]->slug, $post_link );
}
}
return $post_link;
}
Criador do tópico
Nura
(@archer-master)
Testei os dois códigos mas também não deu certo, vou deixar com o post->ID mesmo quando não houver categoria.
Agradeço pela ajuda
-
Esta resposta foi modificada 8 anos atrás por
Nura.
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Opa… na verdade meu IF estava ao contrário: você pode testar novamente? 😀
O certo é:
if ( $terms ) {
$post_link = str_replace( 'noticias/%category%', 'noticias/' . $terms[0]->slug, $post_link );
} else {
$post_link = str_replace( 'noticias/%category%', 'noticias', $post_link );
}
Criador do tópico
Nura
(@archer-master)
Moderador
Mário Valney
(@mariovalney)
WordPress Cleric of Fire
Acho que isso acontece porque o WordPress considera que /%category%/ deva estar presente, por isso sugeri usar %category_if_exist% da primeira vez…
Quando eu puder, vou tentar montar esse seu código para ver se consigo reproduzir a situação aqui e sugerir como corrigir.