Un site WordPress sans plugins… Est-ce encore possible ?

Qui n’aime pas les plugins proposés sur le répertoire officiel de WordPress ou même via une plateforme externe ? Personne bien sûr !

Les plugins sont omniprésents voire indispensables pour ceux qui ne sont pas développeurs dans l’âme, ils sont généralement fiables et maintenus par des développeurs bienveillants, mais ils peuvent aussi ralentir considérablement votre site ou votre blog si vous les collectionnez de manière frénétique…

Un WordPress sans plugins ?

Un WordPress sans plugin o_O

Un WordPress sans aucun plugin ? NON ! Mais savez-vous que l’on peut facilement remplacer la présence de certains plugins par quelques lignes de code ? Nous allons voir ensemble comment se passer de certains plugins devenus un peu trop envahissants…

 

Quels intérêts à supprimer des plugins pour laisser place à du code en interne ? 
C’est certainement la question que vous devez vous poser ! Pourquoi s’embêter ? Voici les principales raisons :

  • ne pas être dépendant d’une tierce personne/plateforme/développeur
  • sortir des sentiers battus et obtenir un module totalement customisé
  • automatiser et ainsi gagner du temps si vous créez régulièrement des sites sous WordPress (via un thème enfant customisé ou même votre propre template)
  • réduire le temps de chargement dû aux nombreuses requêtes effectuées pour loader certains plugins (CSS, Javascript etc…)
  • corriger facilement les éventuelles incompatibilités puisque c’est vous qui l’avez codé, de ce fait, vous trouverez rapidement la solution !
  • ne plus perdre de temps à installer et à configurer certains plugins

 

De quels plugins peut-on facilement se passer ?

La liste pourrait être très longue, mais je vous propose de découvrir une sélection de fonctionnalités qui sont généralement utilisées par un grand nombre de sites WordPress, à commencer par :

 

1. Des boutons de partage sans plugin

Il existe de nombreux plugins de “social sharing”, certains sont simples, d’autres sont de vrais usines à gaz et certains sont vraiment intéressants… Le souci est qu’ils utilisent généralement du Javascript et génèrent de nombreuses requêtes pour chaque réseau social. Résultat des courses, ils peuvent réduire la performance de votre site !

La solution ? Ajouter du code dans le fichier functions.php de votre thème enfant, styliser l’apparence de vos boutons avec un peu de CSS (à placer dans le fichier style.css de votre thème enfant) et le tour est joué ! Adieu Share This, Shareaholic, Digg Digg etc… Si vous voulez essayer par vous-même, utilisez le code disponible ci-dessous et n’hésitez pas à apporter des modifications pour qu’il s’adapte à votre projet.

Voir le code pour le fichier <em>functions.php</em>
/*** BOUTONS DE PARTAGE SANS PLUGINS ***/

function my_sharing_buttons($content) {
    global $post;
    if(is_singular() || is_home()){
 
        // Récuperer URL de la page en cours 
        $myCurrentURL = urlencode(get_permalink());
 
        // Récuperer TITRE de la page en cours
        $myCurrentTitle = urlencode(get_the_title()); // correction du 9 février 2017
 
        // Récuperer MINIATURE si l'image à la une existe
        if(has_post_thumbnail($post->ID)) {
            $myCurrentThumbnail = wp_get_attachment_image_src(get_post_thumbnail_id( $post->ID ), 'full'); // correction du 9 février 2017
        }
        
        // Construction des URL de partage - correction du 9 février 2017 (url échapées)
        $twitterURL = esc_url( 'https://twitter.com/intent/tweet?text='.$myCurrentTitle.'&amp;url='.$myCurrentURL.'&amp;via=Votre-Pseudo' ); // indiquez ici votre pseudo sans le @
        $facebookURL = esc_url( 'https://www.facebook.com/sharer/sharer.php?u='.$myCurrentURL );
        $googleURL = esc_url( 'https://plus.google.com/share?url='.$myCurrentURL );
        $linkedInURL = esc_url( 'https://www.linkedin.com/shareArticle?mini=true&url='.$myCurrentURL.'&amp;title='.$myCurrentTitle );
        $pinterestURL = esc_url( 'https://pinterest.com/pin/create/button/?url='.$myCurrentURL.'&amp;media='.$myCurrentThumbnail[0].'&amp;description='.$myCurrentTitle );
        $email_share = esc_url( 'mailto:?subject=Regarde cet article !&BODY=Hey ! Je voulais partager avec toi cet article interressant : '.$myCurrentURL.'&amp;title='.$myCurrentTitle );
 
        // Ajout des bouton en bas des articles et des pages
        $content .= '<div class="partage-reseaux-sociaux">';
        $content .= __('<h5>Partagez Maintenant !</h5>'); // correction du 9 février 2017 : texte traduisible
        $content .= '<a class="msb-link msb-twitter" href="'.$twitterURL.'" target="_blank">Twitter</a>';
        $content .= '<a class="msb-link msb-facebook" href="'.$facebookURL.'" target="_blank">Facebook</a>';
        $content .= '<a class="msb-link msb-googleplus" href="'.$googleURL.'" target="_blank">Google+</a>';
        $content .= '<a class="msb-link msb-linkedin" href="'.$linkedInURL.'" target="_blank">LinkedIn</a>';
        $content .= '<a class="msb-link msb-pinterest" href="'.$pinterestURL.'" target="_blank">Pin It</a>';
        $content .= '<a class="msb-link msb-email" href="'.$email_share.'" target="_blank">eMail</a>'; // correction du 9 février 2017
        $content .= '</div>';
        }
        
        // si ce n'est pas un article ou une page, ne pas inclure les boutons de partages
        return $content; // correction du 9 février 2017
};

