Bien que WordPress soit, pour moi l’un des CMS grand public les plus complet du marché. Parfois on a besoin d’un module spécifique et c’est là que ce mini-tutorial entre en jeu !
Vous voyez le widget sur votre droite avec le texte défilant qui vous proposes les derniers articles de la catégorie Print’minute, il est tout simple mais je n’en avais pas trouvé !
Du coup voici le code, que je commenterai dès que j’aurai un peu de temps !
Mais bon au moins celui-ci marche et est testé en live, devant vos yeux !
<?php /* Plugin Name: Cat'Ligne Plugin URI: http://printf.eu Description: Propose un widget qui affiche ligne par ligne le contenu d'une catégorie Version: 0.1 Author: Florian Hyne Author URI: http://printf.eu */ function widget_catligne() { register_widget("CatLigne"); } add_action("widgets_init", "widget_catligne"); class CatLigne extends WP_Widget { //Constructeur function CatLigne() { parent::WP_Widget(false, $name = 'CatLigne', array('name' => 'CatLigne', 'description' => 'Affichage les article d'une catégorie ligne par ligne')); } //Affichage du widget function widget($args, $instance) { //Récupération des paramètres extract($args); $title = apply_filters('widget_title', $instance['title']); $nb_posts = $instance['nb_posts']; $category = $instance['category']; $orderby = $instance['orderby']; $wait_time = round($instance['wait_time']/70)+2; //Récupération des articles $lastposts = get_posts(array('numberposts'=>$nb_posts,'category_name'=>$category,'orderby'=>$orderby)); //définition des categories pour le js $list_titre = ""; $list_lien = ""; foreach ( $lastposts as $post ) { setup_postdata($post); $list_titre .= '"'.$post->post_title.'",'; $list_lien .= '"'.get_permalink($post->ID).'",'; $list_date .= '"'.date("d/m H:i #",strtotime($post->post_date)).'",'; } //on enleve le dernier caractere $list_titre = substr($list_titre, 0, -1); $list_lien = substr($list_lien, 0, -1); $list_date = substr($list_date, 0, -1); ?> <?php //Affichage echo $before_widget; if ($title) echo $before_title . $title . $after_title; else echo $before_title . 'Print'Minute' . $after_title; ?> <div style="height:42px"> <a id="display_link" href="http://printf.eu"><p id="display_title"><p></a> </div> <script type="text/javascript"> function sleep(time){ var start = date.getTime(); while(start+time > date.getTime()) true; return; } function countInObject(obj) { var count = 0; // iterate over properties, increment if a non-prototype property for(var key in obj) if(obj.hasOwnProperty(key)) count++; return count; } var vitesse = 70;// vitesse de défilement categories = new Array([<?php echo $list_titre?>],[<?php echo $list_lien?>],[<?php echo $list_date?>]); titre_tab = new Array(<?php echo $list_titre?>); var catlen = titre_tab.length; display_title = document.getElementById('display_title'); display_link = document.getElementById('display_link'); //ajouter heure var cat = 0; var txt = categories[0][0]; var link = categories[1][0]; var date = categories[2][0]; var waittime = <?php echo $wait_time?>; function afficherNouveauTitre(id) { if(id > catlen - 1) id = 0; txt = categories[0][id]; link = categories[1][id]; date = categories[2][id]; display_title.innerHTML = date+" "; totaltime = txt.length+waittime; for(var i = 0, l = totaltime+1; i < l; i++) { ( function(i) { setTimeout(function() { display_title.innerHTML += txt.charAt(i); display_link.href = link; if(i == totaltime) { cat = id + 1; afficherNouveauTitre(cat); } }, i * vitesse); }(i)); } } afficherNouveauTitre(0); </script> <?php echo $after_widget; } //Mise à jour des paramètres du 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']; $instance['category'] = $new_instance['category']; $instance['orderby'] = $new_instance['orderby']; $instance['wait_time'] = $new_instance['wait_time']; return $instance; } //Affichage des paramètres du widget dans l'admin function form($instance) { $title = esc_attr($instance['title']); $nb_posts = esc_attr($instance['nb_posts']); $category = esc_attr($instance['category']); $orderby = esc_attr($instance['orderby']); $wait_time = esc_attr($instance['wait_time']); ?> <p> <label for="<?php echo $this->get_field_id('title'); ?>"> <?php echo 'Title:'; ?> <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 'Number of Posts:'; ?> <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> <p> <label for="<?php echo $this->get_field_id('wait_time'); ?>"> <?php echo 'Waiting time (millisecond):'; ?> <input class="widefat" id="<?php echo $this->get_field_id('wait_time'); ?>" name="<?php echo $this->get_field_name('wait_time'); ?>" type="text" value="<?php echo $wait_time; ?>" /> </label> </p> <p> <label for="<?php echo $this->get_field_id('category'); ?>"> <?php echo 'Catégory:'; $category_list = get_categories();?> <select class="widefat" id="<?php echo $this->get_field_id( 'category' ); ?>" name="<?php echo $this->get_field_name( 'category' ); ?>"> <?php foreach ($category_list as $category_name) { ?> <option value="<?php echo $category_name->name; ?>" <?php selected( $instance['category'], $category_name->name ); ?>><?php echo $category_name->name; ?></option> <?php } ?> </select> </label> </p> <p> <label for="<?php echo $this->get_field_id('orderby'); ?>"> <?php echo 'Order:'; ?> <?php $orders = array('rand'=>'Random','desc'=>'New first','asc'=>'Old first');?> <select class="widefat" id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>"> <?php foreach ( $orders as $key => $name ) { ?> <option value="<?php echo $key; ?>" <?php selected( $instance['orderby'], $key ); ?>><?php echo $name; ?></option> <?php } ?> </select> </label> </p> <?php } }
Code is poetry !