wp/wp-admin/includes/widgets.php
changeset 16 a86126ab1dd4
parent 9 177826044cd9
child 18 be944660c56a
equal deleted inserted replaced
15:3d4e9c994f10 16:a86126ab1dd4
    20 	$sort = $wp_registered_widgets;
    20 	$sort = $wp_registered_widgets;
    21 	usort( $sort, '_sort_name_callback' );
    21 	usort( $sort, '_sort_name_callback' );
    22 	$done = array();
    22 	$done = array();
    23 
    23 
    24 	foreach ( $sort as $widget ) {
    24 	foreach ( $sort as $widget ) {
    25 		if ( in_array( $widget['callback'], $done, true ) ) { // We already showed this multi-widget
    25 		if ( in_array( $widget['callback'], $done, true ) ) { // We already showed this multi-widget.
    26 			continue;
    26 			continue;
    27 		}
    27 		}
    28 
    28 
    29 		$sidebar = is_active_widget( $widget['callback'], $widget['id'], false, false );
    29 		$sidebar = is_active_widget( $widget['callback'], $widget['id'], false, false );
    30 		$done[]  = $widget['callback'];
    30 		$done[]  = $widget['callback'];
    49 			if ( $sidebar ) {
    49 			if ( $sidebar ) {
    50 				$args['_hide'] = '1';
    50 				$args['_hide'] = '1';
    51 			}
    51 			}
    52 		}
    52 		}
    53 
    53 
    54 		$args = wp_list_widget_controls_dynamic_sidebar(
    54 		$control_args = array(
    55 			array(
    55 			0 => $args,
    56 				0 => $args,
    56 			1 => $widget['params'][0],
    57 				1 => $widget['params'][0],
       
    58 			)
       
    59 		);
    57 		);
    60 		call_user_func_array( 'wp_widget_control', $args );
    58 		$sidebar_args = wp_list_widget_controls_dynamic_sidebar( $control_args );
       
    59 
       
    60 		wp_widget_control( ...$sidebar_args );
    61 	}
    61 	}
    62 }
    62 }
    63 
    63 
    64 /**
    64 /**
    65  * Callback to sort array by a 'name' key.
    65  * Callback to sort array by a 'name' key.
    89 
    89 
    90 	echo '<div id="' . esc_attr( $sidebar ) . '" class="widgets-sortables">';
    90 	echo '<div id="' . esc_attr( $sidebar ) . '" class="widgets-sortables">';
    91 
    91 
    92 	if ( $sidebar_name ) {
    92 	if ( $sidebar_name ) {
    93 		$add_to = sprintf(
    93 		$add_to = sprintf(
    94 			/* translators: %s: widgets sidebar name. */
    94 			/* translators: %s: Widgets sidebar name. */
    95 			__( 'Add to: %s' ),
    95 			__( 'Add to: %s' ),
    96 			$sidebar_name
    96 			$sidebar_name
    97 		);
    97 		);
    98 		?>
    98 		?>
    99 		<div class="sidebar-name" data-add-to="<?php echo esc_attr( $add_to ); ?>">
    99 		<div class="sidebar-name" data-add-to="<?php echo esc_attr( $add_to ); ?>">
   124  *
   124  *
   125  * @since 2.5.0
   125  * @since 2.5.0
   126  *
   126  *
   127  * @global array $wp_registered_widgets
   127  * @global array $wp_registered_widgets
   128  *
   128  *
   129  * @staticvar int $i
       
   130  *
       
   131  * @param array $params
   129  * @param array $params
   132  * @return array
   130  * @return array
   133  */
   131  */
   134 function wp_list_widget_controls_dynamic_sidebar( $params ) {
   132 function wp_list_widget_controls_dynamic_sidebar( $params ) {
   135 	global $wp_registered_widgets;
   133 	global $wp_registered_widgets;
   140 	$id        = isset( $params[0]['_temp_id'] ) ? $params[0]['_temp_id'] : $widget_id;
   138 	$id        = isset( $params[0]['_temp_id'] ) ? $params[0]['_temp_id'] : $widget_id;
   141 	$hidden    = isset( $params[0]['_hide'] ) ? ' style="display:none;"' : '';
   139 	$hidden    = isset( $params[0]['_hide'] ) ? ' style="display:none;"' : '';
   142 
   140 
   143 	$params[0]['before_widget'] = "<div id='widget-{$i}_{$id}' class='widget'$hidden>";
   141 	$params[0]['before_widget'] = "<div id='widget-{$i}_{$id}' class='widget'$hidden>";
   144 	$params[0]['after_widget']  = '</div>';
   142 	$params[0]['after_widget']  = '</div>';
   145 	$params[0]['before_title']  = '%BEG_OF_TITLE%'; // deprecated
   143 	$params[0]['before_title']  = '%BEG_OF_TITLE%'; // Deprecated.
   146 	$params[0]['after_title']   = '%END_OF_TITLE%'; // deprecated
   144 	$params[0]['after_title']   = '%END_OF_TITLE%'; // Deprecated.
       
   145 
   147 	if ( is_callable( $wp_registered_widgets[ $widget_id ]['callback'] ) ) {
   146 	if ( is_callable( $wp_registered_widgets[ $widget_id ]['callback'] ) ) {
   148 		$wp_registered_widgets[ $widget_id ]['_callback'] = $wp_registered_widgets[ $widget_id ]['callback'];
   147 		$wp_registered_widgets[ $widget_id ]['_callback'] = $wp_registered_widgets[ $widget_id ]['callback'];
   149 		$wp_registered_widgets[ $widget_id ]['callback']  = 'wp_widget_control';
   148 		$wp_registered_widgets[ $widget_id ]['callback']  = 'wp_widget_control';
   150 	}
   149 	}
   151 
   150 
   189 function wp_widget_control( $sidebar_args ) {
   188 function wp_widget_control( $sidebar_args ) {
   190 	global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets;
   189 	global $wp_registered_widgets, $wp_registered_widget_controls, $sidebars_widgets;
   191 
   190 
   192 	$widget_id  = $sidebar_args['widget_id'];
   191 	$widget_id  = $sidebar_args['widget_id'];
   193 	$sidebar_id = isset( $sidebar_args['id'] ) ? $sidebar_args['id'] : false;
   192 	$sidebar_id = isset( $sidebar_args['id'] ) ? $sidebar_args['id'] : false;
   194 	$key        = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[ $sidebar_id ] ) : '-1'; // position of widget in sidebar
   193 	$key        = $sidebar_id ? array_search( $widget_id, $sidebars_widgets[ $sidebar_id ], true ) : '-1'; // Position of widget in sidebar.
   195 	$control    = isset( $wp_registered_widget_controls[ $widget_id ] ) ? $wp_registered_widget_controls[ $widget_id ] : array();
   194 	$control    = isset( $wp_registered_widget_controls[ $widget_id ] ) ? $wp_registered_widget_controls[ $widget_id ] : array();
   196 	$widget     = $wp_registered_widgets[ $widget_id ];
   195 	$widget     = $wp_registered_widgets[ $widget_id ];
   197 
   196 
   198 	$id_format     = $widget['id'];
   197 	$id_format     = $widget['id'];
   199 	$widget_number = isset( $control['params'][0]['number'] ) ? $control['params'][0]['number'] : '';
   198 	$widget_number = isset( $control['params'][0]['number'] ) ? $control['params'][0]['number'] : '';
   222 
   221 
   223 	/*
   222 	/*
   224 	 * We aren't showing a widget control, we're outputting a template
   223 	 * We aren't showing a widget control, we're outputting a template
   225 	 * for a multi-widget control.
   224 	 * for a multi-widget control.
   226 	 */
   225 	 */
   227 	if ( isset( $sidebar_args['_display'] ) && 'template' == $sidebar_args['_display'] && $widget_number ) {
   226 	if ( isset( $sidebar_args['_display'] ) && 'template' === $sidebar_args['_display'] && $widget_number ) {
   228 		// number == -1 implies a template where id numbers are replaced by a generic '__i__'
   227 		// number == -1 implies a template where id numbers are replaced by a generic '__i__'.
   229 		$control['params'][0]['number'] = -1;
   228 		$control['params'][0]['number'] = -1;
   230 		// With id_base widget id's are constructed like {$id_base}-{$id_number}.
   229 		// With id_base widget id's are constructed like {$id_base}-{$id_number}.
   231 		if ( isset( $control['id_base'] ) ) {
   230 		if ( isset( $control['id_base'] ) ) {
   232 			$id_format = $control['id_base'] . '-__i__';
   231 			$id_format = $control['id_base'] . '-__i__';
   233 		}
   232 		}
   242 	echo $sidebar_args['before_widget'];
   241 	echo $sidebar_args['before_widget'];
   243 	?>
   242 	?>
   244 	<div class="widget-top">
   243 	<div class="widget-top">
   245 	<div class="widget-title-action">
   244 	<div class="widget-title-action">
   246 		<button type="button" class="widget-action hide-if-no-js" aria-expanded="false">
   245 		<button type="button" class="widget-action hide-if-no-js" aria-expanded="false">
   247 			<span class="screen-reader-text edit"><?php printf( __( 'Edit widget: %s' ), $widget_title ); ?></span>
   246 			<span class="screen-reader-text edit">
   248 			<span class="screen-reader-text add"><?php printf( __( 'Add widget: %s' ), $widget_title ); ?></span>
   247 				<?php
       
   248 				/* translators: %s: Widget title. */
       
   249 				printf( __( 'Edit widget: %s' ), $widget_title );
       
   250 				?>
       
   251 			</span>
       
   252 			<span class="screen-reader-text add">
       
   253 				<?php
       
   254 				/* translators: %s: Widget title. */
       
   255 				printf( __( 'Add widget: %s' ), $widget_title );
       
   256 				?>
       
   257 			</span>
   249 			<span class="toggle-indicator" aria-hidden="true"></span>
   258 			<span class="toggle-indicator" aria-hidden="true"></span>
   250 		</button>
   259 		</button>
   251 		<a class="widget-control-edit hide-if-js" href="<?php echo esc_url( add_query_arg( $query_arg ) ); ?>">
   260 		<a class="widget-control-edit hide-if-js" href="<?php echo esc_url( add_query_arg( $query_arg ) ); ?>">
   252 			<span class="edit"><?php _ex( 'Edit', 'widget' ); ?></span>
   261 			<span class="edit"><?php _ex( 'Edit', 'widget' ); ?></span>
   253 			<span class="add"><?php _ex( 'Add', 'widget' ); ?></span>
   262 			<span class="add"><?php _ex( 'Add', 'widget' ); ?></span>
   297 	</div>
   306 	</div>
   298 	<?php echo $after_form; ?>
   307 	<?php echo $after_form; ?>
   299 	</div>
   308 	</div>
   300 
   309 
   301 	<div class="widget-description">
   310 	<div class="widget-description">
   302 	<?php echo ( $widget_description = wp_widget_description( $widget_id ) ) ? "$widget_description\n" : "$widget_title\n"; ?>
   311 	<?php
       
   312 	$widget_description = wp_widget_description( $widget_id );
       
   313 	echo ( $widget_description ) ? "$widget_description\n" : "$widget_title\n";
       
   314 	?>
   303 	</div>
   315 	</div>
   304 	<?php
   316 	<?php
   305 	echo $sidebar_args['after_widget'];
   317 	echo $sidebar_args['after_widget'];
   306 
   318 
   307 	return $sidebar_args;
   319 	return $sidebar_args;