Remova a lesma do tipo de postagem personalizado Post URLs
-
-
Eu acho queestou coçandominha cabeça sobrepor que vocêgostaria defazerisso?Confuso.I guess I'm scratching my head as to why you would want to do that? Confused.
- 0
- 2017-05-29
- Michael Ecklund
-
@Michaelecklundporque qualquer CPT que é usadopara criarpáginas da Webem frentepúblicotem umnome de lesmaforçadono URL.Na verdade,hámuitos devs wp olhandopara remover a lesma com segurança.@MichaelEcklund because any CPT that is used to create public facing web pages has a forced slug name in the URL. There is actually a lot of wp devs looking to remove the slug safely.
- 3
- 2017-07-18
- Ben Racicot
-
10 respostas
- votos
-
- 2015-09-30
O código a seguirfuncionará,mas você sóprecisaterem mente que os conflitospodem acontecerfacilmente se a slugpara o seutipopersonalizado é omesmo que umapágina ou slug depostagem ...
Primeiro,removeremos a lesma do Permalink:
function na_remove_slug( $post_link, $post, $leavename ) { if ( 'events' != $post->post_type || 'publish' != $post->post_status ) { return $post_link; } $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link ); return $post_link; } add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );
Apenas removendo a lesmanão é suficiente. Nomomento,você receberá umapágina 404porque o WordPressespera quepostagense páginas se comportarem dessamaneira. Vocêtambémprecisará adicionar o seguinte:
function na_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'events', 'page' ) ); } } add_action( 'pre_get_posts', 'na_parse_request' );
Basta alterar "eventos"para o seutipopersonalizadoe você ébomparair. Vocêpodeprecisar atualizar suaspermalinks.
The following code will work, but you just have to keep in mind that conflicts can happen easily if the slug for your custom post type is the same as a page or post's slug...
First, we will remove the slug from the permalink:
function na_remove_slug( $post_link, $post, $leavename ) { if ( 'events' != $post->post_type || 'publish' != $post->post_status ) { return $post_link; } $post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link ); return $post_link; } add_filter( 'post_type_link', 'na_remove_slug', 10, 3 );
Just removing the slug isn't enough. Right now, you'll get a 404 page because WordPress only expects posts and pages to behave this way. You'll also need to add the following:
function na_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'events', 'page' ) ); } } add_action( 'pre_get_posts', 'na_parse_request' );
Just change "events" to your custom post type and you're good to go. You may need to refresh your permalinks.
-
obrigado.Você acha queisso émelhor do que criar as reescritasmanualmente?Eu viessa soluçãoe podemanter os conflitos que vocêmencionanabaía?thanks. Do you think this is better than creating the rewrites manually? I've seen that solution and it may keep the conflicts you mention at bay?
- 0
- 2015-10-01
- Ben Racicot
-
Eu acho queesta é umaboa solução automatizada se vocêestiver confiante de que vocênãoestará criando conflitos.Estanão é umaboa solução se vocêestáfornecendoisso ... Vamos dizer um cliente quenão éexperienteem tecnologia.I think this is a good automated solution if you're confident that you won't be creating conflicts. This isn't a good solution if you're providing this to... let's say a client that isn't tech savvy.
- 0
- 2015-10-01
- Nate Allen
-
Vocêpode,porfavor,atualizar,como usareste códigopara váriostipos depostagemcan you please update, how to use this code for multiple post types
- 1
- 2016-01-25
- Abin
-
Elefalha com o NginXporque a condição `2!=Contagem ($ Consulta-> Consulta)`Com o NGINX,vocêpodeter $ consulta-> consulta como `array ('página'=> '','nome'=> '...','q'=> '...')`Então @Nateallen,qual é o significado dessa condição?It fails with nginx because the condition `2 != count( $query->query )`. With nginx, you can have $query->query as `array('page' => '', 'name' => '...', 'q' => '...')`. So @NateAllen, what is the meaning of that condition?
- 1
- 2016-11-08
- Fabio Montefuscolo
-
Precisamos de algomelhor queisso.Suportepara remover o slug construídopara quenãopossamos criar URLs conflitantesmaistarde.Amaneira comopostse páginas regulares criam seus URLs.We need something better than this. Support to remove the slug built in so that we cannot create conflicting URLs later on. The way regular posts and pages create their URLs.
- 3
- 2017-07-18
- Ben Racicot
-
É sóeu ouisso quebra algumastags condicionais do WordPress comois_single ()e is_singular ()?Is it just me or does this break some wordpress conditional tags like is_single() and is_singular()?
- 4
- 2017-07-18
- rob-gordon
-
Esta soluçãoinfelizmente causou alguns links quebradose meublogparou demostrarpostse foi apenas umapáginanormal.Veja uma soluçãomelhor abaixoporteclas Matt.This solution unfortunately caused some broken links and my blog stopped showing posts and was just a normal page. See a better solution below by Matt Keys.
- 1
- 2018-10-08
- Radley Sustaire
-
Este códigopressupõe que onome do "post_type" é omesmo que otipo depostagempersonalizado "Slug" quenãoprecisanecessariamenteestarem todos os casos.Maspara o resto,grande solução,embora concordo uma soluçãonativa WP seriamelhor.This code assumes that the `post_type` name is the same as the custom post type `slug` which doesn't necessarily have to be in every case. But for the rest, great solution although I agree a native WP solution would be better.
- 0
- 2019-06-14
- Marco Miltenburg
-
single- {cpt} .phppára detrabalhar usandoesta abordagemsingle-{cpt}.php stops working using this approach
- 0
- 2020-01-05
- Saleh Mahmood
-
Para aqueles quetêm umproblema com o código acima,elefunciona como um charme se você substituir a segundafunção (**funçãona_parse_request () **)por aqueleencontradonesta [resposta] (https://wordpress.stackexchange.COM/A/292379/175093).Não seesqueça demodificar o código com o seupróprionome detipopersonalizado.For those who have a problem with the code above, it works like a charm if you replace the second function ( **function na_parse_request()** ) by the one found on this [answer](https://wordpress.stackexchange.com/a/292379/175093). Dont forget to modify the code with your own Custom Post Type name.
- 0
- 2020-04-03
- PhpDoe
-
Eutenho usadoeste código legal até que o WP 5.2 veio.Após a atualização,este código éiniciado afalharnoplugin dotipopostpersonalizadoe plugin avançada de campospersonalizados,porque,eu acho,elesestão usando amesmafunção Pre_Get_Posts,então,em vez degrupos de campopersonalizados avançados,vejomeuspostspersonalizadosnesteplugin.. Tambémfalha com oplugin CPT UI -nãopodemais criarnovosposts,elesnãoestão aparecendona lista depois de criá-los.Porfavor ajude!!I have been using this nice code until WP 5.2 came. After the update this code starts to fail on my Custom Post Type plugin and Advanced Custom Fields plugin, because, I think, they are using the same pre_get_posts function, so instead of Advanced Custom Field Groups I see my custom posts in this plugin... Also fails with CPT UI plugin - can not create new posts anymore, they are not appearing in list after creating them. Please help!!
- 0
- 2020-05-04
- Gediminas
-
Funcionoupara otipo depostagem único.Como usar o códigopara váriostipos depostagem?It worked for single post type. How to use the code for multiple post type?
- 0
- 2020-07-02
- Swaranan Singha Barman
-
- 2017-04-12
Escreva o código após o registro detaxonomia.
'rewrite' => [ 'slug' => '/', 'with_front' => false ]
coisamaisimportante que vocêtem quefazer após amudança de código
Depois de alterar seu documento detaxonomia dotipo Postpersonalizado,tente irpara Configurações> Permalinks e salvar suas configurações ,senão você receberá 404páginasnãoencontrado.
Write following code into the taxonomy registration.
'rewrite' => [ 'slug' => '/', 'with_front' => false ]
Most important thing that you have to do after code changing
After you’ve altered your custom post type taxonomy document, try to go to Settings > Permalinks and re-save your settings, else you will get 404 page not found.
-
Isso realmentefunciona,não sei comoninguémpercebeuisso antes.Claro queissopodeinterferir com outraspáginas setiverem omesmo Permalink,mas senão,esta é uma ótima solução.This actually works, i don't know how no one noticed this before. Of course this can interfere with other pages if they have same permalink, but if not this is a great solution.
- 0
- 2017-07-31
- Aleksandar Đorđević
-
Tentouisso.Elefornece o resultado desejadopara os links dotipopersonalizado.Noentanto,ele "pega"todos ostipos depostagem oupós-página dotipo slugse tenta resolvê-los como um URLpara omeutipo depostagempersonalizado,depois 404s.(Sim,salvei Permalinks).Tried this out. It gives the desired result for my custom post type links. However it 'catches' all POST or PAGE post type slugs and tries to resolve them as a URL for my custom post type, then 404s. (yes I've saved permalinks).
- 6
- 2017-10-05
- Matt Keys
-
Pode haver amesma lesma de qualquerpáginae tipo depostpersonalizado,alterar suapágina Sluge,em seguida,verificar ..There might be the same slug of any page and custom post type, change your page slug and then check..
- 0
- 2017-10-11
- Mayank Dudakiya
-
Issonãofunciona.Dá 404mesmo quando você atualizou Permalinks.This doesn't work. Gives 404 even when you've updated permalinks.
- 5
- 2017-11-12
- Christine Cooper
-
@Christinecooper. Vocêtem que seguirestepasso Depois de alterar seu documento detaxonomia detipopersonalizado,tente irpara configurações> Permalinkse salvar suas configurações,senão você receberá 404páginasnãoencontradas.@ChristineCooper You have to follow this step After you’ve altered your custom post type taxonomy document, try to go to Settings > Permalinks and re-save your settings, else you will get 404 page not found.
- 0
- 2017-11-15
- Mayank Dudakiya
-
Comoeu destaceinomeu último comentário,você receberá umerro 404mesmo * após * você atualizou Permalinks.Porfavor,experimente vocêmesmo.As I highlighted in my last comment, you will get an 404 error even *after* you have updated permalinks. Please give it a try yourself.
- 0
- 2017-11-15
- Christine Cooper
-
Funciona como umencanto,especialmente ao lertoda amensagem,incluindo aparte "Salvar suas configurações".+1.Works like a charm, especially when reading the whole message, including the "re-save your settings" part. +1
- 0
- 2018-01-25
- davewoodhall
-
Mais uma vez,mesmo depois de salvar as configurações depermalink,postse páginasnãofuncionammais (404)Again, even after re-saving the permalink settings, posts and pages no longer work (404)
- 3
- 2018-02-13
- amklose
-
Esta soluçãofuncionapara remover a lesma do URL.Mas aspáginas do arquivonãofuncionammais.This solution works for removing the slug from URL. But the archive pages don't work anymore.
- 1
- 2018-09-25
- Annapurna
-
Como outros afirmaram,issofuncionapara asprópriaspostagens do CPT.Masestá causando um 404parapáginas regulares agora.As others have stated, this does work for the CPT posts themselves. But it's causing a 404 for regular Pages now.
- 0
- 2019-07-03
- Garconis
-
- 2015-09-30
Eutentei descobririssonãomuitotempo atráse a resposta curta do queeu sei é não .Não de dentro do argumento de reescrita,pelomenos.
Aexplicação longatorna-se aparente se você olharpara o código real de
register_post_type
em wp-inclui/post.php linha 1454 :add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );
Vocêpode vê-loprefixos
$args->rewrite['slug']
para o%$post_type%
tag de reescrita.Pode-sepensar "Vamos apenas definir a lesmaparanull
então" até que vocêpareça algumas linhas:if ( empty( $args->rewrite['slug'] ) ) $args->rewrite['slug'] = $post_type;
Vocêpode ver que afunção sempre espera um valor SLUG quenãoestá vazioe usa otipo depostagem.
I tried to figure this out not long ago and the short answer from what I know is no. Not from within the rewrite argument at least.
The long explanation becomes apparent if you look at the actual code of
register_post_type
in wp-includes/post.php line 1454:add_permastruct( $post_type, "{$args->rewrite['slug']}/%$post_type%", $permastruct_args );
You can see it prefixes
$args->rewrite['slug']
to the%$post_type%
rewrite tag. One could think "let's just set the slug tonull
then" until you look a few lines up:if ( empty( $args->rewrite['slug'] ) ) $args->rewrite['slug'] = $post_type;
You can see that the function always expects a slug value that is not empty and otherwise uses the post type.
-
Obrigado @janbeck.Existe umagrande razãoparaissoexistir?Por quenão hackeareste arquivo central com um condicionalpara omitir determinadostipos depostagens dessa regra?Thanks @JanBeck . Is there a major reason for this to exist? Why not hack this core file with a conditional to omit certain post types from this rule?
- 0
- 2015-09-30
- Ben Racicot
-
Você deve conceder a resposta a Jan Beck.O WordPressprecisa do slugpost_typeparaencaminhar solicitações corretamente.Essa regraevita conflitos denomeaçãoentre aspáginas WPnativas (que rendem sem a SLUG)e quaisquertipospostais definidospersonalizados.Se você hackear o slugparafora,o WordPressnão saberá a diferençaentre umapágina chamada "Picnic"e umevento (tipopersonalizado) chamado "Picnic".You should award the answer to Jan Beck. WordPress needs the post_type slug to route requests properly. This rule prevents naming conflicts between native WP pages (which render without the slug) and any custom defined post types. If you hack the slug out then WordPress won't know the difference between a page named "picnic" and an event (custom post type) named "picnic".
- 9
- 2015-09-30
- dswebsme
-
@dswebsme concordou,mas há situaçõesem que você absolutamente devemudar o URL.Então,além do que vocênãopodenativamentee não deve,como vocêfaz comissoeficientemente?@dswebsme Agreed, but there are situations where you absolutely must change the URL. So other than why you can't natively and shouldn't, how do you do so efficiently?
- 3
- 2015-10-01
- Ben Racicot
-
- 2015-10-02
Em resposta a minha resposta anterior : Vocêpoderia,é claro,definir oparâmetro
rewrite
parafalse
ao registrar umnovotipo depostageme manipular as regras de reescrita como assim<?php function wpsx203951_custom_init() { $post_type = 'event'; $args = (object) array( 'public' => true, 'label' => 'Events', 'rewrite' => false, // always set this to false 'has_archive' => true ); register_post_type( $post_type, $args ); // these are your actual rewrite arguments $args->rewrite = array( 'slug' => 'calendar' ); // everything what follows is from the register_post_type function if ( is_admin() || '' != get_option( 'permalink_structure' ) ) { if ( ! is_array( $args->rewrite ) ) $args->rewrite = array(); if ( empty( $args->rewrite['slug'] ) ) $args->rewrite['slug'] = $post_type; if ( ! isset( $args->rewrite['with_front'] ) ) $args->rewrite['with_front'] = true; if ( ! isset( $args->rewrite['pages'] ) ) $args->rewrite['pages'] = true; if ( ! isset( $args->rewrite['feeds'] ) || ! $args->has_archive ) $args->rewrite['feeds'] = (bool) $args->has_archive; if ( ! isset( $args->rewrite['ep_mask'] ) ) { if ( isset( $args->permalink_epmask ) ) $args->rewrite['ep_mask'] = $args->permalink_epmask; else $args->rewrite['ep_mask'] = EP_PERMALINK; } if ( $args->hierarchical ) add_rewrite_tag( "%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&pagename=" ); else add_rewrite_tag( "%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=" ); if ( $args->has_archive ) { $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive; if ( $args->rewrite['with_front'] ) $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug; else $archive_slug = $wp_rewrite->root . $archive_slug; add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' ); if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) { $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')'; add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); } if ( $args->rewrite['pages'] ) add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' ); } $permastruct_args = $args->rewrite; $permastruct_args['feed'] = $permastruct_args['feeds']; add_permastruct( $post_type, "%$post_type%", $permastruct_args ); } } add_action( 'init', 'wpsx203951_custom_init' );
Vocêpode ver o
add_permastruct
chamada agoranãoincluimais a Slug. Eutestei dois cenários:- .
- Quandoeu criei umapágina com o slug "calendário"essapágina é sobrescritapelo arquivo detipo depostagem quetambém usa o slug "Calendário".
- Quandoeu criei umapágina com o slug "my-event"e umevento (CPT) com o slug "My-event",otipo depostagempersonalizado éexibido.
- Quaisquer outraspáginastambémnãofuncionam. Se você olharpara afoto acima,fica claropor que: a regra dotipo Postpersonalizado sempre corresponderá a uma lesma depágina. Como o WordPressnãotem comoidentificar sefor umapágina ou umtipo depostagempersonalizado quenãoexiste,ele retornará 404. Éporisso que vocêprecisa de uma lesmaparaidentificar apágina ou o CPT. Uma soluçãopossível seriainterceptar oerroe procurar umapágina quepossaexistir semelhante aesta resposta . .
In response to my previous answer: you could of course set the
rewrite
parameter tofalse
when registering a new post type and handle the rewrite rules yourself like so<?php function wpsx203951_custom_init() { $post_type = 'event'; $args = (object) array( 'public' => true, 'label' => 'Events', 'rewrite' => false, // always set this to false 'has_archive' => true ); register_post_type( $post_type, $args ); // these are your actual rewrite arguments $args->rewrite = array( 'slug' => 'calendar' ); // everything what follows is from the register_post_type function if ( is_admin() || '' != get_option( 'permalink_structure' ) ) { if ( ! is_array( $args->rewrite ) ) $args->rewrite = array(); if ( empty( $args->rewrite['slug'] ) ) $args->rewrite['slug'] = $post_type; if ( ! isset( $args->rewrite['with_front'] ) ) $args->rewrite['with_front'] = true; if ( ! isset( $args->rewrite['pages'] ) ) $args->rewrite['pages'] = true; if ( ! isset( $args->rewrite['feeds'] ) || ! $args->has_archive ) $args->rewrite['feeds'] = (bool) $args->has_archive; if ( ! isset( $args->rewrite['ep_mask'] ) ) { if ( isset( $args->permalink_epmask ) ) $args->rewrite['ep_mask'] = $args->permalink_epmask; else $args->rewrite['ep_mask'] = EP_PERMALINK; } if ( $args->hierarchical ) add_rewrite_tag( "%$post_type%", '(.+?)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&pagename=" ); else add_rewrite_tag( "%$post_type%", '([^/]+)', $args->query_var ? "{$args->query_var}=" : "post_type=$post_type&name=" ); if ( $args->has_archive ) { $archive_slug = $args->has_archive === true ? $args->rewrite['slug'] : $args->has_archive; if ( $args->rewrite['with_front'] ) $archive_slug = substr( $wp_rewrite->front, 1 ) . $archive_slug; else $archive_slug = $wp_rewrite->root . $archive_slug; add_rewrite_rule( "{$archive_slug}/?$", "index.php?post_type=$post_type", 'top' ); if ( $args->rewrite['feeds'] && $wp_rewrite->feeds ) { $feeds = '(' . trim( implode( '|', $wp_rewrite->feeds ) ) . ')'; add_rewrite_rule( "{$archive_slug}/feed/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); add_rewrite_rule( "{$archive_slug}/$feeds/?$", "index.php?post_type=$post_type" . '&feed=$matches[1]', 'top' ); } if ( $args->rewrite['pages'] ) add_rewrite_rule( "{$archive_slug}/{$wp_rewrite->pagination_base}/([0-9]{1,})/?$", "index.php?post_type=$post_type" . '&paged=$matches[1]', 'top' ); } $permastruct_args = $args->rewrite; $permastruct_args['feed'] = $permastruct_args['feeds']; add_permastruct( $post_type, "%$post_type%", $permastruct_args ); } } add_action( 'init', 'wpsx203951_custom_init' );
You can see the
add_permastruct
call now doesn't include the slug anymore. I tested two scenarios:- When I created a page with the slug "calendar" that page is overwritten by the post type archive which also uses the "calendar" slug.
- When I created a page with the slug "my-event" and an event (CPT) with the slug "my-event", the custom post type is displayed.
- Any other pages do not work either. If you look at the picture above it becomes clear why: the custom post type rule will always match against a page slug. Because WordPress has no way of identifying if it's a page or a custom post type that does not exist, it will return 404. That's why you need a slug to identify either the page or CPT. A possible solution would be to intercept the error and look for a page that might exist similar to this answer.
-
Então,se o objetivo é remover a lesmapara a CPTnãopoderianomearmos o CPT algo único quenão colidiria desde quenunca será vistono URL de qualquermaneira?Ou é opós-nome opossível conflito senomeado omesmo que umapágina?So if the goal is to remove the slug for CPT's couldn't we name the CPT something unique that wouldn't collide since it will never be seen in the URL anyways? Or is the post-name the possible conflict if named the same as a page?
- 0
- 2015-10-02
- Ben Racicot
-
Eu atualizeiminha respostaparamostrar queisso realmente quebra *todas aspáginas *.Sem uma lesma,o WPprocurará um CPTem vez de umapáginae,senãoencontrar,retorne umerro.Portanto,nãoestá relacionado aopós-nome.I have updated my answer to show that this does actually break *all* pages. Without a slug, WP will look for a CPT instead of a page and if it doesn't find it, return an error. So it's actually not related to the post-name.
- 0
- 2015-10-02
- Jan Beck
-
Entendo.Deve haver regras de reescrita que acrescentam "-1" afuturas URL conflitantes comopostagensnativas do WP VSpáginas.Eu criei umtickettrac https://core.trac.wordpress.org/ticket/34136#ticket adoraria seuspensamentos.I see. There should be rewrite rules that append '-1' to future conflicting URL's like native WP posts vs pages. I've created a trac ticket https://core.trac.wordpress.org/ticket/34136#ticket would love your thoughts.
- 1
- 2015-10-02
- Ben Racicot
-
- 2019-12-17
Roundup deplugin
É quase 2020e muitas dessas respostasnãofuncionam. Aquiestámeupróprio roundup das opções atuais:
- teclasmatt resposta parece ser o únicono caminho certo se Você quer uma solução de códigopersonalizada. Nenhum dosplugins queencontreipodefazertudo listado aqui,especialmente a verificação duplicada. Esta abordagemparece ser umaboa oportunidadepara umplugin se alguém quisesse levarisso.
- Permalink Manager Lite
- melhor dospluginsgratuitos queeutentei.
- dá controletotal sobretoda aestrutura de Permalink completa depágina/Post/CPTe permite queeles sejam osmesmos. A GUI é de longe amais ricaem recursos.
- permite override completoporposttambéme permite ver o que o original/padrão seriae redefinidopara opadrão,senecessário.
- suportamulti-site.
- faz não verifique as duplicatasentre ostipos depós,que étriste. Se umapáginae um CPTtiverem omesmo URL,apágina é carregadae o CPTestiverinacessível. Sem avisos ouerros,você sótem quefazer suaprópria verificaçãomanualpara duplicatas.
- Todos os recursos detaxonomiaestãona versão Pro. Os Nags de atualização sãobastantepesados.
- Permalinkspersonalizados
- A versãogratuitafazmuito. Taxonomia Permalinkse suportepremiumparecem ser as únicas coisas retidas da versão Pro.
- permite alterar o completo permalinkpara qualquerpáginaindividual/post/cpt.
- suportamulti-site.
- faz não permite alterar aestruturapadrãopara que seustipos depostagempersonalizados ainda sejaexample.com/cpt-slug/post-title,mas vocêpode alterá-losindividualmente.
- faz não verifique as duplicatasentre ostipos depós,que étriste.
- Tipo depostagempersonalizado Permalinks
- permite que usuáriosnão desenvolventes alterem as coisas que sãofáceis de alterar com
register_post_type
- não permite alterar a lesma dabase CPT - apenas aparte que vem depois disso -tãoinútilpara desenvolvedorese a questãonesta questão.
- permite que usuáriosnão desenvolventes alterem as coisas que sãofáceis de alterar com
- Remova a Slug ... -mortopor vários anos agora ...não use.
Plugin Roundup
It's almost 2020 and a lot of these answers don't work. Here's my own roundup of the current options:
- Matt Keys answer seems to be the only one on the right track if you want a custom code solution. None of the plugins I found can do everything listed here, especially the duplicate checking. This approach seems like a really good opportunity for a plugin if anyone wanted to take that on.
- Permalink Manager Lite
- Best of the free plugins I tried.
- Gives full control over all Page/Post/CPT complete permalink structure and allows them to be the same. The GUI is by far the most feature-rich.
- Allows full override per-post as well and lets you see what the original/default would be and reset to the default if needed.
- Supports multi-site.
- Does not check for duplicates between post types, which is sad. If a page and a CPT have the same URL, the page loads and the CPT is inaccessible. No warnings or errors, you just have to do your own manual checking for duplicates.
- All taxonomy features are in the PRO version. The upgrade nags are pretty heavy.
- Custom Permalinks
- The free version does a lot. Taxonomy permalinks and premium support seem to be the only things withheld from the pro version.
- Allows you to change the full permalink for any individual page/post/CPT.
- Supports multi-site.
- Does not allow you to change the default structure so you your Custom Post Types will still be example.com/cpt-slug/post-title but you can change them individually.
- Does not check for duplicates between post types, which is sad.
- Custom Post Type Permalinks
- Allows non-developer users to change the things that are easy to change already with
register_post_type
- Does not allow you to change the CPT base slug - only the part that comes after that - so pretty much useless for developers and the issue in this question.
- Allows non-developer users to change the things that are easy to change already with
- remove base slug... - dead for several years now... do not use.
-
O Plugin Permalink Manager Lite é definitivamente amelhor solução: constante,robusto,limpoe a versãogratuitapermite que você remova abase de lesma.Efunciona compolilangtambém!Testadono WordPress 5.4,comtwentywentytema,sem qualquer outroplugin ativado.Funciona como um charmenotipo depostagempersonalizado,nãoimporta se você criou um hierárquico (compost de criançae post doneto).Detodos que querem uma solução limpa.The plugin Permalink Manager Lite is definitively the best solution : steady, robust, clean, and the free version allow you to remove the slug base. And it works with Polylang too ! Tested on Wordpress 5.4, with TwentyTwenty Theme, without any other plugin activated. Works like a charm on Custom Post Type, no matter if you have created a hierarchical one (with child post and grandchild post). From everyone who wants a clean solution.
- 1
- 2020-04-04
- PhpDoe
-
- 2017-02-25
Vocênãoprecisa detanto código duro.Basta usarplugin leve:
Tem opçõespersonalizáveis.
You dont need so much hard-code. Just use lightweight plugin:
It has customizable options.
-
Agoraeu seiporque vocêfoi downvoted,evita links depáginanormais resolvendo.Eunão viissoporqueestava recebendo cópiasem cache daspáginasexistentes,apesar de refrescar.Now I know why you got downvoted, it prevents normal page links resolving. I didn't see it because I was getting cached copies of the existing pages despite refreshing.
- 0
- 2017-09-14
- Walf
-
@Walf vocêpodeme contar sobre oproblemaem detalhes?@Walf Can you tell me about the issue in details?
- 0
- 2017-09-14
- T.Todua
-
A seguir linksparapáginas (quenãoforam otipo depostagempersonalizado)nomenuprincipal deu 404erros,como se apáginanãoexistisse;éisso.Following links to pages (that weren't the custom post type) from the main menu gave 404 errors, as if the page did not exist; that's it.
- 0
- 2017-09-14
- Walf
-
@Walf vocêpodeme dar qualquerexemplo URL da sua ocasião?(vocêpode cobrir onome de domínio se quiser,eu sópreciso de umexemplo Exemplo) Obrigado,eu atualizarei@Walf can you give me any example url of your occasion? (you can cover domain name if you want, i just need an ex example) thanks, i wil update it
- 0
- 2017-09-15
- T.Todua
-
"Estepluginfoifechado apartir de 19 de setembro de 2018e nãoestá disponívelpara download. Estefechamento épermanente"."This plugin has been closed as of September 19, 2018 and is not available for download. This closure is permanent."
- 1
- 2019-12-16
- squarecandy
-
- 2017-03-01
e podemosfazer algumas alteraçõesnafunção acimamencionada:
function na_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'events', 'page' ) ); } }
para:
function na_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { global $wpdb; $pt = $wpdb->get_var( "SELECT post_type FROM `{$wpdb->posts}` " . "WHERE post_name = '{$query->query['name']}'" ); $query->set( 'post_type', $pt ); } }
Para definir o valor Post_Type direito.
and we can make some changes to above-mentioned function:
function na_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { $query->set( 'post_type', array( 'post', 'events', 'page' ) ); } }
to:
function na_parse_request( $query ) { if ( ! $query->is_main_query() || 2 != count( $query->query ) || ! isset( $query->query['page'] ) ) { return; } if ( ! empty( $query->query['name'] ) ) { global $wpdb; $pt = $wpdb->get_var( "SELECT post_type FROM `{$wpdb->posts}` " . "WHERE post_name = '{$query->query['name']}'" ); $query->set( 'post_type', $pt ); } }
in order to set right post_type value.
-
- 2017-05-03
Issofuncionouparamim:
'rewrite' => array('slug' => '/')
This worked for me:
'rewrite' => array('slug' => '/')
-
Issonãofunciona.Dá 404mesmo quando você atualizou Permalinks.This doesn't work. Gives 404 even when you've updated permalinks.
- 1
- 2017-11-12
- Christine Cooper
-
- 2017-05-29
Para quem lerisso queteveproblemas compostsinfantis comoeuencontrei amelhormaneiraera adicionar suaspróprias regras de reescrita.
Aprincipal questão queeuestavatendoera que o WordPresstrata o redirecionamento depáginas que são 2níveis (postesinfantis)profundamente umpouco diferente do quetrata 3níveis deprofundidade (criança depostesinfantis).
Isso significa que quandoeutenho/pós-tipo/pós-nome/pós-filho/euposso usar/pós-nome/pós-filhoe eleiráme redirecionarpara aquele com otipo depost-type,mas seeutiver Post-type/pós-nome/pós-filho/pós-neto,entãoeunãoposso usarpós-nome/pós-filho/pós-neto.
Dando uma olhadanas regras de reescrita Parece que corresponde a outras coisas além do Pagenamenoprimeiroe segundoníveis (acho que o segundonível corresponde ao anexo)e,em seguida,faz algopara o redirecioná-lopara opost adequado. Emtrêsníveis deprofundidade,nãofunciona.
Aprimeira coisa que vocêprecisafazer é remover o link dotipo Post de criançastambém. Esta lógica deve acontecer aqui se você olharpara a resposta de Nate Allen acima:
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
Eu usei umamistura de diferentes condicionaispara verificar se oposttinhafilhose comopara chegar à direita Permalink. Estapartenão émuito complicadae vocêencontraráexemplos depessoasfazendoissoem outro lugar.
Opróximopasso é onde as coisasmudam da resposta dada. Em vez de adicionar coisas à consultaprincipal (quetrabalhouparapostspersonalizadose seusfilhos,masnão osmaisfilhos)eu adicionei uma reescrita quefoipara ofundo das regras do WordPress,demodo que,se Pagenamenão checassee estavaprestes a verificar Bata um 404 Faria uma última verificaçãopara ver se umapágina dentro dotipo depostagempersonalizadatinha omesmonome,caso contrário,elejogariafora do 404.
Aquiestá a regra de reescrita que usei assumindo "evento" é onome do seu CPT
function rewrite_rules_for_removing_post_type_slug() { add_rewrite_rule( '(.?.+?)?(:/([0-9]+))?/?$', 'index.php?event=$matches[1]/$matches[2]&post_type=event', 'bottom' ); } add_action('init', 'rewrite_rules_for_removing_post_type_slug', 1, 1);
Espero queisso ajude outrapessoa,não conseguiencontrarmaisnada quetenha a ver com a criança depostesinfantise removendo a lesma daqueles.
For anyone reading this that had trouble with child posts like I did I found the best way was to add your own rewrite rules.
The main issue I was having was that WordPress treats the redirect from pages that are 2 levels (child posts) deep a little differently than it treats 3 levels deep (child of child posts).
That means when I have /post-type/post-name/post-child/ I can use /post-name/post-child and it will redirect me to the one with post-type in front but if I have post-type/post-name/post-child/post-grandchild then I can't use post-name/post-child/post-grandchild.
Taking a look into the rewrite rules it looks like it matches for things other than pagename at the first and second levels (I think the second level matches attachment) and then does something there to redirect you to the proper post. At three levels deep it doesn't work.
First thing you need to do is to remove the post type link from children as well. This logic should happen here if you look at Nate Allen's answer above:
$post_link = str_replace( '/' . $post->post_type . '/', '/', $post_link );
Myself I used a mix of different conditionals to check if the post had children and whatnot in order to get to the right permalink. This part isn't too tricky and you'll find examples of people doing it elsewhere.
The next step though is where things change from the given answer. Instead of adding things to the main query (which worked for custom posts and their children but not the further children) I added a rewrite that went to the bottom of the WordPress rules so that if pagename didn't check out and it was about to hit a 404 it would do one last check to see if a page within the custom post type had the same name otherwise it would throw out the 404.
Here is the rewrite rule I used assuming 'event' is the name of your CPT
function rewrite_rules_for_removing_post_type_slug() { add_rewrite_rule( '(.?.+?)?(:/([0-9]+))?/?$', 'index.php?event=$matches[1]/$matches[2]&post_type=event', 'bottom' ); } add_action('init', 'rewrite_rules_for_removing_post_type_slug', 1, 1);
Hope this helps someone else, I couldn't find anything else that had to do with child of child posts and removing the slug from those.
-
Parece haver umerro de digitaçãono regex.Entre '(:' A '?' Énecessáriopara usá-lo como subpatternnão capturar=> '(?:'. Oterceiropareceerrado,poispermite umaprimeira subpatéria vazia. Proponente deve serposicionadaentre (e :.Semesteerro de digitação,aexpressão será amesma que a quepode serencontradapara otipo depostagem debuild-in 'Page'.There seems to be a typo in the regex. Between '(:' a '?' is needed to use it as non-capturing subpattern => '(?:'. The third ? seems misplaced as it allows an empty first subpattern. Propably it should be positioned between ( and :. Without this typo the expression will be the same as the one which can be found for the build-in post type 'page'.
- 0
- 2019-10-28
- jot
-
- 2019-06-19
tinha osmesmosproblemas aquie parecenão havermovimentono site do WordPress.Naminha situaçãoparticularem queparablogpostos únicos aestrutura/blog/% PostName%/foinecessáriaesta solução
https://kellenmace.com/remove-custom-pós-tipo-slug de-permalinks/
terminouem ummonte de 404s
Mas,juntamente comestamaravilhosa abordagem,o quenãoestá usando obackendpermalink strukturepara oblogpostfinalmentefunciona como charme. https://www.bobz.co/add-blog-prefix-permalink-estrutura-blog-posts/
obrigado ummonte.
Had the same problems here and there seems to be no movement on wordpress site. In my particular situation where for single blogposts the structure /blog/%postname%/ was needed this solution
https://kellenmace.com/remove-custom-post-type-slug-from-permalinks/
ended in a bunch of 404s
But together with this wonderful approach, which is not using the backend permalink strukture for the blogpost it finally works like charme. https://www.bobz.co/add-blog-prefix-permalink-structure-blog-posts/
Thanks a bunch.
-
As respostas somente de link são desencorajadas.Se vocêencontrou uma respostaneste artigo diferente das outras respostasnapágina,porfavor,coloque um local de resumoe códigoem sua resposta.Link-only answers are discouraged. If you found an answer in this article that is different from the other answers on the page, please put a summary and code example in your answer.
- 0
- 2019-12-16
- squarecandy
Parece quetodos os recursos da Web combaseno assunto da remoção de umtipo depostagempersonalizado Slug,ou seja,
Agora são soluçõesmuito desatualizadas,muitas vezes referenciando asinstalaçõespré-WP versão 3.5. Um comum épara:
dentro da suafunção Register_Post_Type. Issonãofuncionamaise éenganoso. Entãoeupergunto à comunidadeno Q3 2018 àbeira do Wordpress 5 ...
Quais são asmaneirasmodernase eficientes de remover otipo depostagem dotipo de um URL dotipo Postpersonalizado de dentro do argumento de reescrita ouem qualquer outro lugar?
Atualização: Parece haver váriasmaneiras deforçarisso atrabalhar com a REGEX. Especificamente,a resposta de Jan Beck deveestar consistente disposta amonitorar a criação de conteúdoparagarantir quenenhumapágina conflitante/nomes depostagem seja criada ... Noentantoestou convencido de queesta é umagrandefraquezano WP Core,onde deve sertratadoparanós . Ambos como opção/gancho ao criar um CPT ou um conjunto avançado de opçõespara Permalinks. Porfavor,suporta obilhete.
nota de rodapé:porfavor suporteesteticket Trac assistindo/promovendo: https://núcleo .trac.wordpress.org/ticket/34136 # Bilhete