URL de bibliothèque multimédia indésirables dans les publications?

14

En faisant un peu de recherche de contenu Google sur notre blog, j'ai remarqué à mon grand choc et horreur que des images individuelles de la médiathèque génèrent en quelque sorte leurs propres URL que Google trouve et indexe en quelque sorte!

Par exemple cette page:
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/

Contient cette image:
http://blog.stackoverflow.com/wp-content/uploads/bio-jarrod-dixon.jpg

Ce qui est bien, mais d'une certaine manière, cette image est également exposée en tant que sa propre URL et "publication":
http://blog.stackoverflow.com/2008/08/special-development-team-podcast/bio-jarrod-dixon/

C'est extrêmement indésirable!

J'ai vérifié les paramètres multimédias dans WordPress et parcouru la bibliothèque multimédia, mais je n'arrive pas à trouver un moyen de désactiver ce comportement. Des idées?

Jeff Atwood
la source

Réponses:

7

Cette chose que vous dites indésirable n'est qu'une fonctionnalité normale sous WordPress et ne peut pas être supprimée. Cependant, vous pouvez faire certaines choses pour pointer l'URL indésirable vers quelque chose de plus utile.

Voici un article de forum sur ce problème avec quelques correctifs intéressants et une description de ce qui se passe:

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

Les pièces jointes sont en fait un type de publication, donc elles prennent une ligne dans le tableau des publications comme le fait une publication, elles auront toujours une URL disponible, de la même manière que les publications.

c'est à dire. example.com/?p=16

16 est l'identifiant du message, et comme les messages, ils seront toujours disponibles par une URL comme celle ci-dessus. Les fichiers multimédias ne sont pas simplement considérés comme des fichiers, ils ont plus d'élément de contenu, car ils ont un enregistrement dans la table des publications qui leur correspond, tout comme une publication ou une page.

Ce que vous demandez, c'est comment arrêter l'existence automatique d'URL de pièces jointes individuelles pour chaque élément multimédia (ce n'est pas vraiment possible car elles sont essentiellement un type de publication, ce qui signifie qu'elles seront toujours une URL pour elles).

Voici une suggestion cependant, prenez n'importe quel fichier de modèle (thème), index.php, page.php, archive.php ou tout ce que vous voulez, créez une copie et renommez-la en image.php ou attachment.php si vous souhaitez cibler tous les médias . Ouvrez le fichier, supprimez la boucle, enregistrez ... et chargez l'une des pages de pièces jointes (comme celle que vous avez fournie auparavant).

Mon point étant, tout ce que vous devez faire est de créer un fichier de modèle de pièce jointe: http://codex.wordpress.org/Template_Hierarchy
http://codex.wordpress.org/Template_Hierarchy#Attachment_display

Si vous le souhaitez, en théorie, vous pouvez placer une redirection dans le modèle de pièce jointe afin que les vues de pièces jointes individuelles soient redirigées (ou un certain nombre d'autres choses que vous voudrez peut-être faire).

Quelqu'un a posté juste ça, un attachment.phpqui va dans votre /themesdossier pour rediriger:

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

Je pensais qu'il était temps que j'essaye au moins d'effacer les pages de pièces jointes.

Voici ma première photo ...

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;
}

Supprime la réécriture des pièces jointes, met à jour les liens des pièces jointes pour pointer vers le fichier des pièces jointes (au lieu de son permalien), supprime les variables de requête de pièces jointes et supprime également la possibilité de lier les pièces jointes au permalien des pièces jointes désormais inexistant.

Ouvert à la critique. :)

t31os
la source
5

Vous pouvez effectuer une redirection 301 pour les pièces jointes à la page de leurs parents comme ceci:

<?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
la source
5

Le plugin SEO de Yoast a "Rediriger les URL des pièces jointes vers l'URL de publication parent" sous les permaliens . J'ai utilisé cette option pour résoudre le problème. Le plugin est incroyable.

Zach Shallbetter
la source
bonne idée, mais je ne suis pas sûr de vouloir un plugin multifonction pour résoudre ce problème particulier ..
Jeff Atwood
0

Il s'agit d'une réponse liée à une question connexe: désactiver complètement les pages de pièces jointes

Cette méthode modifie les règles de réécriture.

Vous pouvez filtrer les règles de réécriture par défaut et supprimer celles des pièces jointes:

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' );  

N'oubliez pas de réenregistrer vos permaliens une fois. WordPress générera de nouvelles règles sans rien lié aux pièces jointes.

/wordpress//a/271089/71608

italiansoda
la source