WordPress est un CMS (Content Management System) très utilisé sur internet, environ 60% des CMS tournent sous WordPress actuellement. Je l’utilise personnellement pour ce site mais aussi professionnellement.

J’ai référencé une liste de plusieurs portions de code source appelé Snippet ou Hook pour personnaliser WordPress, il est nécessaire de rajouter le code dans le fichier functions.php à la racine du thème que vous utilisez.

Il existe deux types de Hook dans WordPress :

  • les actionsIl est possible de rajouter facilement des fonctionnalités lorsque WordPress lance le processus de construction d’une page. Exemple simple, l’action « save_post » permet de réaliser des actions supplémentaires lors de la sauvegarde d’un post (article, page ou autre).Voici certaines des actions disponibles :
  • les filtresLe principe des filtres est de modifier une donnée construite par WordPress avant de l’afficher.
    Voici certains filtres utiles :

Vous retrouverez l’ensemble des actions et filtres disponible en fonction de la version de WordPress sur cette page.

Voici un liste de Hooks ou Snippets que vous pouvez mettre en place sur votre WordPress :

Changer le logo de la page d’administration

Vous pouvez personnaliser le logo présent sur la page de connexion à l’administration.

function rp_my_custom_login_logo() { 
    echo '<style type="text/css"> h1 a { background-image:url('.get_bloginfo('template_directory').'/assets/img/logo.png) !important; } </style>'; 
} 
add_action('login_head', 'rp_my_custom_login_logo');
Modifier le lien sur le logo de la page de connexion d’administration
function rp_custom_login_url($url) { 
    return 'https://romain.planel.fr'; 
} 
add_filter( 'login_headerurl', 'rp_custom_login_url' );
Bloquer la console d’administration wordpress pour les Non Administrateurs

Ce code redirige les utilisateurs (autres que les administrateurs) sur la homepage lorsqu’il accède à l’administration wordpress.

function rp_blockusers_init() { 
    if ( is_admin() && ! current_user_can( 'administrator' ) ) { 
        wp_redirect( home_url() ); 
        exit; 
    } 
} 
add_action( 'init', 'rp_blockusers_init' );
Ne pas afficher la barre d’administration wordpress pour les Non Administrateurs

Code à rajouter dans le fichier function.php :

function rp_no_admin_bar() { 
    if (!current_user_can('administrator') && !is_admin()) { 
        show_admin_bar(false); 
    } 
} 
add_action('after_setup_theme', 'rp_no_admin_bar');
Ajouter une taille d’image personnalisé

Dans notre exemple, j’ajoute une nouvelle taille nommé « taille-perso » de 350×200 pixels.

if ( function_exists( 'add_image_size' ) ) {
    add_image_size( 'taille-perso', 350, 200, true ); 
}
function rp_my_image_sizes($sizes) {
        $addsizes = array(
                "taille-perso" => __( "Taille Perso")
                );
        $newsizes = array_merge($sizes, $addsizes);
        return $newsizes;
}
add_filter('image_size_names_choose', 'rp_my_image_sizes');
Insertion script Google Analytics

Insertion du code suivant, issu en grande partie de votre administration google analytics, dans le pied de page du site, en général le fichier footer.php  :

function rp_add_googleanalytics() { ?>
<!-- Global site tag (gtag.js) - Google Analytics -->
<script async src="https://www.googletagmanager.com/gtag/js?id=UA-XXXXXXXX-X"></script>
<script>
window.dataLayer = window.dataLayer || [];
function gtag(){dataLayer.push(arguments);}
gtag('js', new Date());
gtag('config', 'UA-XXXXXXXX-X');
</script>
<?php }
add_action('wp_footer', 'rp_add_googleanalytics');
Ajouter des champs personnalisé dans le profil utilisateur

Ajouter ce code dans le fichier functions.php

