Desactivar completamente las páginas de adjuntos

31 ago 2016, 18:54:10
Vistas: 16.5K
Votos: 13

Me gustaría desactivar completamente todas las páginas de adjuntos. Busqué en Google, pero solo encuentro información sobre cómo redirigir a la publicación principal o a la página de inicio. No considero que sea una solución elegante. ¿Por qué introducir enlaces permanentes innecesarios que redirigen a la página de inicio? ¿No se podría desactivar por completo?

3
Comentarios

¿Qué quieres decir con "desactivar completamente"? Cuando se añaden archivos multimedia, las URLs se crean automáticamente. No sé si se podría desactivar esta acción sin dañar el núcleo de WordPress.

¿Por qué redirigir no es una solución elegante? ¿Cuál es el problema con las URLs de los archivos adjuntos? No estoy juzgando, solo intento entender para poder ofrecer una solución.

Fencer04 Fencer04
31 ago 2016 20:35:08

Simplemente me parece innecesario que cada archivo que subo tenga su propia página con un enlace permanente. No se me ocurren muchos casos de uso para ellos. La mayoría de la gente solo quiere subir archivos para enlazarlos, no crear una página separada para mostrarlos.

Maciej Kravchyk Maciej Kravchyk
1 sept 2016 08:19:49

@Fencer04 se puede hacer sin dañar el núcleo de WP, mira mi respuesta. En muchos casos tiene sentido. Las redirecciones son malas y técnicamente no es el caso de uso adecuado para ellas; en lugar de redirigir una URL existente, es mejor no tener esa URL en primer lugar si no la usas. Además, en cada solicitud, WP escanea todo el array de reglas de reescritura hasta encontrar la primera coincidencia, las evalúa usando expresiones regulares, lo cual es lento. Un array más pequeño de reglas significa mejor rendimiento. Por esta razón, a menudo elimino fechas, archivos de autor, embeds, feeds, etc; básicamente todas las funciones que no se usan en el proyecto.

Ihor Vorotnov Ihor Vorotnov
23 jun 2017 13:14:53
Todas las respuestas a la pregunta 4
6
13

Puedes filtrar las reglas de reescritura predeterminadas y eliminar aquellas para adjuntos:

function cleanup_default_rewrite_rules( $rules ) {
    foreach ( $rules as $regex => $query ) {
        if ( strpos( $regex, 'attachment' ) || strpos( $query, 'attachment' ) ) {
            unset( $rules[ $regex ] );
        }
    }

    return $rules;
}
add_filter( 'rewrite_rules_array', 'cleanup_default_rewrite_rules' );

No olvides volver a guardar tus enlaces permanentes una vez. WordPress generará nuevas reglas sin nada relacionado con adjuntos.

Ahora, la URL de la página de adjuntos devolverá un error 404. También puedes agregar esa redirección para evitar la página 404, que es inútil en este caso. Pero no estoy seguro de cómo capturar la redirección - is_attachment() no funcionará si las reglas de reescritura fueron eliminadas.

Actualización:

WordPress seguirá ofreciendo las URLs amigables de la página de adjuntos en la biblioteca multimedia y en el diálogo de inserción de medios. También puedes filtrar esto:

function cleanup_attachment_link( $link ) {
    return;
}
add_filter( 'attachment_link', 'cleanup_attachment_link' );

En este caso, incluso cuando insertes tu adjunto en una publicación y selecciones "Enlazar a la página de adjuntos", la imagen se insertará sin el enlace.

23 jun 2017 13:05:38
Comentarios

¿Sería posible configurar la reescritura para que sea la URL del archivo multimedia (enlazado a wp-content/uploads) en lugar de una página generada automáticamente?

italiansoda italiansoda
13 jul 2017 20:25:49

Sí, me gustaría tener la posibilidad de redirigir todas las páginas de adjuntos a la URL del archivo también :)

Ola Ola
2 oct 2018 12:21:25

El plugin Yoast SEO maneja esto perfectamente.

wp-mario.ru wp-mario.ru
8 may 2020 16:01:12

Por cierto, este código no funciona completamente. Si el adjunto se carga para una publicación o página, entonces todo funciona bien. Si solo subes un adjunto a la biblioteca de medios, su página aún se abre.

wp-mario.ru wp-mario.ru
8 may 2020 16:06:07

