¿URL de biblioteca multimedia no deseadas en publicaciones?

14

Cuando busqué en Google un poco de contenido en nuestro blog, ¡me di cuenta, para mi sorpresa y horror, de que las imágenes individuales de la Biblioteca de Medios de alguna manera están generando sus propias URL que Google está encontrando e indexando de alguna manera!

Por ejemplo, esta página:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Contiene esta imagen:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Lo cual está bien, pero de alguna manera esta imagen también está expuesta como su propia URL y "publicación":
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

Esto es extremadamente no deseado!

Verifiqué la configuración de medios en WordPress y busqué en la biblioteca de medios, pero no puedo encontrar una manera de desactivar este comportamiento. ¿Algunas ideas?

Jeff Atwood
fuente

Respuestas:

7

Lo que está diciendo que no es deseado es solo una funcionalidad normal en WordPress y no se puede eliminar. Sin embargo, hay cosas que puede hacer para señalar la URL no deseada a algo más útil.

Aquí hay una publicación en el foro sobre este tema con algunas correcciones interesantes y una descripción de lo que está sucediendo:

http://wordpress.org/support/topic/disable-attachment-posts-without-remove-the-medias

Los archivos adjuntos son en realidad un tipo de publicación, por lo que ocupan una fila en la tabla de publicaciones como lo hace una publicación, siempre tendrán una URL disponible, de la misma manera que las publicaciones.

es decir. example.com/?p=16

16 es el ID de la publicación y, al igual que las publicaciones, siempre estarán disponibles mediante una URL como la anterior. Los archivos multimedia no se consideran simplemente archivos, tienen un contenido más parecido a un elemento, ya que tienen un registro en la tabla de publicaciones que les corresponde, al igual que una publicación o página.

Lo que está preguntando es cómo detener la existencia automática de URL de archivos adjuntos individuales para cada elemento de medios (no es realmente posible porque son esencialmente un tipo de publicación, lo que significa que siempre serán una URL para ellos).

Sin embargo, aquí hay una sugerencia: tome cualquier archivo de plantilla (tema), index.php, page.php, archive.php o lo que quiera, cree una copia y cámbiele el nombre a image.php o attach.php si desea apuntar a todos los medios . Abra el archivo, elimine el bucle, guarde ... y cargue una de las páginas de archivos adjuntos (como la que proporcionó anteriormente).

Mi punto es que todo lo que necesita hacer es crear un archivo de plantilla de archivo adjunto: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

Si quisiera, en teoría, podría colocar una redirección en la plantilla de archivo adjunto para que las vistas de archivos adjuntos individuales se redirijan (o cualquier otra cantidad de cosas que desee hacer).

Alguien publicó exactamente eso, un attachment.phpmensaje que va a su /themescarpeta para redirigir:

<?php
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.get_permalink($post->post_parent));
?>
Brady
fuente
6

Supuse que ya era hora de que al menos intentara borrar las páginas adjuntas.

Aquí está mi primer intento ...

add_filter( 'attachment_fields_to_edit', 'wpse_25144_attachment_fields_to_edit', 10000, 2 );

function wpse_25144_attachment_fields_to_edit( $form_fields, $post ) {

    $url_type = get_option( 'image_default_link_type' );

    if( 'post' == $url_type ) {
        update_option( 'image_default_link_type', 'file' );
        $url_type = 'file';
    }

    $form_fields['url'] = array(
        'label'      => __('Link URL'),
        'input'      => 'html',
        'html'       => wpse_25144_image_link_input_fields( $post, $url_type ),
        'helps'      => __('Enter a link URL or click above for presets.')
    );

    return $form_fields;
}

function wpse_25144_image_link_input_fields($post, $url_type = '') {

    $file = wp_get_attachment_url($post->ID);

    if( empty( $url_type ) )
        $url_type = get_user_setting( 'urlbutton', 'file' );

    $url = '';
    if( $url_type == 'file' )
        $url = $file;

    return "
    <input type='text' class='text urlfield' name='attachments[$post->ID][url]' value='" . esc_attr($url) . "' /><br />
    <button type='button' class='button urlnone' title=''>" . __('None') . "</button>
    <button type='button' class='button urlfile' title='" . esc_attr($file) . "'>" . __('File URL') . "</button>
";
}

add_filter( 'query_vars', 'wpse_25144_query_vars', 10000, 2 );

function wpse_25144_query_vars( $wp_query_vars ) {

    foreach( $wp_query_vars as $i => $qv ) {
        if( in_array( $qv, array( 'attachment', 'attachment_id' ) ) )
            unset( $wp_query_vars[$i] );
    }
    return $wp_query_vars;
}

add_filter( 'attachment_link', 'wpse_25144_attachment_link', 10000, 2 );

function wpse_25144_attachment_link( $link, $id ) {

    $link = wp_get_attachment_url( $id );
    return $link;
}

add_filter( 'rewrite_rules_array', 'wpse_25144_rewrite_rules_array', 10000 );

function wpse_25144_rewrite_rules_array( $rewriteRules ) {

    foreach( $rewriteRules as $pattern => $query_string ) {
        if( false === strpos( $pattern, 'attachment' ) && false === strpos( $query_string, 'attachment' ) )
            continue;
        unset( $rewriteRules[$pattern] );
    }

    return $rewriteRules;
}

Elimina las reescrituras de archivos adjuntos, actualiza los enlaces de archivos adjuntos para que apunten al archivo adjunto (en lugar de su enlace permanente), elimina los vars de consulta de archivos adjuntos y también elimina la capacidad de vincular archivos adjuntos al enlace permanente de archivos adjuntos ahora inexistente.

Abierto a la crítica. :)

t31os
fuente
5

Puede hacer una redirección 301 para los archivos adjuntos a la página de sus padres de la siguiente manera:

<?php
/*
Plugin Name: Redirect Attachments to Parent (301)
Plugin URI: http://wordpress.stackexchange.com/questions/25144/unwanted-media-library-urls-in-posts
Description: Redirect any attachemnt pages to their parent's page with 301 redirection
Author: Ashfame
Version: 0.1
Author URI: http://www.ashfame.com/
*/

add_action( 'template_redirect', 'attachment_post_type_redirection' );

function attachment_post_type_redirection() {
    global $wp_query;       
    if ( is_attachment() ) {            
        wp_redirect( get_permalink( $wp_query->post->post_parent ), 301 );
    }       
}
Ashfame
fuente
5

El complemento SEO de Yoast tiene "Redirigir URL de archivos adjuntos a la URL de publicación principal" en enlaces permanentes . Usé esta opción para resolver el problema. El complemento es asombroso.

Zach Shallbetter
fuente
buena idea, pero no estoy seguro de querer un complemento multifunción completo para resolver este problema en particular ...
Jeff Atwood
0

Esta es una respuesta relacionada de una pregunta relacionada: deshabilitar completamente las páginas adjuntas

Este método modifica las reglas de reescritura.

Puede filtrar las reglas de reescritura predeterminadas y eliminarlas para los archivos 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 los archivos adjuntos.

/wordpress//a/271089/71608

italiansoda
fuente