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