function rp_user_fields( $userfields) { 
     // On ajoute Instagram 
     $userfields['instagram'] = 'Instagram'; 
     //On ajoute Facebook
     $userfields['facebook'] = 'Facebook'; 
     return $userfields; 
}
add_filter('user_userfields','rp_user_fields',10,1); 

Et ce code dans le thème pour afficher les champs supplémentaires.

// On récupère l'auteur 
<?php 
$curauth = (isset($_GET['author_name'])) ? get_user_by('slug', $author_name) : get_userdata(intval($author));
?> 
// On affiche nos champs supplémentaires 
<p>Profil Instagram: <?php echo $curauth->instagram; ?></p>
<p>Profil Pinterest: <?php echo $curauth->pinterest; ?></p>
Supprimer des Widgets de l’administation WordPress

Ajouter ce code dans le fichier functions.php afin de supprimer en totalité ou partiellement les widgets de la page d’accueil d’administration WordPress

function rp_remove_dashboard_widgets() {
    global $wp_meta_boxes;
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_quick_press']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_incoming_links']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_right_now']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_plugins']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_drafts']);
    unset($wp_meta_boxes['dashboard']['normal']['core']['dashboard_recent_comments']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_primary']);
    unset($wp_meta_boxes['dashboard']['side']['core']['dashboard_secondary']);
} 
add_action('wp_dashboard_setup', 'rp_remove_dashboard_widgets' );
Ajouter des Custom Post Type dans les recherches WordPress

Ajouter ce code dans le fichier functions.php 

function rp_searchAll( $query ) {
 if ( $query->is_search ) { $query->set( 'post_type', array( 'nom_post_type_1','nom_post_type_2','nom_post_type_3')); 
} 
 return $query;
}
add_filter( 'the_search_query', 'rp_searchAll' );
Gérer les révisions d’articles

A chaque fois que vous enregistrez un article, une révision est rajouté, ainsi vous êtes capable de revenir aux précédentes version de votre article. Un enregistrement automatique, toute les 2 minutes, de l’article en cours d’édition est aussi disponible.

Il est possible de gérer le nombre de révisions disponibles ainsi que l’interval d’enregistrement automatique en rajoutant des paramètres dans le fichier wp-config.php

Modifier le nombre de versions de l’article à 8 :

define('WP_POST_REVISIONS', 8 );

Conserver toute les révisions :

define('WP_POST_REVISIONS', true );

Ne pas conserver de révisions :

define('WP_POST_REVISIONS', false );

Enregistrement automatique toute les 5 minutes (300 secondes) :

define('AUTOSAVE_INTERVAL', 300);
Autoriser l’upload d’un format de fichier spécifique dans les médias

Il est possible d’uploader différents formats de fichier dans les médias à savoir :

  • Fichiers images : .jpg, .png, .gif et .ico ;
  • Fichiers documents : .pdf, .doc, .docx, .ppt, .pptx, .pps, .ppsx, .odt, .xls, .xlsx, .psd ;
  • Fichiers audio : .mp3, .m4a, .ogg, .wav ;
  • Fichiers vidéo : .mp4, .m4v, .mov, .wmv, .avi, .mpg, .ogv, .3gp, .3g2 ;

Si vous désirez rajouter un format spécifique, voici le code à rajouter dans le fichier function.php

function rp_mimes_types($mime_types){
    $mime_types['pgp'] = 'application/pgp-signature';
    $mime_types['pretty good privacy'] = 'Pretty Good Privacy - Signature'; 
    return $mime_types;
}
add_filter('upload_mimes', 'rp_mimes_types', 1, 1);

Pour connaitre les différents Mimes Types, voici une liste disponible ici.

Afficher un copyright dynamique dans le pied de page

Ajouter, pour commencer, ce code à l’endroit ou vous voulez afficher le copyright (en général dans le fichier footer.php du template) :

<?php echo rp_binf_dynamic_copyright(); ?>

Ajouter, ensuite, ce code dans le fichier functions.php  

