WordPress : rediriger la page d'attachement vers l'article auquel les fichiers médias appartiennent photo

WordPress : rediriger la page d’attachement vers l’article parent

WordPress publie par défaut une page d’attachement pour chaque fichier média que vous publiez sur votre site.

En règle générale, un fichier média (image, vidéo, autre) appartient à un article: on attache souvent ce type de fichier lors de la rédaction des articles, pour les insérer dans le corps des billets.

Le problème est donc que WordPress crée gentiment une page dédiée à chaque média publié. Cette page ne contient aucun contenu, à part afficher le média en question, ce qui n’est pas vraiment idéal au point de vue SEO puisque l’on se retrouve avec énormément de pages mais qui ne seront jamais indexées au vu du contenu inexistant. S’il est donc superflu d’avoir ces pages, autant s’en séparer!

C’est là que nous allons tenter d’être malin : pourquoi ne pas rediriger ces pages d’attachement vers l’article auquel ces fichiers media appartiennent?

Jusqu’à très récemment, j’utilisais le module Origin de The SEO Framework, qui fonctionne très bien si le média a été uploadé sur un article. La page d’attachement est alors automatiquement redirigée vers l’article.

Le hic, c’est que si le fichier média a été uploadé directement depuis la page WP Admin > Média, alors nous sommes redirigé vers /wp-admin, ce qui ne fait aucun sens.

Voici donc la solution que j’utilise sur le site:

<?php
/*
Script Name: Redirect attachment page to parent post.
Script URI: https://www.skyminds.net/?p=32314
Description: Redirects attachment to parent post (if it exists), or redirects to the homepage otherwise.
Version: 2.6.0
Author: Matt Biscay
Author URI: https://mattbiscay.com
*/
add_action( 'template_redirect', 'sky_redirect_attachment_to_post' );
function sky_redirect_attachment_to_post(){
  // if not an attchment, bail out early
  if( !is_attachment() ) {
    return;
  }
  // check if parent post is defined
  if( isset( $post ) && isset( $post->post_parent ) && is_numeric( $post->post_parent ) && ( $post->post_parent != 0 ) ) :
    // redirect to parent post
    wp_redirect( esc_url( get_permalink( $post->post_parent ) ) ); exit;
  else: // media has been uploaded through the Media page or is unattached to a specific post
    // redirect to homepage
    wp_redirect( esc_url( home_url( '/' ) ) ); exit;
    // or redirect to the media itself
    // wp_redirect( esc_url( wp_get_attachment_url() ) ); exit;
  endif;
}Code language: HTML, XML (xml)

Ce code est à copier-coller dans le fichier functions.php de votre thème enfant. Vous pouvez également l’enregistrer en tant que plugin.

Une fois activé, si vous visionnez l’adresse d’une page d’attachement, vous devriez être redirigé sur l’article parent.

Notez que je vous ai mis 2 possibilités pour la redirection lorsque le media n’a pas été attaché à un article: une redirection vers la page d’accueil ou alors vers le fichier média directement.

A vous de choisir ce qui vous correspond le mieux :)

Installer LineageOS (Android 9.0 Pie) sur le OnePlus One photo

Installer LineageOS (Android 11) sur le OnePlus One

Aujourd’hui, j’ai installé LineageOS (Android 11) sur mon OnePlus One, histoire de lui redonner un second souffle et de bénéficier des dernières mises à jour de sécurité Android.

Le OnePlus One (OPO) est sorti en mai 2014, il a donc quelques années derrière lui et tourne sous CyanogenMod 13, c’est-à-dire Android 6.0.1 (Marshmallow). Autant dire qu’il n’a pas vu de correctifs de sécurité depuis quelques années!

Si votre téléphone possède déjà LineageOS, vous pouvez vous rendre directement à l’étape 5.

Étape 1: activer le mode développeur

Sur le téléphone, on commence par activer le mode développeur:

  1. Ouvrez Paramètres > A propos du téléphone.
  2. Tapez 7 fois sur le numéro de build.
  3. Vous venez d’activer le mode développeur!

