[136] | 1 | <?php
|
---|
| 2 | function widget_block($options)
|
---|
| 3 | {
|
---|
| 4 | $mydirname = empty( $options[0] ) ? 'xpress' : $options[0] ;
|
---|
| 5 | $this_template = empty( $options[1] ) ? 'db:'.$mydirname.'_block_widget.html' : trim( $options[1] );
|
---|
| 6 | $selected = array_slice($options,2); // get allowed cats
|
---|
| 7 |
|
---|
| 8 | $output = '';
|
---|
| 9 | foreach($selected as $select){
|
---|
| 10 | $ex = explode('::',$select);
|
---|
| 11 | $sidebar_id = $ex[0];
|
---|
| 12 | $widget_id = $ex[1] ;
|
---|
| 13 |
|
---|
| 14 | ob_start();
|
---|
| 15 | render_widget($sidebar_id,$widget_id);
|
---|
| 16 | $output .= ob_get_contents();
|
---|
| 17 | ob_end_clean();
|
---|
| 18 | }
|
---|
| 19 | // if (count($selected) > 1)
|
---|
| 20 | $block['widget'] = "<ul>\n" . $output . "\n</ul>\n";
|
---|
| 21 | // else
|
---|
| 22 | // $block['widget'] = $output;
|
---|
| 23 | return $block ;
|
---|
| 24 | }
|
---|
| 25 |
|
---|
| 26 | function render_widget($index = 1, $widget_id) {
|
---|
| 27 | global $wp_registered_sidebars, $wp_registered_widgets;
|
---|
| 28 |
|
---|
| 29 | if ( is_int($index) ) {
|
---|
| 30 | $index = "sidebar-$index";
|
---|
| 31 | } else {
|
---|
| 32 | $index = sanitize_title($index);
|
---|
| 33 | foreach ( (array) $wp_registered_sidebars as $key => $value ) {
|
---|
| 34 | if ( sanitize_title($value['name']) == $index ) {
|
---|
| 35 | $index = $key;
|
---|
| 36 | break;
|
---|
| 37 | }
|
---|
| 38 | }
|
---|
| 39 | }
|
---|
[252] | 40 | if (!function_exists('wp_get_sidebars_widgets')) {
|
---|
| 41 | echo 'Not support sidebar widget';
|
---|
| 42 | return;
|
---|
| 43 | }
|
---|
[136] | 44 | $sidebars_widgets = wp_get_sidebars_widgets();
|
---|
| 45 | $registered_sidebars = $wp_registered_sidebars[$index];
|
---|
| 46 | $key_exists = array_key_exists($index, $sidebars_widgets);
|
---|
| 47 | $is_array = is_array($sidebars_widgets[$index]);
|
---|
| 48 |
|
---|
| 49 |
|
---|
| 50 |
|
---|
| 51 | if ( empty($registered_sidebars) || !$key_exists || !$is_array || empty($sidebars_widgets[$index]) )
|
---|
| 52 | return false;
|
---|
| 53 |
|
---|
| 54 | $sidebar = $wp_registered_sidebars[$index];
|
---|
| 55 |
|
---|
| 56 | $did_one = false;
|
---|
| 57 | foreach ( (array) $sidebars_widgets[$index] as $id ) {
|
---|
| 58 | if ($id != $widget_id) continue;
|
---|
| 59 | $params = array_merge(
|
---|
| 60 | array( array_merge( $sidebar, array('widget_id' => $id, 'widget_name' => $wp_registered_widgets[$id]['name']) ) ),
|
---|
| 61 | (array) $wp_registered_widgets[$id]['params']
|
---|
| 62 | );
|
---|
| 63 |
|
---|
| 64 | // Substitute HTML id and class attributes into before_widget
|
---|
| 65 | $classname_ = '';
|
---|
| 66 | foreach ( (array) $wp_registered_widgets[$id]['classname'] as $cn ) {
|
---|
| 67 | if ( is_string($cn) )
|
---|
| 68 | $classname_ .= '_' . $cn;
|
---|
| 69 | elseif ( is_object($cn) )
|
---|
| 70 | $classname_ .= '_' . get_class($cn);
|
---|
| 71 | }
|
---|
| 72 | $classname_ = ltrim($classname_, '_');
|
---|
| 73 | $params[0]['before_widget'] = sprintf($params[0]['before_widget'], $id, $classname_);
|
---|
| 74 |
|
---|
| 75 | $params = apply_filters( 'dynamic_sidebar_params', $params );
|
---|
| 76 |
|
---|
| 77 | $callback = $wp_registered_widgets[$id]['callback'];
|
---|
| 78 |
|
---|
| 79 | if ( is_callable($callback) ) {
|
---|
| 80 | call_user_func_array($callback, $params);
|
---|
| 81 | $did_one = true;
|
---|
| 82 | }
|
---|
| 83 | }
|
---|
| 84 |
|
---|
| 85 | return $did_one;
|
---|
| 86 | }
|
---|
| 87 | ?> |
---|