function rp_binf_dynamic_copyright() {
   global $wpdb;
   $copyright_dates = $wpdb->get_results("
      SELECT
      YEAR(min(post_date_gmt)) AS firstdate,
      YEAR(max(post_date_gmt)) AS lastdate
      FROM
      $wpdb->posts
      WHERE
      post_status = 'publish'
   ");
   $output = '';
   if($copyright_dates) {
      $copyright = "© " . $copyright_dates[0]->firstdate;
      if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
         $copyright .= '-' . $copyright_dates[0]->lastdate;
      }
   $output = $copyright;
   }
return $output;
}
Afficher un screenshot d’un site web

Il est possible de réaliser un screenshot 

function rp_screenshot_shortcode($atts) { 
    extract(shortcode_atts(array(
      "url" => "http://google.com", // URL du site a capturer
      "alt" => "Capture ecran", // attribut alt de la capture
      "w" => "450", // largeur de la capture
      "h" => "300" // hauteur de la capture
  ), $atts));
    return '<img src="http://s.wordpress.com/mshots/v1/' . esc_url($url) . '?w=' . (int)$w . '&h=' . (int)$h . '" alt="' . esc_attr($alt) . '"/>';
}
add_shortcode("webscreenshot", "rp_screenshot_shortcode");

Utilisez le shortcode suivant dans la page wordpress :

[_webscreenshot url="https://www.lemonde.fr/" alt="Le Monde" w="450" h="300"]