Grâce au mode développeur, vous avez maintenant accès à des options qui n’étaient pas visibles auparavant et qui vont nous être nécessaires.

Étape 2 : activer le mode déboggage USB

Pour activer le débogage USB:

  1. Ouvrez Paramètres > Système > Options pour les développeurs
  2. Activez l’option Débogage Android

Étape 3 : installation d’ADB

Android Debug Bridge (adb) est un outil de développement qui facilite la communication entre un appareil Android et un ordinateur. Cette communication s’effectue soit par câble USB, soit en WiFi.

Branchez votre OnePlus One en USB.

Téléchargez les derniers pilotes ADB issus du SDK Android puis décompressez l’archive.

Ouvrez le terminal, rendez-vous dans le répertoire platform-tools et listez ensuite votre téléphone avec cette commande:

./adb devices

Résultat:
List of devices attached
b4be4c53	deviceCode language: PHP (php)

Notre OnePlus One est bien détecté. On reboot en mode fastboot:

./adb reboot bootloader

On liste les appareils détectés par fastboot:

./fastboot devices

Résultat:
b4be4c53    fastboot

Attention, la commande suivante va effacer vos données donc pensez à sauvegarder les données importantes de votre téléphone avant!

On déverrouille le bootloader avec:

./fastboot oem unlock
                                                    OKAY [  0.168s]
 Finished. Total time: 0.168s

Lire la suite

Javascript : afficher le contenu d'un bloc HTML après un délai variable photo

JavaScript: sélectionner et désélectionner toutes les cases à cocher d’un coup

Il nous arrive souvent d’avoir toutes les cases (checkboxes) d’un formulaire ou d’un tableau à cocher.

Parfois, la fonctionnalité Sélectionnez tout / Désélectionner tout n’est pas implémentée donc voici comment faire, à l’aide de JavaScript.

Cocher toutes les cases

Supposons que toutes les cases à cocher de notre tableau se nomment post[], voici comment cocher toutes les cases, en utilisant vanilla JS :

var ele=document.getElementsByName('post[]');  
for(var i=0; i<ele.length; i++){  
  if(ele[i].type=='checkbox')  
    ele[i].checked=true;  
}  Code language: JavaScript (javascript)

Décocher toutes les cases

Inversement, on peut modifier le code précédent avec checked=false si l’on souhaite décocher toutes les cases:

var ele=document.getElementsByName('post[]');  
  for(var i=0; i<ele.length; i++){  
    if(ele[i].type=='checkbox')  
      ele[i].checked=false;  
  }Code language: JavaScript (javascript)

Fonction et bouton : Sélectionner tout

Maintenant, voyons comment nous pouvons intégrer notre code dans une fonction, que nous pourrons associer à un bouton “Sélectionner tout”:

function SelectAll(){  
  var ele=document.getElementsByName('post[]');  
  for(var i=0; i<ele.length; i++){  
  if(ele[i].type=='checkbox')  
    ele[i].checked=true;  
  }  
}  Code language: JavaScript (javascript)

Et notre bouton pourra être intégré comme ceci:

<input type="button" onclick='SelectAll()' value="Select All"/>  Code language: HTML, XML (xml)

Fonction et bouton : Désélectionner tout

Et le pendant: la fonction et le bouton qui permettent de désélectionner toutes les cases à cocher:

function deSelectAll(){  
  var ele=document.getElementsByName('post[]');  
  for(var i=0; i<ele.length; i++){  
    if(ele[i].type=='checkbox')  
      ele[i].checked=false;  
  }  
}      Code language: JavaScript (javascript)

Et voici le code HTML du bouton:

<input type="button" onclick='deSelectAll()' value="Deselect All"/>  Code language: HTML, XML (xml)

J’utilise souvent le premier bout de code sans les fonctions, ni le HTML (sauf si je développe une page d’options particulière), directement dans la console JavaScript du navigateur. C’est un gain de temps considérable sur certaines pages.

Bonnes sélections!