Ich ziehe diesen Code aus meinem Total Widget Control- Plugin, sodass möglicherweise ein oder zwei Fehler auftreten. Ich weiß nicht, lass es mich wissen, wenn es so ist. Dies ist im Grunde der Widget-Code, den ich für alles verwende, was ich erstelle.
if (!function_exists("register_multiwidget")):
/**
* Register a widget
*
* @param $widget
*/
function register_multiwidget( $widget = null )
{
static $widgets;
if (!isset($widgets))
{
$widgets = array();
}
if (is_null($widget)) return $widgets;
if (!is_array($widget)) return false;
$defaults = array(
'id' => '1',
'title' => 'Generic Widget',
'classname' => '',
'description' => '',
'width' => 200,
'height' => 200,
'fields' => array(),
);
$widgets[$widget['id']] = wp_parse_args($widget, $defaults);
return true;
}
/**
* Get the registered widgets
*
* @return array
*/
function get_registered_widgets()
{
return register_multiwidget();
}
/**
* Initialize the widgets
*
* @return boolean
*/
function init_registered_widgets()
{
//initialziing variables
global $wp_widget_factory;
$widgets = get_registered_widgets();
//reasons to fail
if (empty($widgets) || !is_array($widgets)) return false;
foreach ($widgets as $id => $widget)
{
$wp_widget_factory->widgets[$id] =& new Multiple_Widget_Master( $widget );
}
return false;
}
/**
* Multiple Widget Master Class
*
* This class allows us to easily create qidgets without having to deal with the
* mass of php code.
*
* @author byrd
* @since 1.3
*/
class Multiple_Widget_Master extends WP_Widget
{
/**
* Constructor.
*
* @param $widget
*/
function Multiple_Widget_Master( $widget )
{
$this->widget = apply_filters('twc_widget_setup', $widget);
$widget_ops = array(
'classname' => $this->widget['classname'],
'description' => $this->widget['description']
);
$this->WP_Widget($this->widget['id'], $this->widget['title'], $widget_ops);
}
/**
* Display the Widget View
*
* @example extract the args within the view template
extract($args[1]);
* @param $args
* @param $instance
*/
function widget($args, $instance)
{
//initializing variables
$widget = $this->widget;
$widget['number'] = $this->number;
$args = array(
'sidebar' => $args,
'widget' => $widget,
'params' => $instance,
);
$show_view = apply_filters('twc_widget_view', $this->widget['show_view'], $widget, $instance, $args);
ob_start();
require_once $show_view;
}
/**
* Update from within the admin
*
* @param $new_instance
* @param $old_instance
*/
function update($new_instance, $old_instance)
{
//initializing variables
$new_instance = array_map('strip_tags', $new_instance);
$instance = wp_parse_args($new_instance, $old_instance);
return $instance;
}
/**
* Display the options form
*
* @param $instance
*/
function form($instance)
{
//reasons to fail
if (empty($this->widget['fields'])) return false;
do_action('twc_widget_before');
$defaults = array(
'id' => '',
'name' => '',
'desc' => '',
'type' => '',
'options' => '',
'std' => '',
);
foreach ($this->widget['fields'] as $field)
{
$field = wp_parse_args($field, $defaults);
if (isset($field['id']) && array_key_exists($field['id'], $instance))
$meta = attribute_escape($instance[$field['id']]);
if ($field['type'] != 'custom' && $field['type'] != 'metabox')
{
echo '<p><label for="',$this->get_field_id($field['id']),'">';
}
if (isset($field['name']) && $field['name']) echo $field['name'],':';
switch ($field['type'])
{
case 'text':
echo '<input type="text" name="', $this->get_field_name($field['id']), '" id="', $this->get_field_id($field['id']), '" value="', $meta ? $meta : $field['std'], '" class="twc_text" />',
'<br/><span class="description">', $field['desc'], '</span>';
break;
case 'textarea':
echo '<textarea class="twc_textarea" name="', $this->get_field_name($field['id']), '" id="', $this->get_field_id($field['id']), '" cols="60" rows="4" style="width:97%">', $meta ? $meta : $field['std'], '</textarea>',
'<br/><span class="description">', $field['desc'], '</span>';
break;
case 'select':
echo '<select class="twc_select" name="', $this->get_field_name($field['id']), '" id="', $this->get_field_id($field['id']), '">';
foreach ($field['options'] as $option)
{
echo '<option', $meta == $option ? ' selected="selected"' : '', '>', $option, '</option>';
}
echo '</select>',
'<br/><span class="description">', $field['desc'], '</span>';
break;
case 'radio':
foreach ($field['options'] as $option)
{
echo '<input class="twc_radio" type="radio" name="', $this->get_field_name($field['id']), '" value="', $option['value'], '"', $meta == $option['value'] ? ' checked="checked"' : '', ' />',
$option['name'];
}
echo '<br/><span class="description">', $field['desc'], '</span>';
break;
case 'checkbox':
echo '<input type="hidden" name="', $this->get_field_name($field['id']), '" id="', $this->get_field_id($field['id']), '" /> ',
'<input class="twc_checkbox" type="checkbox" name="', $this->get_field_name($field['id']), '" id="', $this->get_field_id($field['id']), '"', $meta ? ' checked="checked"' : '', ' /> ',
'<br/><span class="description">', $field['desc'], '</span>';
break;
case 'custom':
echo $field['std'];
break;
case 'metabox':
if ((isset($_REQUEST['action']) && $_REQUEST['action'] == 'edit')
|| (isset($_REQUEST['action']) && $_REQUEST['action'] == 'add' && isset($_REQUEST['addnew'])))
echo '</div>
</div>
<div id="query_view_params" class="postbox">
<div class="handlediv" title="Click to toggle"><br></div>
<h3 class="hndle">
<span>Query View Parameters</span>
</h3>
<div class="inside">';
break;
}
if ($field['type'] != 'custom' && $field['type'] != 'metabox')
{
echo '</label></p>';
}
}
do_action('twc_widget_after');
return;
}
}// ends Master Widget Class
endif;
Sobald Sie dies in Ihre Datei functions.php eingefügt haben, können Sie innerhalb von Sekunden neue Widgets deklarieren. Hier ist der Code zum Deklarieren eines neuen Widgets.
register_multiwidget(array(
'id' => 'first-custom-widget', // Must be slug compatible, and unique, it's used a lot
'title' => __('aaaFirst Widget'),
'description' => __('This is my description'),
'classname' => 'st-custom-wi',
'show_view' => 'path/to/my/widget_view_file.php',
'fields' => array(
array(
'name' => 'Text box',
'desc' => 'Enter something here',
'id' => 'text',
'type' => 'text',
'std' => 'Default value 1'
),
array(
'type' => 'custom',
'std' => '<hr/>'
),
array(
'name' => 'Textarea',
'desc' => 'Enter big text here',
'id' => 'textarea',
'type' => 'textarea',
'std' => 'Default value 2'
),
array(
'name' => 'Select box',
'id' => 'select',
'type' => 'select',
'options' => array('Option 1', 'Option 2', 'Option 3')
),
array(
'name' => 'Radio',
'id' => 'radio',
'type' => 'radio',
'options' => array(
array('name' => 'Name 1', 'value' => 'Value 1'),
array('name' => 'Name 2', 'value' => 'Value 2')
)
),
array(
'name' => 'Checkbox',
'id' => 'checkbox',
'type' => 'checkbox'
),
)
));
Deklarieren Sie die gewünschten Felder für Ihre Widget-Optionen mit dem obigen Array, und Sie sind fast fertig.
Als letztes müssen Sie Ihren Widgets-HTML-Code in Ihren neuen Dateipfad / to / my / widget_view_file.php einfügen
Fügen Sie oben in dieser Widget-Ansichtsdatei den folgenden Code hinzu: <?php extract($args[1]); ?>
Dadurch werden drei Variablen aufgeteilt, die Sie verwenden können:
- $ Seitenleiste
- $ Widget
- $ params