Voici l’exemple de la une du monde à cette instant :[webscreenshot url= »https://www.lemonde.fr/ » alt= »Le Monde » w= »450″ h= »300″]

Rediriger un utilisateur après son inscription

Il est possible de rediriger l’utilisateur sur une page après son inscription dans WordPress en rajoutant ce code dans functions.php en modifiant « page-de-redirection » par la page sur laquelle rediriger : 

function rp_redirect_members(){
    return home_url( '/page-de-redirection/' );
}
add_filter( 'registration_redirect', 'rp_redirect_members' );
Activer les Shortcodes dans le widget texte

Il est nécessaire d’ajouter ce code dans functions.php afin de permettre l’utilisation des shortcode dans le widget texte de wordpress : 

add_filter('widget_text','do_shortcode');
Activer le PHP dans le widget texte

Il est nécessaire d’ajouter ce code dans functions.php afin de permettre l’utilisation de PHP dans le widget texte de wordpress : 

function rp_php_text($text) {
 if (strpos($text, '<' . '?') !== false) { ob_start(); eval('?' . '>' . $text);
 $text = ob_get_contents();
 ob_end_clean();
 }
 return $text;
}
add_filter('widget_text', 'rp_php_text', 99);
Insérer l’image à la une dans le flux RSS

Ce code est à rajouter dans functions.php . 

function rp_rss_post_thumbnail($content) { global $post; $content =''; if(has_post_thumbnail($post->ID)) { $content = '< p>' . get_the_post_thumbnail($post->ID , 'full') . '</ p>' . get_the_excerpt(); } return $content; } add_filter('the_excerpt_rss', 'rp_rss_post_thumbnail'); add_filter('the_content_feed', 'rp_rss_post_thumbnail');
Limiter la longueur des titres

Ce code est à rajouter dans functions.php , il faut modifier le maxlength. 

function rp_title_chars_limit() { ?>
    <script>jQuery( 'input#title' ).attr( 'maxlength', 50 );</script>
<?php } 
add_action( 'admin_footer', 'rp_title_chars_limit' ); 
Modifier la longueur de l’extrait d’article

Par défaut le nombre de mot d’un extrait est de 50, nous allons le modifier à 20 mots dans notre exemple. Ce code est à rajouter dans functions.php .

function rp_post_excerpt($length) { return 20; } add_filter('excerpt_length', 'rp_post_excerpt');
Mettre une longueur minimum de mot dans un article

Nous allons mettre un minimum de 250 mots minimum. Ce code est à rajouter dans functions.php .

function rp_min_words($content){
    global $post;
    $num_words = 250;
    $content = $post->post_content;
    if (str_word_count($content) <  $num_words)
      wp_die( __('Votre article doit contenir au moins 300 mots pour être publié.') );
}
add_action('publish_post', 'rp_min_words');
Mettre une longueur minimum de caractères dans les commentaires

Nous allons mettre un minimum de 50 caractères minimum. Ce code est à rajouter dans functions.php .

function rp_minimum_comment_length( $commentdata ) {
    $minimumCommentLength = 50;
    if ( strlen( trim( $commentdata['comment_content'] ) ) < $minimalCommentLength ){
      wp_die( 'Les commentaires doivent contenir au minimum ' . $minimalCommentLength . ' caractères.' );
      }
    return $commentdata;
}
add_filter( 'preprocess_comment', 'rp_minimum_comment_length' );
Modifier la compression des images JPEG

Ce code est à rajouter dans functions.php .

add_filter( 'jpeg_quality', create_function( '', 'return 70;' ) );

Dans notre exemple nous avons mis la compression à 70 ce qui correspond à une compression de 30%. Cette modification sera effective sur les nouveaux JPEG que l’on ajoute mais pas sur les anciens.

Insérer l’année en cours à l’aide d’un shortcode

Ce code est à rajouter dans functions.php .

function rp_year_shortcode() {
    $year = date('Y');
    return $year;
}
add_shortcode('year', 'rp_year_shortcode');
[ year][/year]

Exemple d’affichage de l’année : [year][/year]

Exclure des articles ou des pages d’une recherche

Nous allons exclure les publications avec l’ID 15 et 18. Ce code est à rajouter dans functions.php .

function rp_SearchFilter($query) {
    if ($query->is_search) {
        $query->set('cat','15,18');
    }
    return $query;
}
add_filter('pre_get_posts','rp_SearchFilter');
Envoyer un mail lors de la mise en ligne d’une publication

Ce code est à rajouter dans functions.php .

function rp_email_friends( $post_ID ) {
   $destinataires = 'mail1@planel.fr, mail2@planel.fr';
   wp_mail( $destinataires , "Blog de Romain PLANEL", 'Une nouvelle publication est maintenant en ligne sur le site https://romain.planel.fr' );
   return $post_ID;
}
add_action( 'publish_post', 'rp_email_friends' );
Ajouter un texte par défaut à la création d’une page ou article

Ce code est à rajouter dans functions.php .

function rp_default_texte( $content ) {
    global $post_type;
    if ( $post_type == 'page' ) {
        $content = "Texte par défaut pour les pages";
    } else {
        $content = "Texte par défaut pour les articles";
    }
    return $content;
}
add_filter('default_content', 'rp_default_texte');
Ouvrir les liens externe du menu dans un nouvel onglet

Ce code est à rajouter dans functions.php . Si le lien ne commence pas par « https://romain.planel.fr », on rajoute un target à _blank

function rp_external_nav_link( $atts ) {
  // Si l'URL ne commence pas par mon domaine
  if ( ! preg_match( '/^https:\/\/romain\.planel\.fr/', $atts['href'] ) ) {
    $atts['target'] = '_blank';
  }
  return $atts;
}
add_filter( 'nav_menu_link_attributes', 'rp_external_nav_link' );
Supprimer « Privé » ou « Protégé » du titre d’une publication dont la visibilité est privé ou protégé

Lorsque vous créé une publication, vous pouvez modifier sa visibilité (rajouter un mot de passe pour « Protégé » ou en « Privé), le terme « Protégé » ou « Privé » est automatique rajouté devant le titre. A l’aide de ce code à rajouter dans functions.php  vous allez le supprimer.

function rp_removePrivatePrefix($format) {
  return '%s';
}
add_filter('private_title_format', 'rp_removePrivatePrefix');
add_filter('protected_title_format', 'rp_removePrivatePrefix');

0 commentaire

Laisser un commentaire

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