扩展小部件-从最近发布的小部件中排除帖子数字段

时间:2012-08-24 作者:chris_s

我目前正在使用此代码扩展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\');

1 个回复
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]”。不会的。

结束

相关推荐

Admin Theme customization

我遵循wordpress codex网站上关于通过插件创建管理主题的说明。我激活了插件,但我的样式表没有包含在<head>.. 这是我的代码:add_action( \'admin_init\', \'kd_plugin_admin_init\' ); add_action( \'admin_menu\', \'kd_plugin_admin_menu\' ); function kd_plugin_admin_init() { /* Register