进去看看wp-includes\\default-widgets.php
.
/**
* Recent_Posts widget class
*
* @since 2.8.0
*/
class WP_Widget_Recent_Posts 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( $args[\'widget_id\'] ) )
$args[\'widget_id\'] = $this->id;
if ( isset( $cache[ $args[\'widget_id\'] ] ) ) {
echo $cache[ $args[\'widget_id\'] ];
return;
}
ob_start();
extract($args);
$title = ( ! empty( $instance[\'title\'] ) ) ? $instance[\'title\'] : __( \'Recent Posts\' );
$title = apply_filters( \'widget_title\', $title, $instance, $this->id_base );
$number = ( ! empty( $instance[\'number\'] ) ) ? absint( $instance[\'number\'] ) : 10;
if ( ! $number )
$number = 10;
$show_date = isset( $instance[\'show_date\'] ) ? $instance[\'show_date\'] : false;
$r = new WP_Query( apply_filters( \'widget_posts_args\', array( \'posts_per_page\' => $number, \'no_found_rows\' => true, \'post_status\' => \'publish\', \'ignore_sticky_posts\' => true ) ) );
if ($r->have_posts()) :
?>
<?php echo $before_widget; ?>
<?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(); else the_ID(); ?></a>
<?php if ( $show_date ) : ?>
<span class="post-date"><?php echo get_the_date(); ?></span>
<?php endif; ?>
</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\'];
$instance[\'show_date\'] = (bool) $new_instance[\'show_date\'];
$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;
$show_date = isset( $instance[\'show_date\'] ) ? (bool) $instance[\'show_date\'] : false;
?>
<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>
<p><input class="checkbox" type="checkbox" <?php checked( $show_date ); ?> id="<?php echo $this->get_field_id( \'show_date\' ); ?>" name="<?php echo $this->get_field_name( \'show_date\' ); ?>" />
<label for="<?php echo $this->get_field_id( \'show_date\' ); ?>"><?php _e( \'Display post date?\' ); ?></label></p>
<?php
}
}
如果修改此小部件,请确保
fork it, 并将您的分叉小部件注册为
new Widget.
编辑如何分叉核心小部件
从开始the Codex entry on the Widgets API.
重命名小部件
更改此项:
class WP_Widget_Recent_Posts extends WP_Widget {}
。。。对此:
class wpse97411_Widget_Recent_Posts extends WP_Widget {}
修改Widget类以满足您的需要
注册小部件:
function wpse97413_register_custom_widgets() {
register_widget( \'wpse97411_Widget_Recent_Posts\' );
}
add_action( \'widgets_init\', \'wpse97413_register_custom_widgets\' );