add_filter( 'the_content', 'my_sharing_buttons');
Voir le code pour le fichier <em>style.css</em>
/*** CUSTOMISER LES BOUTONS DE PARTAGES ***/

.msb-link {
 padding: 5px 15px 5px 15px !important;
 color: white;
 font-size: 12px;
 border-radius: 2px;
 margin-right: 2px;
 cursor: pointer;
 box-shadow: inset 0 -3px 0 rgba(0,0,0,.2);
 -moz-box-shadow: inset 0 -3px 0 rgba(0,0,0,.2);
 -webkit-box-shadow: inset 0 -3px 0 rgba(0,0,0,.2);
 margin-top: 2px;
 display: inline-block;
 text-decoration: none;
 text-transform: uppercase
}
 
.msb-link:hover,.msb-link:active {
 background: #ff942a;
 transition: all 0.3s ease-in;
}
 
.msb-twitter {
 background: #00aced;
}
 
.msb-facebook {
 background: #3B5997;
}
 
.msb-googleplus {
 background: #D64937;
}
 
.msb-pinterest {
 background: #bd081c;
}
 
.msb-linkedin {
 background: #0074A1;
}

.msb-email {
 background: #878787;
}
 
.partage-reseaux-sociaux {
 margin: 20px 0px 25px 0px;
 font-size: 12px;
}

/*** CUSTOMISER LES BOUTONS DE PARTAGES POUR RESPONSIVE ***/

@media only screen and (max-width: 680px) {
 
/* placer ici votre CSS Responsive */

}

Voici le résultat :

 

2. Créez une section “Related Post” sans plugin

Vous connaissez certainement la section “Related Post” ou “Articles en rapport” qui affiche, à la fin d’un post, un certain nombre d’articles à lire… C’est une fonctionnalité très importante dans un blog en terme de SEO et aussi car elle permet au lecteur de trouver facilement d’autres articles qui se rapportent à une catégorie ou à un mot clé, enfin elle permet de maintenir ce visiteur encore quelques minutes de plus sur votre site ! Il n’y a donc que des avantages à la mettre en place !

Selon le thème WordPress que vous utilisez, la section “related post” peut vous être proposée en option, sinon vous devrez faire appel à un plugin… ou pas ! Et si vous décidez d’insérer vous-même cette fonctionnalité à la fin de vos articles, voici la procédure :

  1. Dupliquez le fichier single.php de votre thème parent : c’est le fichier qui gère la template pour vos articles.
  2. Ouvrez le single.php avec un éditeur de texte et ajoutez le code ci-dessous dans la loop principale, juste au dessus des commentaires : c’est généralement l’endroit idéal pour afficher cette section.
  3. Envoyez ce fichier dans votre thème enfant via FTP (si déjà présent sur votre serveur).
  4. Stylisez l’apparence des éléments de cette section, en ajoutant du CSS dans le fichier style.css de votre thème enfant, afin de la rendre attrayante. Vous pouvez utiliser le code présent ci-dessous pour exemple.
Voir le code pour le fichier <em>single.php</em>
<div class="section-related-post">
        <?php    
            _e('<h3>Vous aimerez aussi :</h3>'); // correction du 3 février 2017 : texte traduisible
        
            global $post; // correction du 3 février 2017
            $categories = get_the_category($post->ID); // appeler les posts par catégorie, si par tags utilisez : $tags = wp_get_post_tags($post->ID);

            if ($categories) { // si par tags : if ($tags) {
            $category_ids = array(); // si par tags : $tag_ids = array();
            foreach($categories as $individual_category) $category_ids[] = $individual_category->term_id; // si par tags : foreach($tags as $individual_tag) $tag_ids[] = $individual_tag->term_id;
            
            $args=array(
            'category__in' => $category_ids, // si par tags : 'tag__in' => $tag_ids,
            'post__not_in' => array($post->ID),
            'posts_per_page'=> 3, // Nombre de posts à afficher
            'ignore_sticky_posts'=>1 // correction du 3 février 2017
            );

            $my_query = new wp_query( $args );
            while( $my_query->have_posts() ) {
            $my_query->the_post();
        ?>

<div class="chaque-post">
    <a rel="external" href="<?php the_permalink(); ?>"><?php the_post_thumbnail(array(150,150)); ?> <!-- 150 correspondent aux pixels de la miniature : largeur, hauteur // correction du 3 février 2017 : ajout d'une balise php manquante -->
        <p class="mon-titre-related"><?php the_title(); ?></p>
    </a>
</div>

<?php 
}
} // correction du 3 février 2017
wp_reset_query(); 
?>
</div>

Voir le code pour le fichier <em>style.css</em>
/*** section VOUS AIMEREZ AUSSI - related post */

