帮我整理我的小部件代码

时间:2013-06-10 作者:v123shine

我是WordPress和PHP的新手。我创建了一个小部件来嵌入来自YouTube或其他视频宿主的视频。一切正常。

我知道我有凌乱的代码,因此如果有人能够整理我的代码,我将不胜感激。

这是我的代码:

<?php
/**
 * Plugin Name: Widget Name
 * Author: Author Name
 * Author URI: Site URL
 */

class Today_video extends WP_Widget {

    /**
     * Widget setup.
     */
    function Today_video() {
        /* Widget settings. */
        $widget_ops = array( \'classname\' => \'tm_widget_today_video\', \'description\' => __(\'Display today video on your site\', \'today_video\') );

        /* Widget control settings. */
        $control_ops = array( \'width\' => 300, \'height\' => 350, \'id_base\' => \'today_video\' );

        /* Create the widget. */
        $this->WP_Widget( \'today_video\' , __( \'Today Video\' , \'today_video\' ), $widget_ops );
    }

    /**
     * The frontend function
     */
    function widget( $args, $instance ) {
        extract( $args );

        /* Our variables from the widget settings. */
        if(isset($instance))
        {
            if( isset( $instance[ \'title\' ] ) ) {
                $title = apply_filters( \'widget_title\', $instance[ \'title\' ] );
            }

            if( isset( $instance[ \'template\' ] ) ) {
                $template = htmlspecialchars_decode( $instance[ \'template\' ] );
            }
        }

        /* Before widget (defined by themes). */
        if( isset( $before_widget ) ) {
        echo $before_widget;
        }

        /* Display the widget title if one was input (before and after defined by themes). */
        if( isset( $title ) ) { 
        echo $before_title . $title . $after_title; 
        }

        /* Display the widget video */
        if( isset( $template ) ) { 
        echo \'<div class="tm_today_video"> \'.$template.\' </div>\';
        }

        /* After widget (defined by themes). */
        echo $after_widget;

    }


    /**
     * Backend widget settings
     */
    function update( $new_instance, $old_instance ) {
        $instance = $old_instance;

        /* Strip tags for title and name to remove HTML (important for text inputs). */
        $instance[\'title\'] =            strip_tags( $new_instance[\'title\'] );

        // htmlspecialchars to save html markup in database, at frontend we use htmlspecialchars_decode
        $instance[\'template\'] =         htmlspecialchars($new_instance[\'template\']);

        return $instance;
    }

    /**
     * Displays the widget settings controls on the widget panel.
     *
     * Backend widget options form
     */
    function form( $instance ) {
        $defaults = array( 
            \'title\' => __(  \'Today Video\', \'today_video\'), 
                            \'template\' => __(\'<iframe width="200" height="112" src="http://www.youtube.com/embed/Xrt1V_XhvSk?showinfo=0" frameborder="0" allowfullscreen></iframe>\', \'today_video\'),
                        );

        $instance = wp_parse_args( (array) $instance, $defaults ); ?>
        <p>
            <label for="<?php echo $this->get_field_id( \'title\' ); ?>"><?php _e(\'Title:\', \'hybrid\'); ?></label>
            <input id="<?php echo $this->get_field_id( \'title\' ); ?>" name="<?php echo $this->get_field_name( \'title\' ); ?>" value="<?php echo $instance[\'title\']; ?>" style="width:96%;" />
        </p>

        <p>
            <label for="<?php echo $this->get_field_id( \'template\' ); ?>"><?php _e(\'Embed Code:\', \'hybrid\'); ?></label>
            <textarea id="<?php echo $this->get_field_id( \'template\' ); ?>" name="<?php echo $this->get_field_name( \'template\' ); ?>"  style="width:100%;height:100px;"><?php echo $instance[\'template\']; ?></textarea>
        </p>

    <?php
    }
} //Add function to widgets_init that\'ll load today_video
add_action( \'widgets_init\', create_function( \'\', \'register_widget( "Today_video" );\' ) );
?>
谢谢你。

1 个回复
SO网友:s_ha_dum

您的班级名称:

我会在类名前面加前缀,以减少冲突的可能性Your_Initials_Today_Video, 或namespace 但是要知道,PHP名称空间需要比WordPress requires. 这可能会导致问题您的构造函数:

您可以使用__construct 而不是Today_video 为您的构造函数。WordPress no longer supports PHP 4, 所以你也不应该这样widget 功能:

  1. $instance 应始终设置。您无需明确检查ITE,即使未设置isset( $instance[ \'title\' ] )仍能正确操作,无误。“包装器”条件是不必要的form 功能:

    将该标记嵌入template 参数很容易出现标记错误。我将添加一组单独的参数--height, width, src, 无论您需要什么--并生成iframe 动态

虽然我可能会做一些不同的事情,但我不会将代码称为“凌乱”,也不会发现任何重大问题,也不会触发任何警告或通知。

结束

相关推荐

Using tabs in admin widgets

更新:我应该指出,我在插件/主题选项页面上测试了下面的方法,效果非常好。事实上,我还能够包括jQuery cookie插件,以保留页面加载之间的当前选项卡选择(很好!)。当您有多个小部件选项时,尝试向管理小部件添加选项卡以减少表单占用空间。我正在使用WordPress附带的jQuery UI选项卡。以下是我迄今为止在插件中编写的代码。http://pastebin.com/fe4wdBcp当小部件被拖动到小部件区域时,选项卡似乎呈现为OK,但您无法单击查看第二个选项卡。更糟糕的是,如果刷新窗口小部件页面,