WordPress插件未从Widget激活

时间:2013-10-25 作者:user159377

我只是在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 
插件没有激活,所以有人可以告诉我如何解决这个问题。任何帮助都将非常可观。谢谢

1 个回复
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\' ) );

结束

相关推荐

Wp-login.php未返回错误消息/或给出404

我有几个WP网站上周登录良好。现在,他们都无法使用本机wp登录。php。奇怪的是,有些网站安装了“Woocommerce”插件,使用插件登录表单我可以访问仪表板。但不使用wp登录。php我已经尝试过:将此添加到wp配置。php/** wp-admin login fix */ define(\'ADMIN_COOKIE_PATH\', \'/\'); 重新上传除wp内容外的所有wp文件更改wp登录的文件权限。php永磁链接开关已删除。htaccess禁用的插件在新DB上100%全新安装W