[wp-trac] [WordPress Trac] #38031: Allow modifying args for the_widget

WordPress Trac noreply at wordpress.org
Tue Sep 13 18:57:11 UTC 2016


#38031: Allow modifying args for the_widget
-------------------------+--------------------------------
 Reporter:  mnmlthms     |       Owner:
     Type:  enhancement  |      Status:  new
 Priority:  normal       |   Milestone:  Awaiting Review
Component:  Widgets      |     Version:  trunk
 Severity:  normal       |  Resolution:
 Keywords:               |     Focuses:  ui, accessibility
-------------------------+--------------------------------
Description changed by westonruter:

Old description:

> Some plugins used function the_widget outside of sidebar with default
> args, this enhancement should be added to the next version so theme
> developers can modify args
>
> Original code:
>
> {{{
> /**
>  * Output an arbitrary widget as a template tag.
>  *
>  * @since 2.8.0
>  *
>  * @global WP_Widget_Factory $wp_widget_factory
>  *
>  * @param string $widget   The widget's PHP class name (see class-wp-
> widget.php).
>  * @param array  $instance Optional. The widget's instance settings.
> Default empty array.
>  * @param array  $args {
>  *     Optional. Array of arguments to configure the display of the
> widget.
>  *
>  *     @type string $before_widget HTML content that will be prepended to
> the widget's HTML output.
>  *                                 Default `<div class="widget %s">`,
> where `%s` is the widget's class name.
>  *     @type string $after_widget  HTML content that will be appended to
> the widget's HTML output.
>  *                                 Default `</div>`.
>  *     @type string $before_title  HTML content that will be prepended to
> the widget's title when displayed.
>  *                                 Default `<h2 class="widgettitle">`.
>  *     @type string $after_title   HTML content that will be appended to
> the widget's title when displayed.
>  *                                 Default `</h2>`.
>  * }
>  */
> function the_widget( $widget, $instance = array(), $args = array() ) {
>         global $wp_widget_factory;
>
>         $widget_obj = $wp_widget_factory->widgets[$widget];
>         if ( ! ( $widget_obj instanceof WP_Widget ) ) {
>                 return;
>         }
>
>         $default_args = array(
>                 'before_widget' => '<div class="widget %s">',
>                 'after_widget'  => "</div>",
>                 'before_title'  => '<h2 class="widgettitle">',
>                 'after_title'   => '</h2>',
>         );
>         $args = wp_parse_args( $args, $default_args );
>         $args['before_widget'] = sprintf( $args['before_widget'],
> $widget_obj->widget_options['classname'] );
>
>         $instance = wp_parse_args($instance);
>
>         /**
>          * Fires before rendering the requested widget.
>          *
>          * @since 3.0.0
>          *
>          * @param string $widget   The widget's class name.
>          * @param array  $instance The current widget instance's
> settings.
>          * @param array  $args     An array of the widget's sidebar
> arguments.
>          */
>         do_action( 'the_widget', $widget, $instance, $args );
>
>         $widget_obj->_set(-1);
>         $widget_obj->widget($args, $instance);
> }
> }}}
>
> Enhanced
> {{{
> /**
>  * Output an arbitrary widget as a template tag.
>  *
>  * @since 2.8.0
>  *
>  * @global WP_Widget_Factory $wp_widget_factory
>  *
>  * @param string $widget   The widget's PHP class name (see class-wp-
> widget.php).
>  * @param array  $instance Optional. The widget's instance settings.
> Default empty array.
>  * @param array  $args {
>  *     Optional. Array of arguments to configure the display of the
> widget.
>  *
>  *     @type string $before_widget HTML content that will be prepended to
> the widget's HTML output.
>  *                                 Default `<div class="widget %s">`,
> where `%s` is the widget's class name.
>  *     @type string $after_widget  HTML content that will be appended to
> the widget's HTML output.
>  *                                 Default `</div>`.
>  *     @type string $before_title  HTML content that will be prepended to
> the widget's title when displayed.
>  *                                 Default `<h2 class="widgettitle">`.
>  *     @type string $after_title   HTML content that will be appended to
> the widget's title when displayed.
>  *                                 Default `</h2>`.
>  * }
>  */
> function the_widget( $widget, $instance = array(), $args = array() ) {
>         global $wp_widget_factory;
>
>         $widget_obj = $wp_widget_factory->widgets[$widget];
>         if ( ! ( $widget_obj instanceof WP_Widget ) ) {
>                 return;
>         }
>
>         $default_args = array(
>                 'before_widget' => '<div class="widget %s">',
>                 'after_widget'  => "</div>",
>                 'before_title'  => '<h2 class="widgettitle">',
>                 'after_title'   => '</h2>',
>         );
>         $args = wp_parse_args( $args, $default_args );
>
>         //Allow modifying widget args via filter hook
>         $args = apply_filters( 'the_widget_args', $args );
>         $args['before_widget'] = sprintf( $args['before_widget'],
> $widget_obj->widget_options['classname'] );
>
>         $instance = wp_parse_args($instance);
>
>         /**
>          * Fires before rendering the requested widget.
>          *
>          * @since 3.0.0
>          *
>          * @param string $widget   The widget's class name.
>          * @param array  $instance The current widget instance's
> settings.
>          * @param array  $args     An array of the widget's sidebar
> arguments.
>          */
>         do_action( 'the_widget', $widget, $instance, $args );
>
>         $widget_obj->_set(-1);
>         $widget_obj->widget($args, $instance);
> }
> }}}

