1 )
{
if ( !strstr($name, '%d') )
$name = "$name %d";
$args['name'] = sprintf($name, $i);
}
register_sidebar($args);
++$i;
}
}
/**
*@desc register a single sidebar by reading his settigs from the functions.php of the template
* of no settings are found take the default settings
*/
function register_sidebar($args = array())
{
global $registered_sidebars;
if ( is_string($args) )
parse_str($args, $args);
$defaults = array(
'name' => sprintf(__('Sidebar %d'), count($registered_sidebars) + 1 ),
'before_widget' => '
',
'after_widget' => "\n",
'before_title' => '\n",
);
$sidebar = array_merge($defaults, $args);
$index = sanitize_title($sidebar['name']);
$registered_sidebars[$index] = $sidebar;
return $index;
}
/**
*@desc remove a sidebar from the registered sidebars array
*/
function unregister_sidebar($name)
{
global $registered_sidebars;
$index = sanitize_title($name);
unset( $registered_sidebars[$index] );
}
/**
*@desc register a single widget
*/
function register_sidebar_widget($name, $output_callback, $classname = '')
{
global $registered_widgets;
if ( is_array($name) )
{
$id = sanitize_title(sprintf($name[0], $name[2]));
$name = sprintf(__($name[0], $name[1]), $name[2]);
}
else
{
$id = sanitize_title($name);
$name = __($name);
}
if ( (empty($classname) || !is_string($classname)) && is_string($output_callback) )
{
$classname = $output_callback;
}
$widget = array(
'id' => $id,
'callback' => $output_callback,
'classname' => $classname,
'params' => array_slice(func_get_args(), 2)
);
if ( empty($output_callback) )
{
unset($registered_widgets[$name]);
}
elseif ( is_callable($output_callback) )
{
$registered_widgets[$name] = $widget;
}
}
/**
*@desc remove a sidebar widget
*/
function unregister_sidebar_widget($name)
{
return register_sidebar_widget($name, '');
}
/**
* @desc register the widget controll popup
* @param string $name - widget name
* @param string $control_callback - the function to call after saving the widgte
* @param string $width - DEPRECEATED but left in for compatibility issues
* @param string $height - DEPRECEATED but left in for compatibility issues
*/
function register_widget_control($name, $control_callback, $width = 300, $height = 200)
{
global $registered_widget_controls;
if ( is_array($name) )
{
$id = sanitize_title(sprintf($name[0], $name[2]));
$name = sprintf(__($name[0], $name[1]), $name[2]);
}
else
{
$id = sanitize_title($name);
$name = __($name);
}
$width = (int) $width > 90 ? (int) $width + 60 : 360;
$height = (int) $height > 60 ? (int) $height + 40 : 240;
if ( empty($control_callback) )
{
unset($registered_widget_controls[$name]);
}
else
{
$registered_widget_controls[$name] = array(
'callback' => $control_callback,
// 'width' => $width, not needed anymore
// 'height' => $height,
'params' => array_slice(func_get_args(), 4)
);
}
}
function unregister_widget_control($name)
{
return register_widget_control($name, '');
}
/**
*@desc get the sidebars
*/
function dynamic_sidebar($name = 1)
{
global $registered_sidebars, $registered_widgets;
if ( is_int($name) )
{
$name = "Sidebar $name";
}
$index = sanitize_title($name);
$sidebars_widgets = get_option('sidebars_widgets');
$sidebar = $registered_sidebars[$index];
if ( empty($sidebar) || !is_array($sidebars_widgets[$index]) || empty($sidebars_widgets[$index]) )
{
return false;
}
$did_one = false;
foreach ( $sidebars_widgets[$index] as $name )
{
$callback = $registered_widgets[$name]['callback'];
$params = array_merge(array($sidebar), $registered_widgets[$name]['params']);
$params[0]['before_widget'] = sprintf($params[0]['before_widget'], $registered_widgets[$name]['id'], $registered_widgets[$name]['classname']);
if ( is_callable($callback) )
{
call_user_func_array($callback, $params);
$did_one = true;
}
}
return $did_one;
}
/**
*@desc check if the widget is active
*/
function is_active_widget($callback)
{
global $registered_widgets;
$sidebars_widgets = get_option('sidebars_widgets');
if ( is_array($sidebars_widgets) )
{
foreach ( $sidebars_widgets as $sidebar => $widgets )
{
if ( is_array($widgets) )
{
foreach ( $widgets as $widget )
{
if ( $registered_widgets[$widget]['callback'] == $callback )
{
return true;
}
}
}
}
}
return false;
}
/**** Private Functions *****/
/**
*@desc prepare the admin menu link for adminpage
*/
function sidebar_admin_setup()
{
global $registered_sidebars;
if ( count($registered_sidebars) < 1 )
{# no sidebars defined .. no menu link
return;
}
$page = preg_replace('!^.*/wp-content/[^/]*plugins/!', '', __FILE__);
add_submenu_page('themes.php', 'Sidebar Widgets', 'Sidebar Widgets', 5, $page, 'sidebar_admin_page');
if ( $_GET['page'] == $page )
{
add_action('admin_head', 'sidebar_admin_head');
do_action('sidebar_admin_setup');
}
}
/**
*@desc add css includes and stuff to header
*/
function sidebar_admin_head()
{
global $registered_widgets, $registered_sidebars, $registered_widget_controls;
$width = 1 + 262 * ( 1 + count($registered_sidebars));
?>
$val )
{
foreach ( $val as $key1 => $val1 )
{
foreach ( $registered_widgets as $key2 => $val2 )
{
if ( $val1 == $val2['id'] )
{
$sidebars_widgets[$key][] = $key2;
}
}
}
}
update_option('sidebars_widgets', $sidebars_widgets);
}
break;
}
}
ksort($registered_widgets);
$inactive_widgets = array();
foreach ( $registered_widgets as $name => $callback )
{
$is_active = false;
foreach ( $registered_sidebars as $index => $sidebar )
{
if ( is_array($sidebars_widgets[$index]) && in_array($name, $sidebars_widgets[$index]) )
{
$is_active = true;
break;
}
}
if ( ! $is_active )
$inactive_widgets[] = $name;
}
?>
View site »'), get_settings('home') . '/'); ?>
edit': '';
if(!empty($registered_widgets[$name]['params']))
{
$number = $registered_widgets[$name]['params'][0]; # get the widget number
$options = get_option($registered_widgets[$name]['classname']); # get the widget options
$widgettitle= $options[$number]['title'] ; #get the widget title with numbering
}
else
{ #no widget numbering
$options =get_option($registered_widgets[$name]['classname']);
$widgettitle=$options['title'] ;
}
if(!empty($widgettitle))
{#show only if title is populated
$show_title= '( '.$widgettitle.' )';
}
echo "$name $show_title $popper\n";
}
function get_widget_defaults()
{
global $registered_sidebars;
foreach ( $registered_sidebars as $index => $sidebar )
{
$defaults[$index] = array();
}
return $defaults;
}
add_action('admin_menu', 'sidebar_admin_setup');
?>