Desativar o WordPress Reconhecendo o caminho como anexo
1 responda
- votos
Depois de conhecer umpoucomais sobre aestruturapermapadrãoe comomodificá-lo,eutropeçonogancho rewrite_rules_array
. Esteganchopermitefiltrar amatriz de regras de reescrita,umamatriz de regras de reescrita de URLno WordPress O que ajudará a determinar quetipo de conteúdopara carregar.
Este é um ótimo lugarpara desativar o comportamentopadrãopara reconhecer o caminho como anexo. É assim que você se livra detodas as regras de reescritapara anexos,portantotodo o comportamento de reconhecer um caminho como anexo.
add_filter('rewrite_rules_array', function($rules) {
foreach ($rules as $rule => $url) {
if (strpos($url, 'attachment') !== false) {
unset($rules[$rule]);
}
}
return $rules;
});
Nãotenho certeza sobretodas as outras regrase definitivamente quero verificartodoseles. Estesporexemplo:
"(.?.+?)(?:/([0-9]+))?/?$" => "index.php?pagename=$matches[1]&page=$matches[2]"
"([^/]+)(?:/([0-9]+))?/?$" => "index.php?name=$matches[1]&page=$matches[2]"
Ajudá-lo a reconhecerpáginas,muito útilpara saber se você só quer usarpáginas. Mas lembre-se se você reescrever amatriz com apenasessasteclas/valores,novas regras,porexemplo,regraspara o seutipo depostagempersonalizadatambém serão reescritas (removidas).
Nota: Depuração Estefiltro só épossívelnas configurações> Página Permalinksnoback-end do WordPress.
After getting to know a bit more about the default perma structure and how to modify it I stumbled upon the hook rewrite_rules_array
. This hook allows you to filter the array of rewrite rules, an array of URL rewrite rules in WordPress what will help determine what type of content to load.
This is a great place to disable the default behavior for recognizing the path as attachment. This is how you get rid of all rewrite rules for attachments, thus all the behavior for recognizing a path as attachment.
add_filter('rewrite_rules_array', function($rules) {
foreach ($rules as $rule => $url) {
if (strpos($url, 'attachment') !== false) {
unset($rules[$rule]);
}
}
return $rules;
});
I'm not sure about all other rules and I definitely want to check them all out. These for example:
"(.?.+?)(?:/([0-9]+))?/?$" => "index.php?pagename=$matches[1]&page=$matches[2]"
"([^/]+)(?:/([0-9]+))?/?$" => "index.php?name=$matches[1]&page=$matches[2]"
Will help you recognize pages, very useful to know if you only want to use pages. But remember if you rewrite the array with only these keys/values then new rules for example rules for your custom post type will also be rewritten (removed).
NOTE: Debugging this filter is only possible on the Settings > Permalinks page in the WordPress back-end.
Sempre que vocêinserir um URL com dois segmentos de caminho quenãoexiste,o WordPress analisará automaticamente a consulta como um anexo.
Como reproduzir
.- Alterar suaestrutura Permalinkpara
- Digite o seguinte caminhoportrás do seu URL da raiz do WordPress:
- ganchoem
- Como vocêpode vernasinformações depuradas,o sistemaestátentando analisar o URL como um anexo,pois adiciona
- Senão houver umapostagem oupágina com onome Slug doprimeiro segmentoe um anexo com uma lesma do segundo segmento do que o WordPress retornará um 404.
/% PostName%/
./Foo/Bar
Certifique-se de "foo"não é umataxonomiaexistente outipo depostagem.pré_get_posts
e despejar oglobal $ WP_Query
.post_type='anexo'
para a consultae algumas outrasinformações relacionadas ao anexo.Nota: Nãotenho certeza sobre asinstruções quefaçonopasso 2e 5.
Por que seimporta?
Eu acheimuitoirritante lidar comesse comportamentopadrãoe realmentegostaria de desativá-lo de algumaforma,se você sabe comoporfavorme avise. Issotornaimpossível alcançar certasestruturas depermalink. Onde vocêprovavelmente quer sabertambém. Euestoutentando alcançar umaestrutura de Permalink onde opós-slug atual éprefixopor seutermo slug. Porexemplo,otipo depostagem 'Exemplo'tem post 'bar' quetem uma relação com umtermo com o slug 'foo'. Em vez de definir o 'Exemplo/Bar' de Permalink,deve ser definido como 'foo/bar'.