Accueil » Conseils & tutoriels sites internet » Tutoriels Wordpress » WordPress : rediriger une image vers l’article associé

WordPress : rediriger une image vers l’article associé

Les images à la une sous WordPress sont très utiles. Elles permettent de dyamiser l’en-tête d’un article, tout en fournissant un contenu de type média qui sera affiché lors du partage vers les réseaux sociaux.
Ces images – travaillées préalablement pour des soucis de poids et de design – sont donc la première chose que l’internaute verra, voire même avant d’accéder à votre site WordPress, à supposer que celui-ci provienne d’un réseau social.
Par défaut, WordPress crée des pages pour chaque média. Il est donc possible de visualiser une page particulièrement inutile et de très faible qualité en terme de référencement naturel. L’idéal serait soit de la supprimer, soit de faire une simple redirection vers l’article associé.

La suppression risquant d’engendrer de multiples pages 404, autant privilégier la redirection vers l’article associé. De la sorte, il ne sera plus possible d’afficher la page, et si l’image n’est plus associée à un article, redirigeons vers la page d’accueil.

Images et commentaires spam sous WordPress

Beaucoup de sites WordPress n’acceptent pas les commentaires, car ils n’ont pas à vocation de devenir des blogs à l’instar du présent site. La définition d’un site « vitrine » est donc de ne pas avoir à échanger avec les internautes, d’autant plus que la modération prend du temps, parfois non négligeable dans une journée de travail.

Par-dessus le marché, le fait d’accepter les commentaires sur un site WordPress sous-entend que vous avez installé des plugins anti-spam comme Akismet, Cerber Security…

Si vous considérez ne pas avoir besoin de ces plugins parce que vous n’acceptez pas les commentaires sur votre contenu WordPress, détrompez-vous ! Beaucoup de thèmes ne parviennent pas à bloquer les commentaires, essentiellement sur les pages affichant les médias. Il est dans ce cas utile – en plus des plugins – de rediriger l’internaute vers l’article.

Le dernier site WordPress que j’ai vu sans plugin anti-spam et sans cette petite règle de sécurité avait vu ses médias spammés de plus de 4000 commentaires, tous indésirables, en provenance de robots russes… Il a fallu tous les nettoyer avant d’ajouter ces règles restrictives ou de sécurité.

Redirection des pages des images

Comme de bien entendu, vous devez disposer d’un thème enfant, chose que je recommanderai systématiquement. Si ça n’est pas le cas, retrouvez ici notre tutoriel de création de thème enfant sous WordPress.

Redirections vers la page d’accueil

Il nous faut donc le functions.php, nous allons y ajouter une fonction.

update_option( 'image_default_link_type', 'file' );
function teamever_redirect_attachment_page() {
if ( is_attachment() ) {
global $post;
wp_redirect( esc_url( home_url( '/' ) ), 301 );
}
}
add_action( 'template_redirect', 'teamever_redirect_attachment_page' );

En premier lieu, update_option permet de définir les liens des médias vers un fichier par défaut. Avec le thème Virtue que j’utilise sur ce site, les médias sont redirigés vers un lien permettant de les afficher dans une popup, ce qui d’une part est pratique en UX design, d’autre part sécurise en partie les pages des médias.

Vous pouvez cependant modifier les liens associés à vos médias nativement sous WordPress selon l’éditeur que vous utilisez (Gutenberg, ou tout autre plugin de blocs HTML).

WordPress dispose nativement de la fonction is_attachment, qui permet de savoir si la page affichée est celle d’un média. Comme le précise le codex, cela permet de savoir si le contenu affiché est un média uploadé depuis l’administration de votre site WordPress. Le codex précise également que le média peut disposer de sa propre page, et c’est justement ce que nous désirons rediriger.

Et enfin, puisque nous savons si oui ou non nous affichons la page associé à un média, nous pouvons donc utiliser wp_redirect() pour rediriger ici vers la page d’accueil.

Redirections vers l’article associé

Bon.

Soyons plus logique. L’idéal serait de rediriger vers l’article auquel le média est associé. Et en imaginant que l’article ait été modifié et que l’image n’y soit plus associée, autant tester cela et rediriger dans ce cas vers la page d’accueil. Il y a donc une condition if/else, ce qui nous donne ceci désormais :

/**
 * Redirect image templates to associated post
 * @see https://www.team-ever.com/wordpress-rediriger-une-image-media-vers-article-associe
*/
function teamever_redirect_attachment_page() {
    if ( is_attachment() ) {
        wp_redirect( esc_url( home_url( '/' ) ), 301 );
        $post = get_post(get_the_ID());
        $parent_id = $post->post_parent;
        if (isset($parent_id) && $parent_id != 0) {
            $parent_permalink = get_permalink( $parent_id );
            if (isset($parent_permalink) && $parent_permalink) {
                wp_redirect( esc_url( $parent_permalink ), 301 );
            } else {
                wp_redirect( esc_url( home_url( '/' ) ), 301 );
            }
        } else {
            wp_redirect( esc_url( home_url( '/' ) ), 301 );
        }
    }
}

Nous avons donc grâce à la globale $post toutes les informations de l’objet actuel, à savoir donc une image. Une fois cette information enregistrée, nous en extrayons le parent, qui est l’article ou la page liée. WordPress nous fournit le lien de cet article ou de cette page à l’aide de la fonction get_permalink().

Si d’aventure get_permalink() nous ressort une information, nous pouvons rediriger l’internaute dessus. Le cas échéant, si aucun lien (permalien) n’est existant, autant rediriger vers la page d’accueil. Cela signifiera dans ce dernier cas que l’image n’est pas associée à un contenu précis, mais que nous bloquerons tout de même l’affichage des pages des médias en réalisant une redirection simple.

Et voilà comment en quelques lignes de code nous avons redirigé les pages « attachment » ou médias vers les articles ou pages associés !

Une fois l’identifiant du parent trouvé, il est même possible de rediriger uniquement vers des articles en incluant dans la fonction des conditions natives de WordPress telles que is_single() (pour définir s’il s’agit d’un article) ou is_page() (qui précise si l’on est dans une page).

Imprimer Imprimer
Suivre Cyssoo:

Développeur - formateur

Je cherche à display errors le monde, vous auriez pas la doc' ? Follow me on Twitter !

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.