@Mario62RUS 1. No todo el mundo usa Yoast SEO. A algunos les molesta la carga adicional que trae. Es como un cáncer para tu interfaz de administración. 2. Sí, las cosas han cambiado desde la 5.0 y Gutenberg. Este código debería revisarse.

Ihor Vorotnov Ihor Vorotnov
11 may 2020 17:49:53

ten en cuenta que en WP 6.4 hay un interruptor para desactivar los adjuntos, esta respuesta no evita que aparezca en el mapa del sitio de WP core, no detiene los endpoints de la API REST de adjuntos que contienen la URL, no desactiva los enlaces permanentes feos de las páginas de adjuntos, ni oculta la opción en las interfaces de galería/imagen/biblioteca de medios, etc.

Tom J Nowell Tom J Nowell
13 ene 2024 21:18:01
Mostrar los 1 comentarios restantes
1
10

Si deseas deshabilitar completamente las páginas de medios, deberías usar un código de respuesta 404 en lugar de redirección. Esto se puede hacer con el siguiente código:

function wpse237762_set_404() {
    if (is_attachment()) {
        global $wp_query;
        $wp_query->set_404();
        status_header(404);
    }
}

// Esto mostrará 404 en la página de adjuntos
add_filter('template_redirect', 'wpse237762_set_404');

// Esto mostrará 404 en lugar de redirigir a la página de adjuntos al manejar una barra diagonal al final
add_filter('redirect_canonical', 'wpse237762_set_404', 0);

Para mantener los enlaces a las páginas de adjuntos funcionando y redirigirlos directamente al archivo, puedes usar el siguiente código:

function wpse237762_change_attachment_link($url, $id) {
    $attachment_url = wp_get_attachment_url($id);
    if ($attachment_url) {
        return $attachment_url;
    }
    return $url;
}

add_filter('attachment_link', 'wpse237762_change_attachment_link', 10, 2);

Para evitar que las páginas de adjuntos reserven slugs de páginas normales, puedes usar este código para establecer todos los nuevos slugs de adjuntos como aleatorios (UUIDv4 en este caso)

function wpse237762_unique_slug($slug, $post_ID, $post_status, $post_type, $post_parent, $original_slug) {
    if ($post_type === 'attachment') {
        return str_replace('-', '', wp_generate_uuid4());
    }
    return $slug;
}

add_filter('wp_unique_post_slug', 'wpse237762_unique_slug', 10, 6);

Esto evitará que una imagen llamada products.jpeg reserve la URL https://example.com/products. Eso resultaría en que una página llamada Productos obtenga la URL https://example.com/products-2, lo cual obviamente no sería ideal.

He reunido este código en el plugin Disable Attachment Pages, que también incluye una herramienta para aleatorizar los slugs existentes de adjuntos para que no causen problemas en el futuro.

20 may 2021 15:45:05
Comentarios

Advertencia. Esta línea add_filter('redirect_canonical', 'wpse237762_set_404', 0); también deshabilita las redirecciones de enlaces cortos de WordPress como tudominio.com/?p=2570

Nicolas Guérinet Nicolas Guérinet
1 nov 2023 11:28:38
0

Para aquellos que no usan plugins o prefieren un método ligero. Esto podría ser de ayuda.

Este método redirige los archivos adjuntos al archivo exacto en lugar de a la página de adjuntos y es el método que utilizan algunos plugins.

Para probarlo, coloca el siguiente código en el archivo functions.php de tu tema.

add_action( 'template_redirect', 'test_attachment_redirect', 10 );
function test_attachment_redirect() {
    if( is_attachment() ) {
        $url = wp_get_attachment_url( get_queried_object_id() );
        wp_redirect( $url, 301 );
    }
    return;
}

Referencia: is_attachment wp_redirect

6 nov 2020 07:10:09
0

Esto ahora es predeterminado en WP 6.4 y se puede configurar usando la opción wp_attachment_pages_enabled. Los cambios son posibles

  1. vía CLI: wp option set wp_attachment_pages_enabled 0|1
  2. visitando /wp-admin/options.php
  3. a través de un pequeño plugin

Cuando esta opción se establece en 0:

  • las páginas de adjuntos ya no aparecen en la GUI como una opción al usar imágenes/galerías
  • las URLs de las páginas de adjuntos redirigen a sus archivos originales para usuarios conectados
  • los sitemaps/endpoints REST API etc usan la URL original de las subidas

Más detalles en https://make.wordpress.org/core/2023/10/16/changes-to-attachment-pages/

13 ene 2024 21:28:27