New description:

 Some plugins used function the_widget outside of sidebar with default
 args, this enhancement should be added to the next version so theme
 developers can modify args

 Original code:

 {{{#!php
 <?php
 /**
  * Output an arbitrary widget as a template tag.
  *
  * @since 2.8.0
  *
  * @global WP_Widget_Factory $wp_widget_factory
  *
  * @param string $widget   The widget's PHP class name (see class-wp-
 widget.php).
  * @param array  $instance Optional. The widget's instance settings.
 Default empty array.
  * @param array  $args {
  *     Optional. Array of arguments to configure the display of the
 widget.
  *
  *     @type string $before_widget HTML content that will be prepended to
 the widget's HTML output.
  *                                 Default `<div class="widget %s">`,
 where `%s` is the widget's class name.
  *     @type string $after_widget  HTML content that will be appended to
 the widget's HTML output.
  *                                 Default `</div>`.
  *     @type string $before_title  HTML content that will be prepended to
 the widget's title when displayed.
  *                                 Default `<h2 class="widgettitle">`.
  *     @type string $after_title   HTML content that will be appended to
 the widget's title when displayed.
  *                                 Default `</h2>`.
  * }
  */
 function the_widget( $widget, $instance = array(), $args = array() ) {
         global $wp_widget_factory;

         $widget_obj = $wp_widget_factory->widgets[$widget];
         if ( ! ( $widget_obj instanceof WP_Widget ) ) {
                 return;
         }

         $default_args = array(
                 'before_widget' => '<div class="widget %s">',
                 'after_widget'  => "</div>",
                 'before_title'  => '<h2 class="widgettitle">',
                 'after_title'   => '</h2>',
         );
         $args = wp_parse_args( $args, $default_args );
         $args['before_widget'] = sprintf( $args['before_widget'],
 $widget_obj->widget_options['classname'] );

         $instance = wp_parse_args($instance);

         /**
          * Fires before rendering the requested widget.
          *
          * @since 3.0.0
          *
          * @param string $widget   The widget's class name.
          * @param array  $instance The current widget instance's settings.
          * @param array  $args     An array of the widget's sidebar
 arguments.
          */
         do_action( 'the_widget', $widget, $instance, $args );

         $widget_obj->_set(-1);
         $widget_obj->widget($args, $instance);
 }
 }}}

 Enhanced

 {{{#!php
 <?php
 /**
  * Output an arbitrary widget as a template tag.
  *
  * @since 2.8.0
  *
  * @global WP_Widget_Factory $wp_widget_factory
  *
  * @param string $widget   The widget's PHP class name (see class-wp-
 widget.php).
  * @param array  $instance Optional. The widget's instance settings.
 Default empty array.
  * @param array  $args {
  *     Optional. Array of arguments to configure the display of the
 widget.
  *
  *     @type string $before_widget HTML content that will be prepended to
 the widget's HTML output.
  *                                 Default `<div class="widget %s">`,
 where `%s` is the widget's class name.
  *     @type string $after_widget  HTML content that will be appended to
 the widget's HTML output.
  *                                 Default `</div>`.
  *     @type string $before_title  HTML content that will be prepended to
 the widget's title when displayed.
  *                                 Default `<h2 class="widgettitle">`.
  *     @type string $after_title   HTML content that will be appended to
 the widget's title when displayed.
  *                                 Default `</h2>`.
  * }
  */
 function the_widget( $widget, $instance = array(), $args = array() ) {
         global $wp_widget_factory;

         $widget_obj = $wp_widget_factory->widgets[$widget];
         if ( ! ( $widget_obj instanceof WP_Widget ) ) {
                 return;
         }

         $default_args = array(
                 'before_widget' => '<div class="widget %s">',
                 'after_widget'  => "</div>",
                 'before_title'  => '<h2 class="widgettitle">',
                 'after_title'   => '</h2>',
         );
         $args = wp_parse_args( $args, $default_args );

         //Allow modifying widget args via filter hook
         $args = apply_filters( 'the_widget_args', $args );
         $args['before_widget'] = sprintf( $args['before_widget'],
 $widget_obj->widget_options['classname'] );

         $instance = wp_parse_args($instance);

         /**
          * Fires before rendering the requested widget.
          *
          * @since 3.0.0
          *
          * @param string $widget   The widget's class name.
          * @param array  $instance The current widget instance's settings.
          * @param array  $args     An array of the widget's sidebar
 arguments.
          */
         do_action( 'the_widget', $widget, $instance, $args );

         $widget_obj->_set(-1);
         $widget_obj->widget($args, $instance);
 }
 }}}

--

--
Ticket URL: <https://core.trac.wordpress.org/ticket/38031#comment:1>
WordPress Trac <https://core.trac.wordpress.org/>
WordPress publishing platform


More information about the wp-trac mailing list