Widget WordPress , Honneur aux DAM ! Derniers Articles Modifiés

Aujourd’hui, nous allons faire un petit retour en arrière… revenons au 30 septembre 2008 où je vous proposais un petit plugin pour WordPress pour afficher les anciens articles qui avaient été récemment modifiés. Depuis cette date, le plugin faisait parfaitement son travail sur Free Tools jusqu’à il y a quinze jours, date de changement du thème. widget wordpress - derniers articles modifies

Widget WordPress ou simple Plugin ?

Le plugin aurait pu continuer à faire l’affaire… mais cela me contraignait à éditer le fichier du sidebar et d’ajouter le code. Et à chaque future mise à jour du thème, je me devais de ne pas oublier de remettre ces quelques lignes de code… Étant beaucoup trop fainéant, j’ai opté pour une solution plus simple : faire un widget. En effet, l’avantage du widget wordpress et qu’une fois qu’il est programmé et qu’il respecte le css natif, il peut s’intégrer sur n’importe quel site en gardant son « style ».

Le but n’est pas de faire un tuto sur « comment programmer un widget wordpress », il en existe des milliers sur le web… Je vais juste préciser que pour créer le widget Derniers Articles Modifiés, j’ai repris le code du plugin (qui a été un tantinet amélioré, tout au moins la requête SQL) et j’ai enregistré une nouvelle classe héritant de wp_widget. Ensuite, il faut ajouter 4 fonctions, toujours les mêmes,  qui feront tout : déclaration du widget, affichage du form côté admin, sauvegarde des variables et traitement/affichage côté internaute.

<?php
/*
Plugin Name: Derniers Articles Modifiés
Description: Affiche les articles récemment modifiés.
Version: 2.0
License: GPL
Author: Free Tools
Author URI: https://free-tools.fr/
*/

add_action('widgets_init','widget_Dernier_Article_Modifie');

function widget_Dernier_Article_Modifie (){
    register_widget('ft_derniersarticlesmodifies');
}

class ft_derniersarticlesmodifies extends WP_widget {
    
    //définition des propriétés du widget
    function ft_derniersarticlesmodifies(){
        $options = array(
            'classname' => 'widget_lpm',
            'description' => __('Affiche les articles modifiés.','DAM')    
        );
        // ID + Nom widget + option déclarées ci dessus
        $this->WP_Widget('ft_dam',__('Derniers Articles Modifiés','DAM'),$options);
    }
    // routine pour afficher les derniers articles modifiés
    function widget($args, $instance){
        extract($args);
        echo $before_widget;
        echo $before_title . $instance['Titre'] . $after_title;
        
        // affiche les articles dernièrement modifiés
        global $wpdb;
        // init affichage
        $output = '<ul>';
        // Requête principale : on récupère tous les articles publiés
        // on retire les articles ayant la même date de création et de modification
        // et on classe les articles retenus par ordre décroissant de modification
        // dans la limite de NbPost défini par l'utilisateur.
        $NbPost = $instance['Post'];
        $query = "SELECT *
                  FROM $wpdb->posts
                  WHERE post_status = 'publish' 
                  AND post_type ='post'
                  AND DATE_FORMAT(post_modified, '%Y %M %d') <> DATE_FORMAT(post_date, '%Y %M %d')
                  ORDER BY post_modified DESC
                  LIMIT $NbPost";
        // Stocker le résultat dans var $posts
        $posts = $wpdb->get_results($query);
        // Si nous avons des posts modifiés
        If ($posts){
            foreach ($posts as $post) {
                // on récupère la date de création de l'article et on la formatte
                $post_date_creation = mysql2date('j M Y', $post->post_date);
                // On récupère le titre
                $post_title = stripslashes($post->post_title);
                //extraire l'ID du post pour faire hyperlien
                $permalink = get_permalink($post->ID);
                if ($instance['AfficherDate']) {
                    $output .= '<li><a href="'.$permalink.'">' . $post_title. '</a> (' .$post_date_creation.')</li>';
                    }
                else {
                    $output .= '<li><a href="'.$permalink.'">' . $post_title. '</a></li>';
                    }
                }
        }   
        Else {
            $output .= $instance['PasArticleModifie'];
        }
        echo $output . '</ul>';
        echo $after_widget;
    }  
    
    // Sauvegarde & mise à jour des param du widget
    function updtae($new_instance, $old_instance){
        return $new_instance;
    }

    // Champs de saisi dans le widget
    function form ($instance) {
        $default = array(
            'Titre' => __('Derniers Articles Modifiés','DAM'),
            'Post' => '5',
            'AfficherDate' => true,
            'PasArticleModifie' => __('Aucun article modifié','DAM')   
        );
        // Permet d'initialiser les valeurs des champs si aucun param n'a été saisi par l'utilisateur
        $instance = WP_parse_args($instance, $default);
        ?>
        <p>
            <label for="<?php echo $this->get_field_id('Titre'); ?>"><?php echo __('Titre','DAM') ?>
            <input value="<?php echo $instance['Titre']; ?>" name="<?php echo $this->get_field_name('Titre'); ?>" id="<?php echo $this->get_field_id('Titre'); ?>" type="Text" class="widefat" /></label>
        </p>
        <p>    
            <label for="<?php echo $this->get_field_id('Post'); ?>"><?php echo __('Nombre Article','DAM') ?></label>
            <input value="<?php echo $instance['Post']; ?>" name="<?php echo $this->get_field_name('Post'); ?>" id="<?php echo $this->get_field_id('Post'); ?>" type="Text" size="3" />
        </p>  
        <p>
            <input class="checkbox" type="checkbox" <?php checked( $instance[ 'AfficherDate' ], 'on' ); ?> id="<?php echo $this->get_field_id( 'AfficherDate' ); ?>" name="<?php echo $this->get_field_name( 'AfficherDate' ); ?>" /> 
            <label for="<?php echo $this->get_field_id( 'AfficherDate' ); ?>"><?php echo __('Afficher la date de création','DAM') ?></label>
        </p>
        <hr>
        <p>
            <label for="<?php echo $this->get_field_id('PasArticleModifie'); ?>"><?php echo  __('Message à afficher si aucun article modifié','DAM') ?>
            <input value="<?php echo $instance['PasArticleModifie']; ?>" name="<?php echo $this->get_field_name('PasArticleModifie'); ?>" id="<?php echo $this->get_field_id('PasArticleModifie'); ?>" type="Text" class="widefat" /></label>
        </p> 
        <?php
    }
}
?>

C’est cadeau… Pour activer ce plugin, téléchargez le et suivez la procédure classique pour installer un plugin. Ensuite, rendez-vous dans le menu « Apparence/Widget » et glissez le bloc « Derniers Articles Modifiés » dans votre « sidebar ». Il reste à indiquer les valeurs que vous souhaitez et c’est opérationnel.

Encore une fois, si vous avez apporté des améliorations, n’hésitez pas à me le dire… autant que tout le monde en profite.

Site Internet : Free Tools – Widget WordPress DAM
Licence : GPL

 

3 Comments

  1. Adrien 5 mars 2016
    • FreeTools 5 mars 2016
  2. Max 24 février 2017

Leave a Reply