paths['css'] = AVIA_CSS_URL; $this->paths['js'] = AVIA_JS_URL; $this->stored = 'avia_sidebars'; $this->title = THEMENAME ." ". __('Custom Widget Area','avia_framework'); add_action('load-widgets.php', array(&$this, 'load_assets') , 5 ); add_action('widgets_init', array(&$this, 'register_custom_sidebars') , 1000 ); add_action('wp_ajax_avia_ajax_delete_custom_sidebar', array(&$this, 'delete_sidebar_area') , 1000 ); } //load backend css, js and add hooks to the widget page function load_assets() { add_action('admin_print_scripts', array(&$this, 'template_add_widget_field') ); add_action('load-widgets.php', array(&$this, 'add_sidebar_area'), 100); wp_enqueue_script('avia_sidebar' , $this->paths['js'] . 'avia_sidebar.js'); wp_enqueue_style( 'avia_sidebar' , $this->paths['css'] . 'avia_sidebar.css'); } //js template that gets attached to the widget area so the user can add widget names function template_add_widget_field() { $nonce = wp_create_nonce ('avia-delete-custom-sidebar-nonce'); $nonce = ''; echo "\n\n"; } //adds a sidebar area to the database function add_sidebar_area() { if(!empty($_POST['avia-add-widget'])) { $this->sidebars = get_option($this->stored); $name = $this->get_name($_POST['avia-add-widget']); if(empty($this->sidebars)) { $this->sidebars = array($name); } else { $this->sidebars = array_merge($this->sidebars, array($name)); } update_option($this->stored, $this->sidebars); wp_redirect( admin_url('widgets.php') ); die(); } } //delete a sidebar area from the database function delete_sidebar_area() { check_ajax_referer('avia-delete-custom-sidebar-nonce'); if(!empty($_POST['name'])) { $name = stripslashes($_POST['name']); $this->sidebars = get_option($this->stored); if(($key = array_search($name, $this->sidebars)) !== false) { unset($this->sidebars[$key]); update_option($this->stored, $this->sidebars); echo "sidebar-deleted"; } } die(); } //checks the user submitted name and makes sure that there are no colitions function get_name($name) { if(empty($GLOBALS['wp_registered_sidebars'])) return $name; $taken = array(); foreach ( $GLOBALS['wp_registered_sidebars'] as $sidebar ) { $taken[] = $sidebar['name']; } if(empty($this->sidebars)) $this->sidebars = array(); $taken = array_merge($taken, $this->sidebars); if(in_array($name, $taken)) { $counter = substr($name, -1); $new_name = ""; if(!is_numeric($counter)) { $new_name = $name . " 1"; } else { $new_name = substr($name, 0, -1) . ((int) $counter + 1); } $name = $this->get_name($new_name); } return $name; } //register custom sidebar areas function register_custom_sidebars() { if(empty($this->sidebars)) $this->sidebars = get_option($this->stored); $args = array( 'before_widget' => '
', 'after_widget' => '
', 'before_title' => '

', 'after_title' => '

' ); $args = apply_filters('avia_custom_widget_args', $args); if(is_array($this->sidebars)) { foreach ($this->sidebars as $sidebar) { $args['name'] = $sidebar; $args['id'] = avia_backend_safe_string($sidebar,'-'); $args['class'] = 'avia-custom'; register_sidebar($args); } } } } }