.section-related-post {
 width: 100%; 
 margin: 20px 0 20px 0; 
 padding: 20px;
 float: left; 
 font-size: 16px;
 box-shadow: 0 1px 3px 0 rgba(0,0,0,.1);
}

.section-related-post h3 {
 font-size: 22px; 
 margin-bottom: 10px; 
}

.chaque-post {
 float: left; 
 width: 30%;
 margin-right: 5%;
}

.chaque-post:last-child {
 margin-right: 0%;
}

.chaque-post img {
 margin: 0 0 3px 0; 
 width: 100%;
 padding: 0;
 background-position:center;
 transition: all 0.5s ease;
 -moz-transition: all 0.5s ease;
 -ms-transition: all 0.5s ease;
 -webkit-transition: all 0.5s ease;
 -o-transition: all 0.5s ease;
}

.chaque-post img:hover {
 transform: scale(1.1);
 -moz-transform: scale(1.1);
 -webkit-transform: scale(1.1);
 -o-transform: scale(1.1);
 -ms-transform: scale(1.1); /* IE 9 */
 -ms-filter: "progid:DXImageTransform.Microsoft.Matrix(M11=1.5, M12=0, M21=0, M22=1.5, SizingMethod='auto expand')"; /* IE8 */
 filter: progid:DXImageTransform.Microsoft.Matrix(M11=1.5, M12=0, M21=0, M22=1.5, SizingMethod='auto expand'); /* IE6 and 7 */ 
}

.chaque-post a {
 color : #333; 
 text-decoration: none; 
 display:block; 
 padding: 10px; 
 width: 100%;
 box-shadow: 0 1px 3px 0 rgba(0,0,0,.1);

}

.chaque-post a:hover {
 color: #ff942a;
 /* Firefox */
 -moz-transition: all 0.3s ease-in;
 /* WebKit */
 -webkit-transition: all 0.3s ease-in;
 /* Opera */
 -o-transition: all 0.3s ease-in;
 /* Standard */
 transition: all 0.3s ease-in;
}

@media only screen and (max-width: 580px) {
 
/* placer ici votre CSS Responsive */

}

Voici le résultat :

3. Affichez votre “Cookie Consent” sans plugin

Depuis que la loi sur la protection des données personnelles impose aux sites web d’informer les visiteurs au sujet de l’utilisation des cookies, les plugins prévus à cet effet n’ont jamais eu autant le vent en poupe ! Et pourtant, il est si simple d’ajouter un petit bout de code à son thème pour installer cette barre de notification, surtout qu’il existe de très bons outils permettant de générer facilement le code…

Comment faire ? Voici les étapes à suivre :

  1. Générez en ligne le code à ajouter : rendez-vous sur Skilltide.com ou bien sur Cookie-Script.com suivez les quelques étapes puis copiez le code qui vous sera fourni.
  2. Dupliquez le fichier header.php de votre thème parent
  3. À l’aide d’un éditeur de texte, ouvrez ce fichier et ajoutez le code ainsi obtenu (voir également l’exemple présent ci-dessous) juste après l’ouverture de la balise <head>.
  4. Envoyez le fichier header.php dans votre thème enfant via FTP (si le thème enfant est déjà présent sur votre serveur).
Voir le code pour le fichier <em>header.php</em>
 <!-- Notice d'acceptation des cookies sans plugins, plus de choix ici : http://silktide.com/cookieconsent -->
 <script type="text/javascript">
 window.cookieconsent_options = {"message":"Ce site utilise des cookies pour vous offrir la meilleure des expériences","dismiss":"OK","learnMore":"En savoir plus !","link":"http://mon-site.com/cookies","theme":"dark-top"};
 </script>
 <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/cookieconsent2/1.0.10/cookieconsent.min.js"></script>
 <!-- Fin de la notice d'acceptation des cookies-->

Voici le résultat :

Barre de cookies sans plugins

 

4. La fonction de “Duplicate Post” sans plugin

En natif, WordPress permet de créer, modifier ou supprimer un post mais il ne permet malheureusement pas de dupliquer un post déjà existant…

Cette fonctionnalité serait pourtant très utile car elle vous permettrait de gagner un temps considérable selon l’utilisation que vous en faite. Il existe un plugin très efficace pour effectuer cette opération, il s’agit de Duplicate Post, sinon vous pouvez tester la méthode sans plugin qui est tout aussi efficace, pour cela :

  1. Éditez le fichier function.php de votre thème enfant
  2. Copiez le code ci-dessous puis collez-le dans votre fichier
  3. Sauvegardez puis admirez ! Comme par magie, l’option de duplication est apparue du côté admin de votre site. Vous la trouverez au survol de votre curseur sur un article existant.
Voir le code pour le fichier <em>functions.php</em>
/*** ajouter la fonction pour dupliquer les posts sans plugin ***/

