web-dev-qa-db-fra.com

le plugin wordpress n'active pas le widget

Je viens de créer un plugin dans Wordpress. Dans ce plugin, j'essaie de créer un widget. Dans ce widget, il affichera un titre, du texte et une zone de texte dans la section du widget et, lorsque les valeurs seront entrées, il sera affiché à la façade du site. Pour que mon code soit comme ça

<?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');

?>

Mais quand j'essaie d'activer le plugin à partir du tableau de bord, il montre une erreur comme

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 

et le plugin n'est pas activé. Quelqu'un peut-il me dire comment résoudre ce problème? Toute aide sera vraiment appréciable. Merci

1
user159377

Le deuxième paramètre pour add_action() doit être une fonction ou un membre d'un objet. Dans le second cas, vous devez passer un tableau ( $object, 'method_name').

Pour inscrire le widget depuis la classe, ajoutez la méthode suivante à votre classe de widget:

/**
 * Tell WP we want to use this widget.
 *
 * @wp-hook widgets_init
 * @return void
 */
public static function register()
{
    register_widget( __CLASS__ );
}

Puis changez votre appel add_action() en:

add_action( 'widgets_init', array ( 'wp_my_plugin', 'register' ) );
1
fuxia