class-fwp-widget-output.php
77 lines
| 1 | <?php |
| 2 | /** |
| 3 | * Class Widget_Output_1x0x0 |
| 4 | * |
| 5 | * This component was inspired by the 'widget_content' filter of |
| 6 | * Widget Logic Plugin by Alan Trewartha (http://freakytrigger.co.uk/author/alan/) |
| 7 | * |
| 8 | * @package FWP |
| 9 | * @category WordPress Library |
| 10 | * @version 1.0.0 |
| 11 | |
| 12 | * @link https://www.webfactoryltd.com/ |
| 13 | */ |
| 14 | class FWP_Widget_Output_1x0x0 extends WPRun_Base_1x0x0 |
| 15 | { |
| 16 | |
| 17 | const FILTER_NAME = 'widget_output'; |
| 18 | |
| 19 | /** |
| 20 | * Filter for "dynamic_sidebar_params" |
| 21 | * |
| 22 | * @global array $wp_registered_widgets |
| 23 | * @param array $sidebar_params |
| 24 | * @return array |
| 25 | */ |
| 26 | protected function filter_dynamic_sidebar_params( $sidebar_params ) |
| 27 | { |
| 28 | global $wp_registered_widgets; |
| 29 | |
| 30 | if ( is_admin() ) { |
| 31 | return $sidebar_params; |
| 32 | } |
| 33 | |
| 34 | $widget_id = $sidebar_params[ 0 ][ 'widget_id' ]; |
| 35 | |
| 36 | // prevent overwriting when already set by another version of the widget output class |
| 37 | if ( isset( $wp_registered_widgets[ $widget_id ][ '_wo_original_callback' ] ) ) { |
| 38 | return $sidebar_params; |
| 39 | } |
| 40 | |
| 41 | $wp_registered_widgets[ $widget_id ][ '_wo_original_callback' ] = $wp_registered_widgets[ $widget_id ][ 'callback' ]; |
| 42 | $wp_registered_widgets[ $widget_id ][ 'callback' ] = $this->get_callback( 'widget_callback' ); |
| 43 | |
| 44 | return $sidebar_params; |
| 45 | } |
| 46 | |
| 47 | /** |
| 48 | * Widget Callback |
| 49 | * @global array $wp_registered_widgets |
| 50 | * @return void |
| 51 | */ |
| 52 | protected function widget_callback() |
| 53 | { |
| 54 | global $wp_registered_widgets; |
| 55 | |
| 56 | $original_callback_params = func_get_args(); |
| 57 | $widget_id = $original_callback_params[ 0 ][ 'widget_id' ]; |
| 58 | |
| 59 | $original_callback = $wp_registered_widgets[ $widget_id ][ '_wo_original_callback' ]; |
| 60 | $wp_registered_widgets[ $widget_id ][ 'callback' ] = $original_callback; |
| 61 | |
| 62 | $widget_id_base = $wp_registered_widgets[ $widget_id ][ 'callback' ][ 0 ]->id_base; |
| 63 | |
| 64 | if ( ! is_callable( $original_callback ) ) { |
| 65 | return; |
| 66 | } |
| 67 | |
| 68 | ob_start(); |
| 69 | |
| 70 | call_user_func_array( $original_callback, $original_callback_params ); |
| 71 | $widget_output = ob_get_clean(); |
| 72 | |
| 73 | WPEL_Plugin::wp_kses_wf(apply_filters( self::FILTER_NAME, $widget_output, $widget_id_base, $widget_id )); |
| 74 | } |
| 75 | |
| 76 | } |
| 77 |