function dupliquer_sans_plugin(){
    global $wpdb;
    if (! ( isset( $_GET['post']) || isset( $_POST['post']) || ( isset($_REQUEST['action']) && 'dupliquer_sans_plugin' == $_REQUEST['action'] ) ) ) {
        wp_die("Aucun post à dupliquer n'a été fourni...");

        check_admin_referer( 'duplicate-post_' . $post->ID ); // correction du 9 février 2017
    }
 
        // RECUPERE LES INFOS A DUPLIQUER
        $post_id = (isset($_GET['post']) ? absint( $_GET['post'] ) : absint( $_POST['post'] ) );
        $post = get_post( $post_id );
        $current_user = wp_get_current_user();
        $new_post_author = $post->post_author; // correction du 9 février 2017

    if (isset( $post ) && $post != null) {
 
        // REGLAGES DU NOUVEAU BROUILLON
        $args = array(
        'comment_status' => $post->comment_status,
        'ping_status' => $post->ping_status,
        'post_author' => $new_post_author,
        'post_content' => $post->post_content,
        'post_excerpt' => $post->post_excerpt,
        'post_name' => $post->post_name,
        'post_parent' => $post->post_parent,
        'post_password' => $post->post_password,
        'post_status' => 'draft',
        'post_title' => $post->post_title,
        'post_type' => $post->post_type,
        'to_ping' => $post->to_ping,
        'menu_order' => $post->menu_order
        );
 
        $new_post_id = wp_insert_post( $args );
 
        $taxonomies = get_object_taxonomies($post->post_type);
        foreach ($taxonomies as $taxonomy) {
        $post_terms = wp_get_object_terms($post_id, $taxonomy, array('fields' => 'slugs'));
        wp_set_object_terms($new_post_id, $post_terms, $taxonomy, false);
    }
 
        $post_meta_infos = get_post_meta( $post_id ); // correction du 9 février 2017
 
        wp_redirect( admin_url( 'post.php?action=edit&post=' . $new_post_id ) );
        exit;
        } else {
        wp_die("Une erreur s'est produite, impossible de trouver le post original : " . $post_id);
        }
    }

add_action( 'admin_action_dupliquer_sans_plugin', 'dupliquer_sans_plugin' );

function dupliquer_le_post( $actions, $post ) {
    if (current_user_can('edit_posts', $post->ID)) { // correction du 9 février 2017
         $url = wp_nonce_url( admin_url( 'admin.php?action=dupliquer_sans_plugin&amp;post=' . $post->ID ), 'duplicate-post_' . $post->ID ); // correction du 9 février 2017
         $actions['duplicate'] = '<a href="' . esc_url( $url ) . '" title="Dupliquer ce post" rel="permalink">Dupliquer</a>'; // correction du 9 février 2017
    }
    return $actions;
}
 
add_filter( 'post_row_actions', 'dupliquer_le_post', 10, 2 );

Voir le résultat :

Dulicate post sans plugins

 

5. Mettre son WordPress en maintenance sans plugin

Voilà encore un bel exemple de fonctionnalité qui pourrait facilement se passer d’un plugin ! Pour cela, il vous suffira d’ajouter seulement quelques lignes de code dans le fichier functions.php de votre thème enfant. Grâce à cette fonction, vous continuerez à accéder à votre administration pour continuer à travailler tranquillement sur votre site comme le propose les plugins de maintenance. Tous les visiteurs qui ne seront pas identifiés comme administrateurs, eux, verront une page de “site en maintenance”.

À partir du code disponible ci-dessous, vous pouvez très bien imaginer de rajouter une section de liens vers vos réseaux sociaux, un encart d’inscription à la newsletter, une image de fond etc… Et voilà, un plugin de moins !

