Parece que todos os recursos da Web com base no assunto de remover uma lesma de tipo de postagem personalizada, ou seja,
yourdomain.com/CPT-SLUG/post-name
agora são soluções muito desatualizadas, frequentemente referenciando as instalações anteriores à WP versão 3.5. Um comum é:
'rewrite' => array( 'slug' => false, 'with_front' => false ),
dentro da sua função register_post_type. Isso não funciona mais e é enganoso. Então, pergunto à comunidade no terceiro trimestre de 2018 à beira do WordPress 5 ...
Quais são as maneiras modernas e eficientes de remover o Slug de tipo de postagem do URL de uma postagem de tipo de postagem personalizada dentro do argumento de reescrita ou em qualquer outro lugar?
ATUALIZAÇÃO: Parece haver várias maneiras de forçar isso a trabalhar com regex. Especificamente, a resposta de Jan Beck, você deve estar sempre disposto a monitorar a criação de conteúdo para garantir que não sejam criados nomes de páginas / postagens conflitantes ... No entanto, estou convencido de que essa é uma grande fraqueza no núcleo do WP, onde deve ser tratada por nós. . Como opção / gancho ao criar um CPT ou um conjunto avançado de opções para links permanentes. Por favor, apoiem o bilhete de pista.
Nota de rodapé: Por favor, apoie este ticket trac assistindo / promovendo: https://core.trac.wordpress.org/ticket/34136#ticket
fonte
Respostas:
O código a seguir funcionará, mas você deve ter em mente que os conflitos podem ocorrer facilmente se a lesma do seu tipo de postagem personalizado for igual à página ou lesma da postagem ...
Primeiro, removeremos a lesma do link permanente:
Apenas remover a lesma não é suficiente. No momento, você receberá uma página 404 porque o WordPress espera apenas que postagens e páginas se comportem dessa maneira. Você também precisará adicionar o seguinte:
Basta alterar "eventos" para seu tipo de postagem personalizado e você estará pronto. Pode ser necessário atualizar seus links permanentes.
fonte
2 != count( $query->query )
. Com o nginx, você pode ter $ query-> query comoarray('page' => '', 'name' => '...', 'q' => '...')
. Então @NateAllen, qual é o significado dessa condição?Escreva o seguinte código no registro da taxonomia.
O mais importante que você deve fazer após a alteração do código
Depois de alterar seu documento de taxonomia de tipo de postagem personalizado, tente ir para Configurações> Links permanentes e salve novamente as configurações , caso contrário, a página 404 não será encontrada.
Verifique aqui a melhor solução: http://www.krazzycodes.com/how-to-remove-custom-post-type-taxonomy-base-from-url-in-wordpress/
fonte
Eu tentei descobrir isso há não muito tempo e a resposta curta do que eu sei não é . Não de dentro do argumento de reescrita, pelo menos.
O longa explicação torna-se aparente se você olhar para o código real de
register_post_type
no wp-includes / linha post.php 1454 :Você pode ver o prefixo
$args->rewrite['slug']
da%$post_type%
tag reescrever. Alguém poderia pensar "vamos definir a lesma paranull
então" até que você veja algumas linhas:Você pode ver que a função sempre espera um valor de slug que não esteja vazio e, caso contrário, usa o tipo de postagem.
fonte
Em resposta à minha resposta anterior : é claro que você pode definir o
rewrite
parâmetro aofalse
registrar um novo tipo de postagem e manipular as regras de reescrita da mesma formaVocê pode ver que a
add_permastruct
chamada agora não inclui mais a lesma. Eu testei dois cenários:fonte
Examinando as respostas aqui, acho que há espaço para uma solução melhor que combine algumas coisas que aprendi acima e adicione detecção automática e prevenção de post slugs duplicados.
NOTA: Altere 'custom_post_type' para o seu próprio nome de CPT em todo o meu exemplo abaixo. Existem muitas ocorrências, e um 'localizar / substituir' é uma maneira fácil de capturar todas elas. Todo esse código pode ser encontrado em seu functions.php ou em um plugin.
Etapa 1: desative reescritas no seu tipo de postagem personalizado, definindo reescritas para 'false' quando você registrar a postagem:
Etapa 2: adicione manualmente nossas regravações personalizadas na parte inferior das regravações do WordPress para o nosso custom_post_type
NOTA: Dependendo das suas necessidades, convém modificar as reescritas acima (desativar trackbacks? Feeds ?, etc). Eles representam os tipos 'padrão' de regravações que teriam sido gerados se você não desativasse as regravações na etapa 1
Etapa 3: tornar os links permanentes para o seu post personalizado "bonitos" novamente
NOTA: Você pode parar aqui se não estiver preocupado com a criação de uma postagem conflitante (duplicada) em outro tipo de postagem que criará uma situação em que apenas um deles poderá carregar quando a página for solicitada.
Etapa 4: impedir postagens duplicadas
NOTA: Isso anexará a string '-duplicate' ao final de qualquer lesma duplicada. Este código não pode impedir lesmas duplicadas se elas já existirem antes da implementação desta solução. Certifique-se de verificar as duplicatas primeiro.
Gostaria muito de receber uma resposta de alguém que dê uma chance para ver se funcionou bem para eles também.
fonte
/%category%/%postname%/
. Ao adicionar seu código, as lesmas do CPT parecem OK (embora esteja faltando a barra final) ... e o verificador de conflitos também funciona. Mas o post real resulta em um 404.Você não precisa de tanto código físico. Basta usar o plugin leve:
Possui opções personalizáveis.
fonte
Tive os mesmos problemas aqui e parece não haver movimento no site wordpress. Na minha situação particular, onde para posts únicos, era necessária a estrutura / blog /% postname% /
https://kellenmace.com/remove-custom-post-type-slug-from-permalinks/
terminou em um monte de 404s
Mas, junto com essa abordagem maravilhosa, que não está usando a estrutura de suporte permanente para o post do blog, ela finalmente funciona como charme. https://www.bobz.co/add-blog-prefix-permalink-structure-blog-posts/
Muito obrigado.
fonte
e podemos fazer algumas alterações na função mencionada acima:
para:
para definir o valor correto de post_type.
fonte
Isso funcionou para mim:
'rewrite' => array('slug' => '/')
fonte
Para quem leu isso que teve problemas com publicações secundárias como eu, achei a melhor maneira de adicionar suas próprias regras de reescrita.
O principal problema que eu estava enfrentando era que o WordPress trata o redirecionamento de páginas com 2 níveis (posts filhos) com profundidade um pouco diferente do que com 3 níveis de profundidade (filho de posts filhos).
Isso significa que quando eu tenho / post-type / post-name / post-child / posso usar / post-name / post-child e ele me redireciona para aquele com pós-type na frente, mas se eu tiver pós-type / post-name / pós-filho / pós-neto, então não posso usar pós-nome / pós-filho / pós-neto.
Examinando as regras de reescrita, parece que ela corresponde a outras coisas que não o nome da página no primeiro e no segundo nível (acho que o segundo nível corresponde ao anexo) e, em seguida, faz algo para redirecioná-lo para a postagem apropriada. Em três níveis de profundidade, não funciona.
A primeira coisa que você precisa fazer é remover o link do tipo de postagem das crianças também. Essa lógica deve acontecer aqui se você olhar a resposta de Nate Allen acima:
Eu mesmo usei uma mistura de condicionais diferentes para verificar se o post tinha filhos e outros enfeites, a fim de obter o link permanente certo. Esta parte não é muito complicada e você encontrará exemplos de pessoas fazendo isso em outros lugares.
O próximo passo é que as coisas mudam a partir da resposta dada. Em vez de adicionar coisas à consulta principal (que funcionava para postagens personalizadas e seus filhos, mas não para os filhos posteriores), adicionei uma reescrita que foi para a parte inferior das regras do WordPress, para que, se o nome da página não saísse e estivesse prestes a ao atingir um 404, ele faria uma última verificação para ver se uma página dentro do tipo de postagem personalizada tinha o mesmo nome, caso contrário, descartaria o 404.
Aqui está a regra de reescrita que usei assumindo que 'evento' é o nome do seu CPT
Espero que isso ajude outra pessoa, não consegui encontrar mais nada que tivesse a ver com filhos de posts filhos e remover a lesma deles.
fonte