web-dev-qa-db-fra.com

Comment tronquer les titres dans le widget Articles récents?

J'ai lu le fil ici à ce sujet ...

http://wordpress.org/support/topic/truncate-titles-in-recent-posts-widget?replies=8

mais la solution suggérée n'a pas fonctionné, car je ne savais pas quoi faire avec le code.

Quelqu'un peut-il me donner le code complet en utilisant le code du lien Pastebin, et ici: http://wordpress.org/support/topic/post-title-char-count?replies=5

Raccourcir les titres à 25 caractères s'il vous plaît? Je ne suis vraiment pas bon en PHP.

Il peut être plus facile de créer un plugin puisque le code est déjà là, donc tout le monde peut choisir à combien de caractères limiter les titres?

Merci beaucoup!

1
katkat

Je ne savais pas trop si je répondrais ou si je voterais simplement pour clore ce sujet. Je pense avoir suffisamment répondu au sujet initial auquel vous faites référence. Je ne ferais que me répéter ici.

Ceci dit, voici une version jusqu’à la date que vous pouvez utiliser (elle m’a pris que 2 minutes), il vous suffit d’implémenter votre propre code pour tronquer les titres dans le widget, j’ai marqué la zone de code pour vous.

add_action( 'widgets_init', 'switch_recent_posts_widget' );

function switch_recent_posts_widget() {

    unregister_widget( 'WP_Widget_Recent_Posts' );
    register_widget( 'WP_Widget_Recent_Posts_Truncated' );

}

class WP_Widget_Recent_Posts_Truncated extends WP_Widget {

    function __construct() {
        $widget_ops = array('classname' => 'widget_recent_entries', 'description' => __( "The most recent posts on your site") );
        parent::__construct('recent-posts', __('Recent Posts'), $widget_ops);
        $this->alt_option_name = 'widget_recent_entries';

        add_action( 'save_post', array(&$this, 'flush_widget_cache') );
        add_action( 'deleted_post', array(&$this, 'flush_widget_cache') );
        add_action( 'switch_theme', array(&$this, 'flush_widget_cache') );
    }

    function widget($args, $instance) {
        $cache = wp_cache_get('widget_recent_posts', 'widget');

        if ( !is_array($cache) )
            $cache = array();

        if ( isset($cache[$args['widget_id']]) ) {
            echo $cache[$args['widget_id']];
            return;
        }

        ob_start();
        extract($args);

        $title = apply_filters('widget_title', empty($instance['title']) ? __('Recent Posts') : $instance['title'], $instance, $this->id_base);
        if ( ! $number = absint( $instance['number'] ) )
            $number = 10;

        $r = new WP_Query(array('posts_per_page' => $number, 'no_found_rows' => true, 'post_status' => 'publish', 'ignore_sticky_posts' => true));
        if ($r->have_posts()) :
?>
        <?php echo $before_widget; global $post ?>
        <?php if ( $title ) echo $before_title . $title . $after_title; ?>
        <ul>
        <?php  while ($r->have_posts()) : $r->the_post(); ?>
        <li><a href="<?php the_permalink() ?>" title="<?php echo esc_attr(get_the_title() ? get_the_title() : get_the_ID()); ?>">
            <?php 
            if( get_the_title() ) 
                the_title(); // DO YOUR STRING LENGTH RESTRICTION HERE!
            else 
                the_ID(); 
            ?>
        </a></li>
        <?php endwhile; ?>
        </ul>
        <?php echo $after_widget; ?>
<?php
        // Reset the global $the_post as this query will have stomped on it
        wp_reset_postdata();

        endif;

        $cache[$args['widget_id']] = ob_get_flush();
        wp_cache_set('widget_recent_posts', $cache, 'widget');
    }

    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['number'] = (int) $new_instance['number'];
        $this->flush_widget_cache();

        $alloptions = wp_cache_get( 'alloptions', 'options' );
        if ( isset($alloptions['widget_recent_entries']) )
            delete_option('widget_recent_entries');

        return $instance;
    }

    function flush_widget_cache() {
        wp_cache_delete('widget_recent_posts', 'widget');
    }

    function form( $instance ) {
        $title = isset($instance['title']) ? esc_attr($instance['title']) : '';
        $number = isset($instance['number']) ? absint($instance['number']) : 5;
?>
        <p><label for="<?php echo $this->get_field_id('title'); ?>"><?php _e('Title:'); ?></label>
        <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; ?>" /></p>

        <p><label for="<?php echo $this->get_field_id('number'); ?>"><?php _e('Number of posts to show:'); ?></label>
        <input id="<?php echo $this->get_field_id('number'); ?>" name="<?php echo $this->get_field_name('number'); ?>" type="text" value="<?php echo $number; ?>" size="3" /></p>
<?php
    }
}

Vous devrez décider de la manière dont vous souhaitez tronquer le titre, soit par un nombre défini de mots, soit comme vous l'avez dit dans votre question, en fonction du nombre de caractères. Dans tous les cas, chaque approche présente des inconvénients. C'est pourquoi je pars. vous décidez ce que vous voulez implémenter et pourquoi ..

La zone que vous devez mettre à jour comporte un commentaire qui se présente comme suit.

// DO YOUR STRING LENGTH RESTRICTION HERE!

Petite remarque, assurez-vous simplement d'utiliser get_the_title() lorsque vous devez manipuler le titre, car cela vous donnera une valeur de retour au lieu d'une valeur imprimée (que vous obtiendrez avec the_title()).

Voici un lien vers un sujet sur StackOverflow en ce qui concerne la troncation de texte, ainsi qu'un lien Google avec une montagne de liens que vous pouvez étudier pour obtenir des idées sur l'approche à adopter pour la troncature.

https://stackoverflow.com/questions/965235/how-can-i-truncate-a-string-in-php
http: //www.google.comk/search? q = php + troncature + chaîne + à + longueur

NOTE: Ceci remplace le widget de messages récents, vous ne perdrez pas ceux que vous avez déjà configurés, il héritera et reprendra les paramètres des messages récents par défaut. widget.

2
t31os