我只是在wordpress中创建一个插件。在这个插件中,我试图创建一个小部件,在该小部件中,它将在小部件部分显示标题、输入文本和文本区域,当输入值时,它将显示给站点前端。因此,我的代码如下
<?php
/*
Plugin Name: WP Simple Plugin
Plugin URI: http://www.wordpress.org
Description: A Plugin to show simple text in widget
Version: 0.1
Author:
*/
class wp_my_plugin extends WP_Widget {
// constructor
function wp_my_plugin() {
parent::WP_Widget(false, $name = __(\'My Widget\', \'wp_widget_plugin\') );
}
function form($instance) {
if($instance) {
$title = esc_attr($instance[\'title\']);
$text = esc_attr($instance[\'text\']);
$textarea = esc_attr($instance[\'textarea\']);
} else {
$title = \'\';
$text = \'\';
$textarea = \'\';
}
?>
<p>
<label for="<?php echo $this->get_field_id(\'title\'); ?>"><?php _e(\'Widget Title\', \'wp_widget_plugin\'); ?></label>
<input class="widefat" type="text" id="<?php echo $this->get_field_id(\'title\'); ?>" name="<?php echo $this->get_field_name(\'title\');?>" value="<?php echo $title; ?>"/>
</p>
<p>
<label for="<?php echo $this->get_field_id(\'text\')?>"><?php _e(\'Text\', \'wp_widget_plugin\');?></label>
<input type="text" class="widefat" name="<?php echo $this->get_field_name(\'text\');?>" id="<?php echo get_field_id(\'text\');?>" value="<?php echo $text; ?>" />
</p>
<p>
<label for="<?php echo $this->get_field_id(\'textarea\');?>"><?php _e(\'Textarea\',\'wp_widget_plugin\'); ?></label>
<textarea name="<?php echo $this->get_field_name(\'textarea\'); ?>" id="<?php echo $this->get_field_id(\'textarea\'); ?>" class="widefat" /><?php echo $textarea; ?></textarea>
</p>
<?php
}
function update($new_instance, $old_instance) {
$instance = $old_instance;
//Fields
$instance[\'title\'] = strip_tags($new_instance[\'title\']);
$instance[\'text\'] = strip_tags($new_instance[\'text\']);
$instance[\'textarea\'] = strip_tags($new_instance[\'textarea\']);
return $instance;
/* */
}
function widget($args, $instance) {
extract ($args);
//The widget Options
$title = apply_filters(\'widget_title\' , $instance[\'title\']);
$text = $instance[\'text\'];
$textarea = $instance[\'textarea\'];
echo $before_widget;
//Display Widget
echo \'<div class="widget-text wp_widget_plugin_box">\';
//Check If Title Is Set
if($title) {
echo $before_title.$title.$after_title;
}
//check if text is set
if($text) {
echo \'<p class="wp_widget_plugin_text">\'.$text.\'</p>\';
}
//check if texrarea is set
if($textarea) {
echo \'<p class="wp_widget_plugin_textarea">\'.$textarea.\'</p>\';
}
echo \'</div>\';
echo $after_widget;
}
}
// register widget
add_action(\'widgets_init\', \'wp_my_plugin\');
?>
但当我试图从仪表板激活插件时,它显示的错误如下
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function \'wp_my_plugin\' not found or invalid function name in /wordpress/wp-includes/plugin.php on line 406
插件没有激活,所以有人可以告诉我如何解决这个问题。任何帮助都将非常可观。谢谢
SO网友:fuxia
的第二个参数add_action()
必须是函数或对象的成员。在第二种情况下,必须传递一个数组( $object, \'method_name\')
.
要从类中注册小部件,请将以下方法添加到小部件类中:
/**
* Tell WP we want to use this widget.
*
* @wp-hook widgets_init
* @return void
*/
public static function register()
{
register_widget( __CLASS__ );
}
然后更改您的
add_action()
致电:
add_action( \'widgets_init\', array ( \'wp_my_plugin\', \'register\' ) );