Estou tendo um problema estranho com as regras de reescrita que não estão funcionando corretamente.
Eu tentei usar flush_rewrite_rules();
e flush_rewrite_rules(true);
.
Eu também tentei globalizar $wp_rewrite
usando $wp_rewrite->flush_rules();
e$wp_rewrite->flush_rules(true);
Nenhum dos quais parece estar liberando as regras de reescrita corretamente. Essas chamadas estão realmente liberando as regras de reescrita quando chamadas. Como eu sei disso? Usando a solução para depuração, reescreva a liberação da regra .
Atualmente, reescrevi regras liberadas na ativação e desativação de plug-ins. Não há problemas lá.
Eu tenho uma página de configurações de administração do plug-in para os usuários configurarem o plug-in. Algumas das configurações ajustam a estrutura do link permanente, portanto, as regras de reescrita precisam ser liberadas na página de configurações de administração do plug-in "Salvar configurações". (Usa o padrão update_option();
) para salvar as configurações.
Gostaria de observar que, dependendo das configurações especificadas, tipos de postagem personalizados são criados para corresponder às configurações especificadas pelo usuário. Portanto, as regras de reescrita devem ser liberadas imediatamente após as configurações serem salvas. É aqui que as coisas não estão funcionando adequadamente.
A solução de link acima para depurar regras de reescrita fornecidas por @toscho
está exibindo que está liberando toneladas de regras de reescrita. No entanto, ao visitar o item singular de tipo de postagem personalizado, ou mesmo o archive de tipo de postagem personalizado, cada um deles retorna como erros 404.
O tipo de postagem personalizada é registrado corretamente e apropriadamente. Sei com certeza que não é esse o problema.
Imediatamente após a configuração da página de administração do plug-in, salve. Os tipos de postagem personalizados são criados, a estrutura do link permanente é ajustada e todas as regras de reescrita tentam ser liberadas.
Os tipos de postagem personalizados são carregados sempre e carregados init
normalmente.
Por algum motivo, as regras de reescrita não estão funcionando corretamente, porque, como eu disse antes, visitar seções singulares ou de arquivamento do tipo de postagem personalizada retorna erros 404.
Agora, a parte estranha, se tudo o que faço é simplesmente visitar a página de configurações de administração de links permanentes e, em seguida, voltar ao front-end para exibir seções singulares ou de arquivo do tipo de postagem personalizada, elas funcionam magicamente conforme o esperado.
O que essa página de configurações de permalinks de administração faz que eu não estou fazendo para permitir que as regras de reescrita sejam niveladas adequadamente e as minhas não?
Quero dizer, como uma solução temporária, redireciono o usuário para a página de configurações de permalinks de administração depois de salvar a página de configurações de administração do plug-in, mas essa não é uma solução ideal. Eu preferiria que as regras de reescrita apenas nivelassem corretamente no código do meu plug-in.
Existe um certo ponto no WordPress em que a liberação das regras de reescrita simplesmente não libera TODAS as regras?
admin_menu
- A página de configurações do plug-in é adicionada à administração do WordPress.
add_options_page()
- A página de configurações do plug-in é adicionada no menu Configurações.
A página de configurações é renderizada no retorno de chamada para add_options_page()
. Também é aqui que $_POST
é processado a atualização das configurações do plug-in e a liberação das regras de reescrita.
Como essa já é uma pergunta longa, eu estaria disposto a fornecer blocos de código (se ajudar) em um link externo que ajudasse a produzir uma resposta válida.
init
qual registra os tipos de postagem. Imaginei que as configurações da página estavam sendo salvas e a página seria recarregada ... depois acionando o init
gancho novamente para registrar os tipos de postagem necessários. Então, imaginei que os tipos de postagem já seriam carregados, e tudo que eu precisava fazer era atualizar a opção e liberar as regras de reescrita na página de configurações do plug-in. Vou postar uma resposta de como descobri uma solução.
flush_rewrite_rules
, o que exclui arewrite_rules
opção e a regenera, você pode abrir o arquivowp-admin/options-permalinks.php
e ver onde isso acontece. como essa operação exclui toda a opção, não é possível liberar parcialmente as regras.