Criei uma taxonomia de 'fórum', usando estas regras:
register_taxonomy(
'forum',
array('topic'),
array(
'public' => true,
'name' => _a('Forums'),
'singular_name' => _a('Forum'),
'show_ui' => true,
'show_in_nav_menus' => true,
'hierarchical' => true,
'labels' => array(
'name' => _a('Forums'),
'singular_name' => _a('Forum'),
'search_items' => _a('Search Forums'),
'popular_items' => _a('Popular Forums'),
'all_items' => _a('All Forums'),
'parent_item' => _a('Parent Forum'),
'parent_item_colon' => _a('Parent Forum:'),
'edit_item' => _a('Edit Forum'),
'update_item' => _a('Update Forum'),
'add_new_item' => _a('Add New Forum'),
'new_item_name' => _a('New Forum Name'),
),
'query_var' => true,
'rewrite' => array('slug' => 'forums', 'with_front' => false, 'hierarchical' => true),
)
);
No front-end, os URLs se parecem com:
forums/general-discussion/sub-forum
Como posso remover a barra frontal ("fóruns")? Ou seja, altere os URLs para:
general-discussion/sub-forum
Se eu passar um argumento slug vazio para register_taxonomy (), ele funciona, mas causa problemas com os links permanentes do tipo de postagem associado a esta taxonomia
custom-post-types
custom-taxonomy
permalinks
onetrickpony
fonte
fonte
'slug' => 'forums'
branco apenas removê-lo completamente e apenas ter'rewrite' => array('with_front' => false, 'hierarchical' => true)
? Eu acho que isso funcionou no passado para mim. Além disso, certifique-se de liberar os links permanentes.'slug' => ''
o faz funcionar, mas, em seguida, as mensagens que utilizam esta taxonomia gerar 404s%forum%
deve ser um segmento de nível superiorRespostas:
ATUALIZAR
Desde a criação deste núcleo do WordPress, foi adicionado um
'do_parse_request'
gancho que permite que o roteamento de URL seja tratado com elegância e sem a necessidade de estender aWP
classe. Eu cobri o tópico em profundidade na minha palestra de 2014 do Atlanta WordCamp intitulada " Hardcore URL Routing " ; os slides estão disponíveis no link.RESPOSTA ORIGINAL
O design de URL tem sido importante há mais de uma década; Eu até escrevi um blog sobre isso há vários anos. E, embora o WordPress seja um software brilhante, infelizmente , o sistema de reescrita de URLs está quase morto (IMHO, é claro. :) De qualquer forma, fico feliz em ver as pessoas se preocupando com o design do URL!
A resposta que vou fornecer é um plug-in que estou chamando
WP_Extended
que é uma prova de conceito para esta proposta no Trac (observe que a proposta começou como uma coisa e evoluiu para outra, então você deve ler a coisa toda para ver onde foi dirigido.)Basicamente, a idéia é subclassificar a
WP
classe, substituir oparse_request()
método e atribuir a$wp
variável global a uma instância da subclasse. Em seguida,parse_request()
você inspeciona o caminho por segmento, em vez de usar uma lista de expressões regulares que devem corresponder ao URL na sua totalidade.Portanto, para declarar explicitamente, essa técnica insere lógica na frente da
parse_request()
qual verifica correspondências de URL para RegEx e, em vez disso, procura primeiro correspondências de termos de taxonomia, mas apenas substituiparse_request()
e deixa intacto o restante do sistema de roteamento de URL do WordPress, incluindo e especialmente o uso da$query_vars
variávelPara seu caso de uso, essa implementação compara apenas os segmentos do caminho da URL com os termos de taxonomia, pois é tudo o que você precisa. Essa implementação inspeciona os termos de taxonomia que respeitam os relacionamentos pai-filho e, quando encontra uma correspondência, atribui o caminho da URL (menos as barras à esquerda e à direita) a
$wp->query_vars['category_name']
,$wp->query_vars['tag']
ou$wp->query_vars['taxonomy']
&$wp->query_vars['term']
e ignora oparse_request()
método daWP
classe.Por outro lado, se o caminho da URL não corresponder a um termo de uma taxonomia especificada, ele delegará a lógica de roteamento de URL ao sistema de reescrita do WordPress chamando o
parse_request()
método daWP
classe.Para usar
WP_Extended
no seu caso de uso, você precisará chamar aregister_url_route()
função nofunctions.php
arquivo do seu tema da seguinte maneira:Qual é o código fonte do plug-in:
PS CAVEAT # 1
Embora para um determinado site eu ache que essa técnica funcione de maneira brilhante, mas NUNCA deve ser usada para que um plug-in seja distribuído no WordPress.org para que outros o usem . Se estiver no centro de um pacote de software baseado no WordPress, tudo bem. Caso contrário, essa técnica deve se limitar a melhorar o roteamento de URL para um site específico .
Por quê? Porque apenas um plugin pode usar esta técnica . Se dois plugins tentarem usá-lo, eles entrarão em conflito.
Além disso, essa estratégia pode ser expandida para lidar genericamente com praticamente todos os padrões de casos de uso que possam ser necessários, e é isso que pretendo implementar assim que encontrar o tempo livre ou um cliente que possa patrocinar o tempo que levaria para construir implementações totalmente genéricas.
CAVEAT # 2
Eu escrevi isso para substituir
parse_request()
uma função muito grande, e é bem possível que eu tenha perdido uma propriedade ou duas do$wp
objeto global que eu deveria ter definido. Portanto, se algo funcionar errado, avise-me e ficarei feliz em pesquise e revise a resposta, se necessário.De qualquer forma...
fonte
'forum'
taxonomia no entanto vou revê-lo a trabalhar mais tarde hoje ...'forums'
vez de'forum'
? Você está esperando as URLs que apontam para essas páginas para a mudança (se sim, não é de admirar, meu código não trata da impressão de URLs, apenas a encaminhamento de URLs.)site/rootforum/
funciona, massite/rootforum/subforum/
não funciona (erro 404) ... #Simples, realmente.
Etapa 1: Pare de usar o parâmetro reescrever. Vamos lançar suas próprias reescritas.
Etapa 2: defina regras detalhadas da página. Isso força as páginas normais a terem suas próprias regras, em vez de serem um exemplo geral na parte inferior da página.
Etapa 3: Crie algumas regras de reescrita para lidar com seus casos de uso.
Etapa 4: force manualmente as regras de liberação. Maneira mais fácil: vá para configurações-> link permanente e clique no botão Salvar. Eu prefiro isso a um método de ativação de plug-in para meu próprio uso, pois posso forçar as regras a liberar sempre que mudar as coisas.
Então, hora do código:
Lembre-se de que, após adicionar esse código, você precisa ativá-lo quando liberar as regras do link permanente (salvando a página em Configurações-> Link permanente)!
Depois de liberar as regras e salvar no banco de dados, / o que quer que vá para o seu fórum = qualquer página de taxonomia.
Regras de reescrita realmente não são tão difíceis se você entender expressões regulares. Eu uso esse código para me ajudar na depuração:
Dessa forma, posso ver rapidamente as regras atuais em minha página. Lembre-se de que, dado qualquer URL, o sistema inicia no topo das regras e as segue até encontrar uma que corresponda. A correspondência é então usada para reescrever a consulta em um conjunto mais normal de? Key = value. Essas chaves são analisadas no que entra no objeto WP_Query. Simples.
Edit: Nota lateral, esse método provavelmente só funcionará se a sua estrutura de postagem personalizada normal começar com algo que não é uma catchall, como% category% ou algo parecido. Você precisa iniciá-lo com uma sequência estática ou numérica, como% ano%. Isso evita que ele pegue seu URL antes que ele atinja suas regras.
fonte
Você não poderá fazer isso usando WP_Rewrite sozinho, pois não é possível distinguir entre termo slugs e post slugs.
Você também deve conectar-se a 'request' e impedir o 404, configurando a consulta pós var em vez da taxonomia.
Algo assim:
Observe que a taxonomia deve ser definida antes do tipo de postagem.
Seria um bom momento para ressaltar que ter uma taxonomia e um tipo de postagem com a mesma consulta var é uma má ideia.
Além disso, você não poderá acessar postagens com a mesma lesma de um dos termos.
fonte
Eu daria uma olhada no código do plugin de gatos de nível superior:
http://fortes.com/projects/wordpress/top-level-cats/
Você pode adaptar isso facilmente, procurando a lesma de taxonomia personalizada, alterando o
na linha 74 para algo como:
fonte
Eu sugiro dar uma olhada no plugin Custom Post Permalinks . Não tenho tempo para testar agora, mas isso pode ajudar na sua situação.
fonte
%forum%
, que é exatamente o que eu estou tentando evitar ...Já que estou familiarizado com sua outra pergunta , responderei com isso em mente.
Ainda não testei isso, mas pode funcionar se você executá-lo uma vez logo após registrar todas as permastructs que deseja:
O que isso faz: remove as regras de reescrita geradas dos links permanentes de tópicos do fluxo normal da matriz de regras e as mescla novamente no final da matriz. Isso impede que essas regras interfiram com outras regras de reescrita. Em seguida, força regras de reescrita detalhadas (cada página obtém uma regra individual com uma expressão regular específica). Isso evita que as páginas interfiram nas regras do seu tópico. Por fim, ele executa um hard flush (verifique se o arquivo .htaccess é gravável, caso contrário isso não funcionará) e salva a grande variedade de regras de reescrita.
fonte
Existe um plugin para isso .
Ele remove a lesma de tipo adicionando uma regra específica para cada página de tipo de postagem personalizada.
fonte
Não tenho certeza se isso funcionará para taxonomias, mas funcionou para tipos de postagem personalizados
Embora não seja atualizado há 2 anos, o plug-in abaixo funcionou para mim: http://wordpress.org/plugins/remove-slug-from-custom-post-type/
Para sua informação, estou executando o WP
3.9.1
com tipos de WP1.5.7
fonte
Use uma barra como valor para a lesma ... 100% funcionando
fonte
page
tipo de post para 404.