我不确定我是否会回答这个话题,或者只是投票结束这个话题,我觉得我已经问了你提到的最初的话题,我只想在这里重复我自己。
这就是说,这里有一个最新版本,你可以使用(只花了我2分钟),你只需要实现自己的代码来截断小部件中的标题,我已经为你标记了代码区域。
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
}
}
您需要决定如何截断标题,或者是按一定的字数,或者如您在问题中所说,按字符数,无论如何,每种方法都有一些缺点,这就是为什么我让您来决定要实现哪个以及为什么。。
您需要更新的区域旁边有一条注释,如下所示。。
// DO YOUR STRING LENGTH RESTRICTION HERE!
小纸条,只需确保使用
get_the_title()
当您需要操纵标题时,因为这将给您一个返回值,而不是打印的值(您将得到
the_title()
).
这里有一个关于StackOverflow主题的链接,该主题与截断文本有关,还有一个google链接,其中包含大量链接,您可以研究这些链接,了解截断的方法。
https://stackoverflow.com/questions/965235/how-can-i-truncate-a-string-in-php
http://www.google.comk/search?q=php+truncate+string+to+length
NOTE: 这是现有“最近发布”小部件的替代品,您不会丢失任何已设置的内容,它将继承并接管默认“最近发布”小部件的设置。