Deshabilitar la ruta de reconocimiento de WordPress como archivo adjunto
1 respuesta
- votos
Después de conocer unpocomás sobre laestructurapermanentepredeterminada y cómomodificarla,me topé conelgancho rewrite_rules_array
. Estegancho lepermitefiltrar lamatriz de reglas de reescritura,unamatriz de reglas de reescritura de URLen WordPress que ayudará a determinar quétipo de contenido cargar.
Estees ungran lugarpara deshabilitarel comportamientopredeterminadopara reconocer la ruta como archivo adjunto. Asíes como se deshace detodas las reglas de reescritura de archivos adjuntos,por lotanto,todoel comportamientopara reconocer una ruta como archivo adjunto.
add_filter('rewrite_rules_array', function($rules) {
foreach ($rules as $rule => $url) {
if (strpos($url, 'attachment') !== false) {
unset($rules[$rule]);
}
}
return $rules;
});
Noestoy seguro detodas las demás reglas y definitivamente quiero revisarlastodas. Estos,porejemplo:
"(.?.+?)(?:/([0-9]+))?/?$" => "index.php?pagename=$matches[1]&page=$matches[2]"
"([^/]+)(?:/([0-9]+))?/?$" => "index.php?name=$matches[1]&page=$matches[2]"
Te ayudará a reconocerpáginas,muy útilpara saber si solo quieres usarpáginas. Pero recuerde que si reescribe lamatriz solo conestas claves/valores,lasnuevas reglas,porejemplo,reglaspara sutipo depublicaciónpersonalizada,también se reescribirán (eliminarán).
NOTA: La depuración deestefiltro soloesposibleen lapágina Configuración> Enlacespermanentesen elback-end de 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.
Siempre queingrese una URL con dos segmentos de ruta quenoexiste,WordPress analizará automáticamente la consulta como un archivo adjunto.
Cómo reproducir
/%postname%/
./foo/bar
asegúrese de que "foo"no sea unataxonomía otipo depublicaciónexistente.pre_get_posts
y descargueelglobal $wp_query
.post_type = 'attachment'
a la consulta y alguna otrainformación relacionada conel archivo adjunto.NOTA: Noestoy seguro de las declaraciones que hagoen lospasos 2 y 5.
¿Por quépreocuparse?
Me resultómuymolesto lidiar coneste comportamientopredeterminado y realmenteme gustaría deshabilitarlo de algunamanera,si sabe cómo,hágamelo saber. Hace que seaimposible lograr ciertasestructuras deenlacespermanentes. De dondeprobablementetambién quieras saber. Estoytratando de lograr unaestructura deenlacepermanente dondeel slug de lapublicación actualtengaelprefijo de sutérmino slug. Porejemplo,eltipo depublicación 'ejemplo'tiene unapublicación 'barra' quetiene una relación con untérmino conel slug 'foo'. En lugar de definirelenlacepermanente 'ejemplo/barra',debería definirse como 'foo/bar'.