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 filtres

    Le 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 :

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');
function rp_custom_login_url($url) { 
    return 'https://romain.planel.fr'; 
} 
add_filter( 'login_headerurl', 'rp_custom_login_url' );

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

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

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

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

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

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.

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 = "&copy; " . $copyright_dates[0]->firstdate;
      if($copyright_dates[0]->firstdate != $copyright_dates[0]->lastdate) {
         $copyright .= '-' . $copyright_dates[0]->lastdate;
      }
   $output = $copyright;
   }
return $output;
}

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 :

Le Monde

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

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

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

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

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

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

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

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

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.

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 : 2020

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

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

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

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

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 de messagerie ne sera pas publiée.

 
Copyright © 2016-2020 - Romain PLANEL - Tous droits réservés.