NB : l’avantage avec ce morceau de code est qu’une fois vos modifications terminées, il vous suffira de mettre le code “en pause” jusqu’aux prochains travaux grâce à un double slash (//)  inséré devant chaque ligne. Vous pourrez facilement le faire depuis votre administration à l’onglet Apparence > Éditeur > functions.php

Voir le code pour le fichier <em>functions.php</em>
 /*** page de maintenance côté visiteur - sans plugins ***/

function mode_maintenance(){
    if(!current_user_can('edit_themes') || !is_user_logged_in()){
        wp_die('<div style="border:solid 1px grey;"><h1 style="color:#FF942A; text-align:center; text-transform:uppercase;">Site en Maintenance</h1><p style="text-align:center; font-size:18px;">Nous effectuons quelques travaux de maintenance afin de vous fournir un site toujours plus efficace... Revenez vite !</p></div>', 'Maintenance', array( ‘response’ => 503 )); // correction du 9 février 2017
    }
}
add_action('init', 'mode_maintenance'); // correction du 9 février 2017
Mettre le mode maintenance en pause
 /*** page de maintenance côté visiteur - sans plugins ***/

//function mode_maintenance(){
//    if(!current_user_can('edit_themes') || !is_user_logged_in()){
//        wp_die('<div style="border:solid 1px grey;"><h1 style="color:#FF942A; text-align:center; text-transform:uppercase;">Site en Maintenance</h1><p style="text-align:center; font-size:18px;">Nous effectuons quelques travaux de maintenance afin de vous fournir un site toujours plus efficace... Revenez vite !</p></div>', 'Maintenance', array( ‘response’ => 503 )); // correction du 9 février 2017
//    }
//}
//add_action('init', 'mode_maintenance'); // correction du 9 février 2017

Voir le résultat :

Mode maintenance sans plugins

 

En conclusion

Vous l’aurez compris, les plugins sont des bouts de code qui ajoutent des fonctionnalités à un site WordPress. Si vous étiez développeur, vous n’auriez certainement pas besoin d’eux (ou très peu), certes, mais rien ne vous empêche de trouver le juste équilibre…

Alors, au travail ?

wpformation
NE MANQUEZ PLUS RIEN !
Inscrivez-vous pour recevoir le meilleur de WordPress dans votre boîte de réception, chaque mois.

Nous ne spammons pas ! Consultez notre politique de confidentialité pour plus d’informations.

A propos de l'auteur...

Avatar de Lycia Diaz

Lycia Diaz

Consultante et formatrice WordPress, j'adore découvrir, tester et partager mes expériences. Mais ce qui me passionne, c'est entreprendre & accomplir de nouveaux projets comme la rédaction de mon livre "Je crée mon site avec WordPress" aux Éditions Eyrolles et l'animation de mes deux blogs : la-webeuse.com et astucesdivi.com.

19 commentaires pertinents à ce jour ;)

  • Merci beaucoup pour cet article, je vais tester les 3 premiers je pense. C’est vraiment utile ! Ce que j’aimerais aussi c’est pouvoir retirer le plugin qui ajoute un bouton “Pin it” sur mes images… Je ne sais pas si c’est simple ou pas à coder.

  • Wouah !
    Merci Lycia Diaz pour ce merveilleux article.
    Je crois que je vais bien m’amuser à mettre en place ces bouts de code.
    Je suis convaincu que cela va réduire aussi petit que possible le temps de chargement de mes sites ????.

  • Merci pour ce billet, je vais tenter de virer quelques plugins moi aussi :)

    Pour le mode maintenance je préfère passer via un htaccess en ne laissant que mon IP autorisée, ça permet de voir si tout s’affiche bien, tout en passant le blog en maintenance pour les autres:

    # MODE MAINTENANCE

    RewriteEngine on
    RewriteCond %{REQUEST_URI} !/maintenance.php$
    RewriteCond %{REMOTE_HOST} !^123\.34\.56\.78
    RewriteRule $ /maintenance.php [R=302,L]

    END MODE MAINTENANCE

  • @cecile le bouton Pin it est soit ajouté par un plugin (donc il y a une option), soit par une extension de navigateur (Pin It par exemple) et il est très simple de la désactiver !

    @brice moins on en mets, mieux c’est ;)

    @xhark oui très bonne solution alternative, merci du partage !

  • Bonsoir,
    Très intéressant, surtout de mon point de vue, pour les boutons de partage, mais comment ajouter un réseau social comme Tumblr ?
    Est-ce possible d’ajouter l’option envoyer l’article par mail ? Et imprimer l’article (printfriendly).
    Et pour finir avoir les compteurs ?
    Merci pour l’article, donc on ne peut pas se passer de plugin pour faire une page de contact, un formulaire?

  • Bonjour Lycia et Fabrice,

    Je vais répondre par un pavé afin d’apporter des réflexions, des opinions et aussi des “non !!”, donc ça sera un peu le mode pavé.

    “ne pas être dépendant d’une tierce personne/plateforme/développeur”
    Je vais dire “ça dépends”:
    – Si c’est un plugin maintenu et connu pour l’être, alors il est bon d’être dépendant de leur bienveillance et de leurs mises à jour.
    – Si c’est un plugin relativement petit et très vieux, non maintenu car de toutes façons il n’y a rien d’autre à faire dessus, c’est bien de compter sur cet expertise éprouvée.
    Inversement, maintenant que vous n’êtes plus dépendant de ce plugin, vous devenant dépendant de ce code qui lui non plus ne sera plus maintenu, est-ce bien ? Et si dans 2 ans (c’est rapide), une des fonctions utilisée devient dépréciée, allez vous revenir sur ce code ? Je l’espère pour vous, mais sincèrement et avec mon expérience, non vous ne reviendrez pas.

    “sortir des sentiers battus et obtenir un module totalement customisé”
    En quoi ce’st un argument positif jde sortir des sentiers battus ? Le hors piste n’est pas dangeureux ? J’ai toujours entendu l’inverse, êtes-vous l’aventurière de l’H perdue ? (le H de PHP bien sûr)
    Non vraiment, e ne vois pas et j’aimerais mieux le comprendre. Vous dites que c’est customisé, mais non puisque je vais copier/coller le code d’ici, en quoi c’est custom, j’aurais le même code que tout le monde, encore plus si je ne suis pas développeur, je ne saurais pas ce que je peux ou non toucher, ce n’est pas précisé dans le code.

    “automatiser et ainsi gagner du temps si vous créez régulièrement des sites sous WordPress (via un thème enfant customisé ou même votre propre template)”
    Si vous créer régulièrement des sites sous WordPress, j’espère que vous les installez avec de vrais moyens automatisés, à minima des scripts comme “WP Quick Install” qui vous permettent d’avoir des fichiers de config selon vos types de clients. Ce script donne la possibilité de préciser quels plugins du repository vous souhaitez installer/activer, ou vous ajoutez un dossier avec vos zip premiums et ils le seront aussi.
    Il existe d’autres solutions de création encore plus avancées, en remote, etc mais ceci est un autre sujet.
    Je ne pense pas que retirer les plugins soit donc là pour un gain de temps lors du déploiement d’un site. D’autant plus que ce n’est plus customizable comme indiqué précédemment, sinon ça veut dire que pour chaque client je dois modifier mes scripts, le gain de temps est clairement perdu.

    “réduire le temps de chargement dû aux nombreuses requêtes effectuées pour loader certains plugins (CSS, Javascript etc…)”
    Dans vos scripts vous ajoutez aussi du CSS, donc au lieu de charger un fichier de plus, vous en allourdissez un autre. Si le premier est léger, cela peut être bon. Si il était déjà lourd, alors on obtient l’effet inverse et on perd du temps de chargement. C’est du cas par cas et non valable pour tout le monde, il faut à la fois le savoir et savoir mesurer cette data afin de faire le bon choix.

    “corriger facilement les éventuelles incompatibilités puisque c’est vous qui l’avez codé, de ce fait, vous trouverez rapidement la solution !”
    Si vous êtes développeur. Sinon, euh non. Et pour les 2 profils (dev ou non), vous risquez surtout d’oublier que vous avez ces scripts par défaut dans votre template depuis 2 ans et vous passerez encore plus de temps en débug. (ça m’est arrivé …)

    “ne plus perdre de temps à installer et à configurer certains plugins”
    (Attention, vous avez déjà dit “gagner du temps”, dire la phrase à l’envers n’en fait pas un point de plus ;)
    Ok, vous ne configurez plus. Donc si je veux changer un élément, je dois retoucher mon thème pour chaque client, niveau maintenance c’est un peu … horrible non ? Et si le client veut pouvoir changer un élément/un setting de temps en temps ? Oui c’est possible, et ça devient contre productif.

    “les plugins sont des bouts de code qui ajoutent des fonctionnalités à un site WordPress”
    Tout à fait, donc en fait, je n’ai fait que déplacer du code d’un fichier à un autre ? En quoi je gagne en performance ?
    J’ai plus l’impression juste d’avoir eu à modifier des fichiers PHP, devoir les modifier pour chaque client, ne plus avoir de possibilité de configurer ces options via l’administration (c’est fait pour ça normalement)

    “Si vous étiez développeur, vous n’auriez certainement pas besoin d’eux (ou très peu)”
    euh non car “un bon développeur est un développeur fainéant”, je me vois mal coder 50 custom fields au lieu d’utiliser ACF, je me vois mal aller coder un google maps manuellement alors qu’un plugin le fait, je me vois mal allez installer 50 scripts de sécurité alors que des plugins qui font tout en un existent. Je suis un développeur qui veut gagner du temps pour aller lire un bon livre plus tôt moi !
    J’ai 50 plugins sur mon blog perso et je ne m’en passe d’aucun et je les mets à jour, et je peux sans toucher au PHP modifier leur comportement via une page d’options.

    Je vais maintenant parler des 5 cas présentés, je ne parle par que le code ne respecte pas les standards de WordPress ça serait du zèle (mais je le dis quand même) :
    1.Des boutons de partage sans plugin
    Il existe des plugins gratuits et customizables, qui ne font pas des appels partout comme juiz social post sharer pour ne citer que lui.
    La déclaration de la variable “$content” déclenche une notice PHP car elle concatène avec rien, il faut supprimer son “.” du “.=”
    La variable $emailSHARE (qui devrait être “$email_share”) contient un “mailto:” sans adresse et le tuto n’indique pas qu’il faut y placer son email, il faut connaitre le code pour le savoir.
    Attention à $myCurrentThumbnail car si je n’ai pas d’image à la une, cela provoque un warning php sur $myCurrentThumbnail[0]
    Le str_replace() devrait être un urlencode() puisque ce titre sera lui aussi dans une URL.
    Les URL doivent être échapées avec esc_url()
    Attention à “Partagez Maintenant !” qui force un H5 arbitraire et contenant un texte non traduisible, avec __() les plugins de langue auraient pu rendre le contenu traduisible.
    Le “return $content }else{ return $content; }” devient un “} return $content;” pour éviter une redondance de code.

    2.Créez une section “Related Post” sans plugin
    “la section “related post” n’apparaîtra qu’à la fin de vos articles et non sur vos pages ou sur vos custom post types”
    Aie, sisi, le single.php est utilisé pour les custom post types, je t’invite à vérifier sur https://developer.wordpress.org/files/2014/10/template-hierarchy.png et suivre le chemin, on y arrive.
    Même remarque qu’au dessus avec “Vous aimerez aussi :” qui force un H3 avec du contenu non traduisible.
    La bisouille “$orig_post = $post; … $post = $orig_post;” ne sert à rien puisqu’il y a un “wp_reset_query()” qui fait un “wp_reset_postdata()”.
    “caller_get_posts” est un argument déprécié depuis 6 ans. C’est “ignore_sticky_posts” à “true” qu’il faut utiliser maintenant.

    3. Affichez votre “Cookie Consent” sans plugin
    L’astuce ajoute un fichier vers cloudflare, mais, vous aviez dit que “ne pas être dépendant d’une tierce personne/plateforme/développeur”, donc maintenant je deviens dépendant de la disponibilité de ce fichier, de sa véracité (si ce fichier se fait hacker, mon site l’est aussi), si le site distant rame, le mien aussi, donc perte de perf, aie. Cela va à l’encontre de cet article d’un coup.

    4. La fonction de “Duplicate Post” sans plugin
    “La méthode sans plugin qui est tout aussi efficace” elle est même redoutable, je m’explique:
    Le hook “admin_action_dupliquer_sans_plugin” se déclenche sur l’URL suivante:
    “admin.php?action=dupliquer_sans_plugin&post=n” (&post devrait être &post_id)
    L’accès à la page “admin.php” n’est autorisée que si on est connecté.
    Donc si je suis un abonné, je peux déclencher cette action et dupliquer les articles, comme par magie.
    Si je suis contributeur c’est encore plus drôle car la ligne “$new_post_author = $current_user->ID;” fera de moi le nouvel auteur, je peux donc dupliquer des articles non publiés qui peuvent m’avoir été cachés et ainsi les lire.
    Bref, il y a une faille de sécurité de type “Auth Bypass”, il manque un jeton de sécurité sur l’URL admin.php à ajouter avec wp_nonce_url() (l’action du hook doit contenir le post ID) et à vérifier avec check_admin_referer() (et donc ici vous vérifiez ce post ID).
    Puis n’oubliez pas de vérifier les droits avec “if (current_user_can(‘edit_post’, $post->ID))” et non juste “edit_posts” qui est moins précis.
    Ajoutez aussi cette vérification dans l’action du hook, ce n’est pas parce que le lien n’est pas visible que je ne peux pas tapper moi même dans l’URL.
    “isset( $post )” sera toujours vrai, on peut donc le supprimer.
    “$current_user = wp_get_current_user();” n’est utilisé que pour faire “$new_post_author = $current_user->ID;”, autant faire un “$new_post_author = get_current_user_id();”
    Le “$post_meta_infos” devrait être simplement un “get_post_meta( $post_id );”
    Sinon question sécurité, on ne concatène pas une variable dans une requête maison, mais on la prépare avec “$wpdb->prepare”.
    N’ajoutez pas les meta via une query maison, mais utilisez add_post_meta() afin de déclencher les hooks de WP.

    5. Mettre son WordPress en maintenance sans plugin
    “il vous suffira de mettre le code “en pause” jusqu’aux prochains travaux grâce à un double slash (//) inséré devant chaque ligne.” pouah, que je n’ai pas envie de devoir aller sur le FTP pour activer, désactiver du code ! Et si on déplaçait ça dans un fichier séparé et que via un lien on pouvait le rendre actif ou pas, ça serait top, on gagnerait du temps sans perdre en perf ? Ha pardon c’est un plugin.
    Aussi le hook n’est pas “get_header” mais plutôt “init” puis il manque le 3e paramètre de la fonction wp_die() qui doit contenir “array( ‘response’ => 503 )” afin d’indiquer que le site est en maintenance et non en erreur.

    Alors, au travail ? ;)
    J’espère vous avoir aiguillé sur des points inconnus, je reste à votre dispo ici ou sur slack wordpress fr pour toute question bonus !

  • Merci à tous…
    @xhark merci pour cette solution mais qui, je pense, donne l’accès que pour une adresse IP, si le site est géré par plusieurs personnes, ce ne sera pas possible de s’y connecter n’est ce pas ? La solution présentée ici permet aussi d’accéder au back office pendant que le site est en maintenance…
    @wolfneo oui je pense que l’on peut ajouter Tumblr en modifiant un peu le code donné dans l’exemple par contre si tu veux rajouter des compteurs tu devras ajouter du JavaScript (je pense) et du coup tu perds le bénéfice qui est d’économiser un peu de temps de chargement… À voir ?

  • Salut @julio-potier
    Oui, dans la catégorie pavé tu te poses là !

    – Le sens de “dépendant” vis-à-vis d’un plugin selon le point de vue. Nombreux sont les plugins qui ne sont pas suivis, les fonctions et/ou le CSS de ces derniers qui ne nous conviennent pas. A cet égard, que ce soit moi ou le développeur d’un plugin que nous ne mettons pas à jour, cela revient au même, sauf que là, je peux y faire quelque chose !

    – Sortir des sentiers battus au sens de customisé, ici tu as un bout de code et aussi des bouts de CSS, c’est une base que tu prends et que tu adaptes/transformes, ainsi tu pourras avoir ta propre version, ton hors piste. Si tu n’es pas à l’aise avec ça, tu ne t’amuseras pas le mettre en place et tu resteras sur l’utilisation des plugins.

    – Automatiser et gagner du temps, au sens de certains plugins aux trop nombreuses options (qu’on utilise pas forcément d’ailleurs). Par ce biais là il faut plutôt comprendre: j’utilise uniquement ce dont j’ai besoin.

    – Temps de chargement, moins de requêtes, un fichier CSS au lieu de 3, il est donc possible de réduire le temps de chargement. Mais tu as raison cela se mesure.

    – Corriger les éventuelles incompatibilités, il est arrivé de nombreuses fois qu’un plugin devienne incompatible, si tu as ajouté tes scripts tu peux intervenir et voir éventuellement dans les logs ce qui pose problème et corriger ou remplacer.

    Bref, chacun se place se son point de vue, utilisateur, développeur, créateur de plugins… OUI certains plugins peuvent être remplacés, d’autres plus difficilement. NON tout le monde ne se sentira pas en mesure de le faire et c’est ça qui est beau avec WordPress, on est libre et c’est du libre !

    Enfin, concernant le code, celui sera édité dans l’article en tenant compte de tes remarques bienveillantes ;)

  • @julio-potier , @wpformation , @lycia En ce qui concerne le fait de se passer de certaines extensions, je suis tout à fait d’accord que des bouts de code peuvent avantageusement les remplacer. D’autant que certaines extensions se chargent que l’on ait besoin d’elles ou non.

    Là où je suis moins d’accord, c’est à les insérer dans le fichier functions.php ou directement dans les fichiers de thème.

    Les inclure via une extension telle que Code Snippets évite de les passer d’un fichier de fonctions ou de template à l’autre en cas de changement de thème, et les passer via les actions et les filtres est beaucoup plus propre que de les insérer directement dans un des fichiers du thème (quand c’est possible évidemment).

    Pour les articles liés par exemple, ça donnerait le code suivant, à insérer dans un “snippet” à activer en front uniquement :


    if ( is_single() ):
    function myblog_relatedposts( $content) {
    // code PHP / HTML pour l'ajout d'articles liés
    }
    add_filter( "the_content", "myblog_relatedposts" );
    endif;

    Si on ne veut pas s’embarasser d’une extension pour inclure ces bouts de code, il est encore préférable de les rassembler dans un fichier de fonctions personnalisées que l’on appelle depuis le fichiers functions.php :


    if ( file_exists ( 'custom_functions.php' ) ):
    include_once 'custom_functions.php' ;
    endif;

    D’autre part, je suis d’accord avec Julio, la question de la maintenance du code (pour des raisons d’évolution du code : fonctions dépréciées, failles de sécurité, etc.) fait que je pèse à chaque fois le pour et le contre avant de choisir entre extension et bout de code.

  • Petite remarque en passant : penser tout de même à entrer les textes avec la fonction _e() ou __() pour les rendre traduisibles ;-)

  • Cet article m’a fait réagir, voici mon point de vue :

    la logique-même de WordPress s’articule autour des plugins. Leur qualité est variable c’est incontestable mais l’intérêt de WordPress c’est AMHA l’écosystème. Y a beaucoup de restos qui font du “fait-maison” pas bon du tout, y en a qui mettent du surgelé tout moisi, y en a qui font bien leur taf et c’est bon, pas de règle.

    Si une extension est pas assez qualitative y a bien souvent moyen de la remplacer par une meilleure et si ce n’est pas le cas alors autant la créer. Ça fait partie des choses que j’apprécie beaucoup dans cet écosystème.

  • Et pour ne pas trop charger le functions.php, utiliser les mu plugins. Ça reste déjà plus accessible à créer et à gérer qu’une extensions complète.

  • Pour infos :

    Le code a été revu et modifié par @lycia avec l’aide de @julio-potier
    L’article est donc à jour, merci à tous de vos retours ;)

  • Bonjour,
    merci pour les réponses, dommage par le système wpDiscuz pour les commentaires, j’aurai voté sous vos commentaires.
    Oui le fait de vouloir les compteurs, force à ajouter le JS, ce qui paradoxale avec la méthode, je posais la question d’une manière générique, pour tous les utilisateurs, avec les demandes possible, merci

    Je privilégie les plugins récents, même si le nombre d’utilisateurs est importants, par exemple, je ne prendrais pas Better WordPress Minify malgré les 90 000 utilisateurs, car cela fait un an sans mise à jour, je prendrai plus WP Super Minify, quoi que je préférais Autoptimize.

  • Bonjour @lycia Merci pour ce billet, excellentes alternatives, moi qui ai trop de plugins, cela m’a permis de faire un brin de ménage :) Néanmoins j’ai un souci avec le Related Posts, il ne m’affiche que les derniers billets, par ordre d’apparition, pas du tout de manière aléatoire et uniquement les plus récents, en l’occurrence les 4 derniers. (Je ne sais pas non plus comment afficher des aperçus carrés, mais ça me gêne moins)

  • @Olivia Lanchois : pour avoir un tirage aléatoire des articles, il suffit de faire une petite modif comme suit :

    'ignore_sticky_posts'=>1, // correction du 3 février 2017
    'orderby' => 'rand'

  • Bonjour WPFormation,
    Super article que j’ai utilisé pour la notice cookie

    J’ai donc copié ton code dans mon fichier header.php

    Et là très mauvaise surprise, il s’est agrandi de 875px !!!
    Je vais à reculons et supprime le code, ça ne change rien !

    Mince, je suis bloqué.

    Je n’ai pourtant pas touché au CSS.

    Tu as une idée de ce qui a pu causer ça ?

    Merci de me renseigner

  • @Pascal29992, si le code qui pose problème a été retiré alors retour à l’état initial, c’est surement votre cache (plugin ou navigateur) qui n’est pas purgé.