我目前正在使用此代码扩展WP\\u Widget\\u Recent\\u Posts,但我想排除让用户能够显示他们想要多少帖子的字段。我在自定义查询中有一个设置为4的数字,所以这个框没有用,我不想让用户感到困惑。
class JA_Recent_Work_Widget extends WP_Widget_Recent_Posts {
function __construct() {
$widget_ops = array(\'classname\' => \'recent_work\', \'description\' => \'This widget will display 4 of your most recent works in the ART category Jay.\');
$this->WP_Widget(\'ja_recent_work\', \'Jay Alders Recent Work\', $widget_ops);
}
function widget($args, $instance) {
extract( $args );
if( empty( $instance[\'number\'] ) || ! $number = absint( $instance[\'number\'] ) )
$number = 10;
$title = empty($instance[\'title\']) ? \' \' : apply_filters(\'widget_title\', $instance[\'title\']);
$r = new WP_Query(\'category_name=art&posts_per_page=4\');
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()); ?>"><?php echo the_title(); ?></a>
<a href="<?php the_permalink() ?>"><?php echo the_post_thumbnail(); ?></li>
<?php endwhile; ?>
</ul>
<?php echo $after_widget ?>
<?php
wp_reset_postdata();
endif;
}
}
function my_recent_widget_registration() {
unregister_widget(\'WP_Widget_Recent_Posts\');
register_widget(\'JA_Recent_Work_Widget\');
}
add_action(\'widgets_init\', \'my_recent_widget_registration\');
SO网友:s_ha_dum
您需要添加一个“form”方法。这是在后端创建小部件表单的方法。在current default 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
}
将其复制到类中,并删除以开头的行
$number
以及使用它的表单字段--第二个
<p>
.
此外,在您的widget
方法,可以跳过条件--if( empty( $instance[\'number\'] ) || ! $number = absint( $instance[\'number\'] ) )
-- 就这么定了$number
. 无需检查是否设置了“$实例[\'number]”。不会的。