首页 > 新闻资讯 > 如何在WordPress 2.8中用新Widget API创建Widget

如何在WordPress 2.8中用新Widget API创建Widget

0条评论
标签:
更多

新的Widget API(应用程序接口)是WordPress 2.8的一大变革。 本API完全面向对象,为程序员提供创建WordPress Widget的所有必备函数。 该API还允许一Widget多用。

Widget API位于wp-includes/Widget.php中,而Widget位于wp-includes/Widget.php中。WP_Widget类具备Widgets的功能,每个Widget都必须被遗传。 WP_Widget_Factory类负责为Widget注册并将其体现出来。

如何在WordPress 2.8中创建Widget?

这是一个简单示例,输出结果是文章和评论的RSS feed链接。 首先在functions.php中创建Widget骨架:

class My_RSS_Widget extends WP_Widget {
    function My_RSS_Widget() {
        //Constructor
    }
 
    function widget($args, $instance) {
        // prints the widget
    }
 
    function update($new_instance, $old_instance) {
        //save the widget
    }
 
    function form($instance) {
        //widgetform in backend
    }
}
register_widget('My_RSS_Widget');

这样就创建了一个My_RSS_Widget类,该类遗传WP_Widget类(扩展)的属性和方法。 在新Widget中,必须要创建Widget和update 方法,form 方法可以选择性创建。 Widget在register_Widget ( 'My_RSS_Widget')函数陪同下开始注册。

下面填充Widget:

class My_RSS_Widget extends WP_Widget {
    function My_RSS_Widget() {
        $widget_ops = array('classname' => 'widget_rss_links', 'description' => 'A list with your feeds links' );
        $this->WP_Widget('rss_links', 'Feed links', $widget_ops);
    }
 
    function widget($args, $instance) {
        extract($args, EXTR_SKIP);
 
        echo $before_widget;
        $title = empty($instance['title']) ? ' ' : apply_filters('widget_title', $instance['title']);
        $entry_title = empty($instance['entry_title']) ? ' ' : apply_filters('widget_entry_title', $instance['entry_title']);
        $comments_title = empty($instance['comments_title']) ? ' ' : apply_filters('widget_comments_title', $instance['comments_title']);
 
        if ( !empty( $title ) ) { echo $before_title . $title . $after_title; };
        echo '<ul id="rss">';
        echo '  <li><a href=" ' . get_bloginfo('rss2_url') . '" rel="nofollow" title=" ' . wp $entry_title . ' ">' . $entry_title . '</a></li>';
        echo '  <li><a href=" ' . get_bloginfo('comments_rss2_url') . '" rel="nofollow" title="  '. $comments_title . ' ">' . $comments_title . '</a></li>';
        echo '</ul>';
        echo $after_widget;
    }
 
    function update($new_instance, $old_instance) {
        $instance = $old_instance;
        $instance['title'] = strip_tags($new_instance['title']);
        $instance['entry_title'] = strip_tags($new_instance['entry_title']);
        $instance['comments_title'] = strip_tags($new_instance['comments_title']);
 
        return $instance;
    }
 
    function form($instance) {
        $instance = wp_parse_args( (array) $instance, array( 'title' => '', 'entry_title' => '', 'comments_title' => '' ) );
        $title = strip_tags($instance['title']);
        $entry_title = strip_tags($instance['entry_title']);
        $comments_title = strip_tags($instance['comments_title']);
?>
            <p><label for="<?php echo $this->get_field_id('title'); ?>">Title: <input class="widefat" id="<?php echo $this->get_field_id('title'); ?>" name="<?php echo $this->get_field_name('title'); ?>" type="text" value="<?php echo attribute_escape($title); ?>" /></label></p>
            <p><label for="<?php echo $this->get_field_id('entry_title'); ?>">Title for entry feed: <input class="widefat" id="<?php echo $this->get_field_id('entry_title'); ?>" name="<?php echo $this->get_field_name('entry_title'); ?>" type="text" value="<?php echo attribute_escape($entry_title); ?>" /></label></p>
            <p><label for="<?php echo $this->get_field_id('comments_title'); ?>">Title for comments feed: <input class="widefat" id="<?php echo $this->get_field_id('comments_title'); ?>" name="<?php echo $this->get_field_name('comments_title'); ?>" type="text" value="<?php echo attribute_escape($comments_title); ?>" /></label></p>
<?php
    }
}
register_widget('My_RSS_Widget');

该Widget的作用是,为前台的输出结果检查update数据并存储Widget的示例,form在后台生成输入掩码,在本例中掩码用于Widget标题与所显示的链接文本。

不需对代码加以说明。 Widget函数负责前台的输出结果,update检查数据并存储Widget的示例,form在后台生成输入掩码,在本例中掩码用于Widget标题与所显示的链接文本。

现在就可以执行自己的想法了。

原文:Build A WordPress 2.8 Widget With The New Widget API

* 版权声明:作者WordPress啦! 转载请注明出处。