Un widget des derniers articles ou custom post

Un widget des derniers articles ou custom post

Pour afficher les derniers articles sur son site wordpress , on peut se servir du widget prévu à cet effet dans le backoffice .Ici je vais plutôt parler des custom post. Pour ces deniers, si on veut afficher une liste des derniers articles, on peut créer un widget dédié.

Voici un code d’exemple commenté pour créer un widget listant les derniers articles d’un custom post type donné : (ici mon custom post s’appelle sessad)

class MessessadRecents extends WP_Widget {
    function MessessadRecents()
    {
        parent::WP_Widget(false, $name = 'Mes Sessad', array('name' => 'Mes Sessad', 'description' => 'Affichage des rubriques'));
    }
    function widget($args, $instance)
    {
        if('sessad' == get_post_type()) {
            //Récupération des paramètres
            extract($args);
            $title = apply_filters('widget_title', $instance['title']);
            $nb_posts = $instance['nb_posts'];
             
            //Récupération des articles
            $lastposts = get_posts(array('numberposts'=>$nb_posts, 'post_type'=>'sessad','post__not_in' => array (get_the_ID())));
         
            //Affichage
            echo $before_widget;
            if ($title)
                echo $before_title . $title . $after_title;
            else
                echo $before_title . 'Rubriques récentes' . $after_title;
                 
            echo '<ul>';
            foreach ( $lastposts as $post ) : 
                setup_postdata($post); ?>
                <li><a href="<?php echo get_permalink($post->ID); ?>"><?php echo $post->post_title; ?></a></li>
            <?php endforeach;
            echo '</ul>';
            echo $after_widget;
        }
    }
 
function update($new_instance, $old_instance)
    {
        $instance = $old_instance;
 
        //Récupération des paramètres envoyés
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['nb_posts'] = $new_instance['nb_posts'];
 
        return $instance;
    }
 
    function form($instance)
    {
        $title = esc_attr($instance['title']);
        $nb_posts = esc_attr($instance['nb_posts']);
    ?>
        <p>
            <label for="<?php echo $this->get_field_id('title'); ?>">
                <?php echo 'Titre:'; ?>
                <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo $title; ?>" />
            </label>
        </p>
        <p>
            <label for="<?php echo $this->get_field_id('nb_posts'); ?>">
                <?php echo 'Nombre de rubriques:'; ?>
                <input class="widefat" id="<?php echo $this->get_field_id('nb_posts'); ?>" name="<?php echo $this->get_field_name('nb_posts'); ?>" type="text" value="<?php echo $nb_posts; ?>" />
            </label>
        </p>
    <?php
    }
}
 function register_sessad_widget() {
    register_widget( 'MessessadRecents' );
}
add_action('widgets_init', 'register_sessad_widget');

Comme on le voit ici je fais appel à mes custom post grâce à la fonction get_post_type.
Je peux ainsi créer à la chaîne plusieurs widgets, pour chacun de mes custom post type :
on les retrouve dans le backoffice : (Mes Eina, Mes Eme etc sont mes widgets)

e

Et en front, chaque custom post aura sa sidebar particulière: voici en exemple les trois différents widgets en exemple:

r rr z

L’astuce, si jamais vous vous retrouvez avec ça :

g

c’est à dire avec la page courante qui se retrouve dans la liste, vous devez bien ajouter dans le get_post le paramètre : ‘post__not_in’ => array (get_the_ID()):

get_posts(array('numberposts'=>$nb_posts, 'post_type'=>'sessad','post__not_in' => array (get_the_ID())));

Ainsi on obtient donc la liste des derniers custom post type sans le post courant:

(ici par exemple, le post sur lequel on est : sessad perspectives. Comme on le voit ici, il  n’est plus dans la liste à droite).

ert

Enfin, pour que la liste soit dans le bon ordre alphabétique, il faut rajouter un order by dans la fonction get_posts().

 $lastposts = get_posts(array('numberposts'=>$nb_posts, 'post_type'=>'eme','orderby' => 'title', 'order' => 'ASC' ,'post__not_in' => array (get_the_ID())));

5 commentaires sur “Un widget des derniers articles ou custom post

  1. Prevost Webmaster

    Grand merci pour ce post très complet et très bien détaillé. Du gros travail que j’ai intégré à mon site ! Merci 🙂

  2. Webmaster Prevost

    Cependant j’ai une petite remarque : Le widget ne s’affiche uniquement que lorsque je clique sur ma page dédié à min custom post type et je n’arrive pas à modifier ça. Autres choses il manque toujours le dernier post dans cette liste. Pourrais-tu m’aider stp?
    Merci encore 🙂

  3. yuyazz

    hello webmaster Prevost!
    oui il te suffit de retirer la première condition sur le custom post: if(‘sessad’ == get_post_type()) { …..}.c’est cette condition qui indique à notre widget de ne s’afficher que sur le type de post précisé.du coup tu pourra mettre ce widget dans n’importe quelle sidebar..

    pour afficher le dernier custom post créer, j’ai testé chez moi ca marche, des que je crée une nouvelle page dans l’un ou l’autre des cutoms post type, il s’affiche bien dans la liste, comme sur les images plus haut…en espérant que ca t’aide, si le dernier custom post ajouté ne se rajoute pas, c’est qu’il y a un problème ailleurs, ou dans le copier coller!!! : )
    merci en tout cas pour ton commentaire, content que ca marche (enfin , pas à 100% encore!!)

  4. Webmaster Prevost

    Merci beaucoup pour ton retour ! J’au remplacé if(‘sessad’ == get_post_type()) { …..} par if(‘sessad’) car si je supprime les conditions cela ne fonctionne plus ?
    Au fait du coup je n’ai pratiquement plus le problème d’articles qui ne s’affiche pas a par sur cette fameuse page portfolio !
    Je trouverai la solution merci encore !

  5. yuyazz

    Hello, en fait j’ai pas du comprendre ton besoin.Pour le widget, le fait d’enlever la condition te permet d’afficher le widget sur n’importe quelle sidebar.Mais il affiche le type de post que tu définis dans les paramétrages..je sais pas si je réponds à ton problème..

Laisser un commentaire

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

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.