我正在尝试开发自己的小部件。主要是因为我想了解Wordpress的功能(是的,我是全新的。第一次尝试扩展Wordpress)
我想在最近的帖子小部件中添加一个显示帖子缩略图选项的功能。
我复制了原来的小部件,并为新的复选框添加了功能(目前),我的问题是复选框状态(已选中或未选中)不起作用。当我点击save时,复选框被取消选中。如果我强制选中该值,则显示缩略图的代码可以工作。
这是我的当前代码我的更改与$show_thumbnail = isset( $instance[\'show_thumbnail\'] ) ? $instance[\'show_thumbnail\'] : false;
<?PHP
/*-----------------------------------------------------------------------------------
Plugin Name: Recent Posts Widget
Plugin URI: http://www.webadelic.co.uk
Description: Displays recent blog posts from a standard post type.
Version: 1.0
Author: David Martin
Author URI: http://www.webadelic.co.uk
-----------------------------------------------------------------------------------*/
// Add webadelic_recent_blog_widgets function to widgets_init, this will load the widget.
add_action( \'widgets_init\', \'svib_widget_recent_entries\' );
// Register the widget.
function svib_widget_recent_entries() {
register_widget( \'svib_widget_recent_entries\' );
}
class svib_widget_recent_entries extends WP_Widget {
function __construct() {
$widget_ops = array(\'classname\' => \'svib_widget_recent_entries\', \'description\' => __( "Your site’s most recent Posts.") );
parent::__construct(\'recent-posts\', __(\'Recent Posts\'), $widget_ops);
$this->alt_option_name = \'svib_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 = array();
if ( ! $this->is_preview() ) {
$cache = wp_cache_get( \'svib_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\' );
/** This filter is documented in wp-includes/default-widgets.php */
$title = apply_filters( \'widget_title\', $title, $instance, $this->id_base );
$number = ( ! empty( $instance[\'number\'] ) ) ? absint( $instance[\'number\'] ) : 5;
if ( ! $number )
$number = 5;
$show_date = isset( $instance[\'show_date\'] ) ? $instance[\'show_date\'] : false;
$show_thumbnail = isset( $instance[\'show_thumbnail\'] ) ? $instance[\'show_thumbnail\'] : false;
/**
* Filter the arguments for the Recent Posts widget.
*
* @since 3.4.0
*
* @see WP_Query::get_posts()
*
* @param array $args An array of arguments used to retrieve the recent posts.
*/
$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>
<?php if ( $show_thumbnail ) : ?>
<?php echo get_the_post_thumbnail (); ?>
<?php endif; ?>
<a href="<?php the_permalink(); ?>"><?php get_the_title() ? the_title() : 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;
if ( ! $this->is_preview() ) {
$cache[ $args[\'widget_id\'] ] = ob_get_flush();
wp_cache_set( \'widget_recent_posts\', $cache, \'widget\' );
} else {
ob_flush();
}
}
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\'] = isset( $new_instance[\'show_date\'] ) ? (bool) $new_instance[\'show_date\'] : false;
$instance[\'show_thumbnail\'] = isset( $new_instance[\'show_thumbnail\'] ) ? (bool) $new_instance[\'show_thumbnail\'] : false;
$this->flush_widget_cache();
$alloptions = wp_cache_get( \'alloptions\', \'options\' );
if ( isset($alloptions[\'svib_widget_recent_entries\']) )
delete_option(\'svib_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;
$show_thumbnail = isset( $instance[\'show_thumbnail\'] ) ? (bool) $instance[\'show_thumbnail\'] : 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>
<p><input class="checkbox" type="checkbox" <?php checked( $show_thumbnail ); ?> id="<?php echo $this->get_field_id( \'show_thumbnail\' ); ?>" name="<?php echo $this->get_field_name( \'show_thumbnail\' ); ?>" />
<label for="<?php echo $this->get_field_id( \'show_thumbnail\' ); ?>"><?php _e( \'Display post Thumbnail?\' ); ?></label></p>
<?php
}
}