我是wordpress和小部件的新手.
我想要做的图像:
http://imgur.com/KoYvV
我能够编辑default-widgets.PHP并添加另一个textarea但它无法正常工作.请帮助并引导我找到正确的方向.
class WP_Widget_Text extends WP_Widget { function __construct() { $widget_ops = array('classname' => 'widget_text','description' => __('Arbitrary text or HTML')); $control_ops = array('width' => 400,'height' => 350); parent::__construct('text',__('Text'),$widget_ops,$control_ops); } function widget( $args,$instance ) { extract($args); $title = apply_filters( 'widget_title',empty( $instance['title'] ) ? '' : $instance['title'],$instance,$this->id_base ); $text = apply_filters( 'widget_text',empty( $instance['text'] ) ? '' : $instance['text'],$instance ); $text = apply_filters( 'widget_text2',empty( $instance['text2'] ) ? '' : $instance['text2'],$instance ); echo $before_widget; if ( !empty( $title ) ) { echo $before_title . $title . $after_title; } ?> <div class="textwidget"> <?PHP echo !empty( $instance['filter'] ) ? wpautop( $text ) : $text; ?> </div> <div class="textwidget2"> <?PHP echo !empty( $instance['filter'] ) ? wpautop( $text2 ) : $text2; ?> </div> <?PHP echo $after_widget; } function update( $new_instance,$old_instance ) { $instance = $old_instance; $instance['title'] = strip_tags($new_instance['title']); if ( current_user_can('unfiltered_html') ) { $instance['text'] = $new_instance['text']; $instance['text2'] = $new_instance['text2']; } else { $instance['text'] = stripslashes( wp_filter_post_kses( addslashes($new_instance['text']) ) ); // wp_filter_post_kses() expects slashed $instance['text2'] = stripslashes( wp_filter_post_kses( addslashes($new_instance['text2']) ) ); // wp_filter_post_kses() expects slashed } $instance['filter'] = isset($new_instance['filter']); return $instance; } function form( $instance ) { $instance = wp_parse_args( (array) $instance,array( 'title' => '','text' => '','text2' => '' ) ); $title = strip_tags($instance['title']); $text = esc_textarea($instance['text']); $text2 = esc_textarea($instance['text2']); ?> <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 esc_attr($title); ?>" /></p> <textarea class="widefat" rows="16" cols="20" id="<?PHP echo $this->get_field_id('text'); ?>" name="<?PHP echo $this->get_field_name('text'); ?>"><?PHP echo $text; ?></textarea> <textarea class="widefat" rows="8" cols="20" id="<?PHP echo $this->get_field_id('text2'); ?>" name="<?PHP echo $this->get_field_name('text2'); ?>"><?PHP echo $text2; ?></textarea> <p><input id="<?PHP echo $this->get_field_id('filter'); ?>" name="<?PHP echo $this->get_field_name('filter'); ?>" type="checkBox" <?PHP checked(isset($instance['filter']) ? $instance['filter'] : 0); ?> /> <label for="<?PHP echo $this->get_field_id('filter'); ?>"><?PHP _e('Automatically add paragraphs'); ?></label></p> <?PHP } }
解决方法
我不确定你是否已经想出来了,但这里是你问题的解决方案.
首先,您不希望直接编辑窗口小部件.如果您更新wordpress,您的代码将被覆盖. wordpress具有高度可扩展性,因此您无需直接编辑代码.
理想情况下,您应该创建一个插件.如果你想学习如何,请阅读这篇http://codex.wordpress.org/Writing_a_Plugin
但是,为简单起见,我们将在您正在使用的主题中的functions.PHP中执行此操作.您可以在/wp-content/themes/your_theme/functions.PHP中找到它
//First we need to change the name of the Widget. I just named it RT_Widget_Text,so just be aware that you can change it to anything you want and to replace all instances of that text. Just make sure to not name it WP_Widget_Text class RT_Widget_Text extends WP_Widget { function __construct() { //I made a change here. I changed the class name to widget_double_text. This probably has no effect,but I just changed it for good measure. $widget_ops = array('classname' => 'widget_double_text','height' => 350); //Here is the important part. Change the "text" to "double_text" and "Text" to "Text 2" or to some other text that will identify the widget. parent::__construct('double_text',__('Text 2'),$instance ); //I changed this to $text2 = instead of $text = //This would have caused the first text section to display you text2 and your text2 to display nothing. //I wonder if this was your issue? $text2 = apply_filters( 'widget_text','text2' => '' ) ); $title = strip_tags($instance['title']); $text = esc_textarea($instance['text']); $text2 = esc_textarea($instance['text2']); ?> <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 esc_attr($title); ?>" /></p> <textarea class="widefat" rows="16" cols="20" id="<?PHP echo $this->get_field_id('text'); ?>" name="<?PHP echo $this->get_field_name('text'); ?>"><?PHP echo $text; ?></textarea> <textarea class="widefat" rows="8" cols="20" id="<?PHP echo $this->get_field_id('text2'); ?>" name="<?PHP echo $this->get_field_name('text2'); ?>"><?PHP echo $text2; ?></textarea> <p><input id="<?PHP echo $this->get_field_id('filter'); ?>" name="<?PHP echo $this->get_field_name('filter'); ?>" type="checkBox" <?PHP checked(isset($instance['filter']) ? $instance['filter'] : 0); ?> /> <label for="<?PHP echo $this->get_field_id('filter'); ?>"><?PHP _e('Automatically add paragraphs'); ?></label></p> <?PHP } } //Now you need to register your widget. Remember to change it to whatever you named your widget add_action( 'widgets_init',create_function( '','register_widget( "RT_Widget_Text" );' ) );
尽管如此,我认为你的bug可能是你的widget($args,instance)方法中的一个简单的错误:
$text = apply_filters( 'widget_text',$instance ); $text = apply_filters( 'widget_text2',$instance );
请注意,您在此处设置$text =两次.所以你基本上覆盖了文本的值,并用text2替换它.然后,将text2 null留空.
如果这不是你的问题,那么它可能与将窗口小部件注册为“文本”有关,因为它是由WP_Widget_Text占用的.这不太可能,因为我假设你直接编辑了WP_Widget_Text类.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。