URL de la médiathèque indésirable dans les publications?

12

En cherchant un peu dans Google pour rechercher du contenu sur notre blog, j'ai été choqué et horrifié par le fait que certaines images de la médiathèque génèrent en quelque sorte leurs propres URL que Google est en train de trouver et d'indexer!

Par exemple, cette page:
enlace

Contient cette image:
enlace

Ce qui est correct, mais cette image est également présentée sous sa propre URL et "post":
enlace

C'est extrêmement indésirable!

J'ai vérifié les paramètres de média dans WordPress et parcouru la médiathèque, mais je ne trouve pas le moyen de désactiver ce comportement. Des idées?

    
posée Jeff Atwood 06.08.2011 - 11:49

5 réponses

7

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

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

enlace

  

Les pièces jointes sont en réalité un type de publication. Elles prennent donc une ligne dans la table des publications, comme une publication. Elles auront toujours une URL disponible, de la même manière que les publications.

     

ie. example.com/?p=16

     

16 correspond à l'identifiant de publication et, comme pour les publications, ils seront toujours disponibles via une URL similaire à celle indiquée ci-dessus. Les fichiers multimédias ne sont pas simplement considérés comme des fichiers, ils ont un contenu plus important, comme élément, en ce sens qu’ils ont dans la table des articles un enregistrement qui leur correspond, tout comme un article 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 de média (ce n’est pas vraiment possible, car c’est essentiellement un type de publication, ce qui signifie qu’elles seront toujours une URL pour elles).

     

Cependant, voici une suggestion: prenez un fichier modèle (thème), index.php, page.php, archive.php ou ce que vous préférez, créez une copie et renommez-le en image.php ou attachment.php si vous le souhaitez. cibler tous les médias. Ouvrez le fichier, supprimez la boucle, sauvegardez ... et chargez l’une des pages de pièces jointes (comme celle que vous avez fournie précédemment).

     

Mon objectif étant que tout ce que vous avez à faire est de créer un fichier de modèle de pièce jointe:    enlace
enlace

     

Si vous le souhaitez, vous pouvez théoriquement placer une redirection dans le modèle de pièce jointe afin de rediriger les vues de pièces jointes individuelles (ou toute autre chose que vous souhaitiez effectuer).

Quelqu'un a posté cela, un attachment.php qui va dans votre dossier /themes pour rediriger:

<?php
header ('HTTP/1.1 301 Moved Permanently');
header ('Location: '.get_permalink($post->post_parent));
?>
    
réponse donnée Brady 06.08.2011 - 12:42
6

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

Voici mon premier coup de feu ...

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 les réécritures des pièces jointes, met à jour les liens des pièces jointes de manière à pointer vers le fichier de pièce jointe (au lieu de son lien permanent), supprime les vars de requête de pièce jointe et supprime également la possibilité de lier des pièces jointes au permalien désormais inexistant des pièces jointes.

Ouvert à la critique. :)

    
réponse donnée t31os 06.08.2011 - 15:45
5

Vous pouvez effectuer une redirection 301 des pièces jointes vers la page de leur parent, comme suit:

<?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 );
    }       
}
    
réponse donnée Ashfame 06.08.2011 - 14:05
5

Le plug-in SEO de de Yoast dispose de la mention "Rediriger l'URL des pièces jointes vers l'URL du message parent" sous liens permanents . J'ai utilisé cette option pour résoudre le problème. Le plugin est incroyable.

    
réponse donnée Zach Shallbetter 06.08.2011 - 15:07
0

Ceci est une réponse à une question connexe: Désactiver les pages de pièces jointes de manière exhaustive

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

  

Vous pouvez filtrer les règles de réécriture par défaut et les supprimer pour les 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 votre   permaliens une fois. WordPress va générer de nouvelles règles sans rien   liées aux pièces jointes.

enlace

    
réponse donnée italiansoda 13.07.2017 - 18:41

Lire d'autres questions sur les étiquettes