Désactiver le chemin de reconnaissance de WordPress en tant que pièce jointe
1 réponses
- votes
Après avoir appris unpeuplus sur la structurepermapar défautet comment lamodifier,je suistombé sur le crochet rewrite_rules_array
. Ce hook vouspermet defiltrer letableau de règles de réécriture,untableau de règles de réécriture d'URL dans WordPress ce qui aidera à déterminer letype de contenu à charger.
C'est unexcellentendroitpour désactiver le comportementpar défautpour reconnaître le chemin commepiècejointe. C'est ainsi que vous vous débarrassez detoutes les règles de réécriture despiècesjointes,donc detout le comportementpour reconnaître un chemin commepiècejointe.
add_filter('rewrite_rules_array', function($rules) {
foreach ($rules as $rule => $url) {
if (strpos($url, 'attachment') !== false) {
unset($rules[$rule]);
}
}
return $rules;
});
Jene suispas sûr detoutes les autres règleset je veux vraiment les vérifiertoutes. Ceux-ciparexemple:
"(.?.+?)(?:/([0-9]+))?/?$" => "index.php?pagename=$matches[1]&page=$matches[2]"
"([^/]+)(?:/([0-9]+))?/?$" => "index.php?name=$matches[1]&page=$matches[2]"
Vous aidera à reconnaître lespages,très utilepour savoir si vousne souhaitez utiliser que despages. Mais rappelez-vous que si vous réécrivez letableau avec uniquement ces clés/valeurs,denouvelles règles,parexemple des règlespour votretype depublicationpersonnalisé,seront également réécrites (supprimées).
REMARQUE: Le débogage de cefiltren'estpossible que sur lapage Paramètres> Permaliens duback-end 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.
Chaquefois que vousentrez une URL avec deux segments de chemin quin'existepas,WordPress analysera automatiquement la requêteen tant quepiècejointe.
Comment reproduire
/%postname%/
./foo/bar
assurez-vous que "foo"n'estpas unetaxonomie ou untype depublicationexistant.pre_get_posts
et videz laglobal $wp_query
.post_type = 'attachment'
à la requêteet à d'autresinformations relatives auxpiècesjointes.REMARQUE: Jene suispas sûr des déclarations queje fais aux étapes 2et 5.
Pourquoi s'en soucier?
J'aitrouvétrèsennuyeux degérer ce comportementpar défautet j'aimerais vraiment le désactiver d'unemanière ou d'une autre,si vous savez comment,faites-lemoi savoir. Cela rendimpossible la réalisation de certaines structures depermalien. Où vous voulezprobablement savoir aussi. J'essaie de réaliser une structure depermalien où le slug depublication actuelestpréfixépar sonterme slug. Parexemple,letype demessage «exemple» a unmessage «bar» qui a une relation avec unterme avec le slug «foo». Au lieu de définir le lienpermanent 'exemple/barre',il devrait être défini comme 'foo/bar'.