I am just creating a plugin in wordpress. In this plugin I am trying to create a widget, In that widget it will show a title, input text and text area in the widget section and when the values will be entered it will show to the site frontend. For that my code is like this
<?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');
?>
But when I am trying activate the plugin from dashboard it is showing error like
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
and the plugin is not activating So can someone kindly tell me how to solve this. Any help will be really appreciable. Thanks
The second parameter for
add_action()
must be a function or a member of an object. In the second case you have to pass an array( $object, 'method_name')
.To register the widget from within the class, add the following method to your widget class:
Then change your
add_action()
call to: