wp/wp-admin/includes/widgets.php
changeset 7 cf61fcea0001
parent 5 5e2f62d02dcd
child 9 177826044cd9
equal deleted inserted replaced
6:490d5cc509ed 7:cf61fcea0001
     8 
     8 
     9 /**
     9 /**
    10  * Display list of the available widgets.
    10  * Display list of the available widgets.
    11  *
    11  *
    12  * @since 2.5.0
    12  * @since 2.5.0
       
    13  *
       
    14  * @global array $wp_registered_widgets
       
    15  * @global array $wp_registered_widget_controls
    13  */
    16  */
    14 function wp_list_widgets() {
    17 function wp_list_widgets() {
    15 	global $wp_registered_widgets, $wp_registered_widget_controls;
    18 	global $wp_registered_widgets, $wp_registered_widget_controls;
    16 
    19 
    17 	$sort = $wp_registered_widgets;
    20 	$sort = $wp_registered_widgets;
    49 /**
    52 /**
    50  * Callback to sort array by a 'name' key.
    53  * Callback to sort array by a 'name' key.
    51  *
    54  *
    52  * @since 3.1.0
    55  * @since 3.1.0
    53  * @access private
    56  * @access private
       
    57  *
       
    58  * @return int
    54  */
    59  */
    55 function _sort_name_callback( $a, $b ) {
    60 function _sort_name_callback( $a, $b ) {
    56 	return strnatcasecmp( $a['name'], $b['name'] );
    61 	return strnatcasecmp( $a['name'], $b['name'] );
    57 }
    62 }
    58 
    63 
    60  * Show the widgets and their settings for a sidebar.
    65  * Show the widgets and their settings for a sidebar.
    61  * Used in the admin widget config screen.
    66  * Used in the admin widget config screen.
    62  *
    67  *
    63  * @since 2.5.0
    68  * @since 2.5.0
    64  *
    69  *
    65  * @param string $sidebar id slug of the sidebar
    70  * @param string $sidebar      Sidebar ID.
    66  * @param string optional $sidebar_name Include the HTML for the sidebar name
    71  * @param string $sidebar_name Optional. Sidebar name. Default empty.
    67  */
    72  */
    68 function wp_list_widget_controls( $sidebar, $sidebar_name = '' ) {
    73 function wp_list_widget_controls( $sidebar, $sidebar_name = '' ) {
    69 	add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' );
    74 	add_filter( 'dynamic_sidebar_params', 'wp_list_widget_controls_dynamic_sidebar' );
    70 
    75 
    71 	$description = wp_sidebar_description( $sidebar );
    76 	$description = wp_sidebar_description( $sidebar );
    73 	echo '<div id="' . esc_attr( $sidebar ) . '" class="widgets-sortables">';
    78 	echo '<div id="' . esc_attr( $sidebar ) . '" class="widgets-sortables">';
    74 
    79 
    75 	if ( $sidebar_name ) {
    80 	if ( $sidebar_name ) {
    76 		?>
    81 		?>
    77 		<div class="sidebar-name">
    82 		<div class="sidebar-name">
    78 			<div class="sidebar-name-arrow"><br /></div>
    83 			<button type="button" class="handlediv hide-if-no-js" aria-expanded="true">
    79 			<h3><?php echo esc_html( $sidebar_name ); ?> <span class="spinner"></span></h3>
    84 				<span class="screen-reader-text"><?php echo esc_html( $sidebar_name ); ?></span>
       
    85 				<span class="toggle-indicator" aria-hidden="true"></span>
       
    86 			</button>
       
    87 			<h2><?php echo esc_html( $sidebar_name ); ?> <span class="spinner"></span></h2>
    80 		</div>
    88 		</div>
    81 		<?php
    89 		<?php
    82 	}
    90 	}
    83 
    91 
    84 	echo '<div class="sidebar-description">';
       
    85 
       
    86 	if ( ! empty( $description ) ) {
    92 	if ( ! empty( $description ) ) {
    87 		echo '<p class="description">' . $description . '</p>';
    93 		?>
    88 	}
    94 		<div class="sidebar-description">
       
    95 			<p class="description"><?php echo $description; ?></p>
       
    96 		</div>
       
    97 		<?php
       
    98 	}
       
    99 
       
   100 	dynamic_sidebar( $sidebar );
    89 
   101 
    90 	echo '</div>';
   102 	echo '</div>';
    91 
   103 }
    92 	dynamic_sidebar( $sidebar );
   104 
    93 
   105 /**
    94 	echo '</div>';
   106  * Retrieves the widget control arguments.
    95 }
   107  *
    96 
   108  * @since 2.5.0
    97 /**
   109  *
    98  * {@internal Missing Short Description}}
   110  * @global array $wp_registered_widgets
    99  *
   111  *
   100  * @since 2.5.0
   112  * @staticvar int $i
   101  *
   113  *
   102  * @param array $params
   114  * @param array $params
   103  * @return array
   115  * @return array
   104  */
   116  */
   105 function wp_list_widget_controls_dynamic_sidebar( $params ) {
   117 function wp_list_widget_controls_dynamic_sidebar( $params ) {
   121 	}
   133 	}
   122 
   134 
   123 	return $params;
   135 	return $params;
   124 }
   136 }
   125 
   137 
   126 function next_widget_id_number($id_base) {
   138 /**
       
   139  *
       
   140  * @global array $wp_registered_widgets
       
   141  *
       
   142  * @param string $id_base
       
   143  * @return int
       
   144  */
       
   145 function next_widget_id_number( $id_base ) {
   127 	global $wp_registered_widgets;
   146 	global $wp_registered_widgets;
   128 	$number = 1;
   147 	$number = 1;
   129 
   148 
   130 	foreach ( $wp_registered_widgets as $widget_id => $widget ) {
   149 	foreach ( $wp_registered_widgets as $widget_id => $widget ) {
   131 		if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) )
   150 		if ( preg_match( '/' . $id_base . '-([0-9]+)$/', $widget_id, $matches ) )
   140  * Meta widget used to display the control form for a widget.
   159  * Meta widget used to display the control form for a widget.
   141  *
   160  *
   142  * Called from dynamic_sidebar().
   161  * Called from dynamic_sidebar().
   143  *
   162  *
   144  * @since 2.5.0
   163  * @since 2.5.0
       
   164  *
       
   165  * @global array $wp_registered_widgets
       
   166  * @global array $wp_registered_widget_controls
       
   167  * @global array $sidebars_widgets
   145  *
   168  *
   146  * @param array $sidebar_args
   169  * @param array $sidebar_args
   147  * @return array
   170  * @return array
   148  */
   171  */
   149 function wp_widget_control( $sidebar_args ) {
   172 function wp_widget_control( $sidebar_args ) {
   158 	$id_format = $widget['id'];
   181 	$id_format = $widget['id'];
   159 	$widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : '';
   182 	$widget_number = isset($control['params'][0]['number']) ? $control['params'][0]['number'] : '';
   160 	$id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id;
   183 	$id_base = isset($control['id_base']) ? $control['id_base'] : $widget_id;
   161 	$multi_number = isset($sidebar_args['_multi_num']) ? $sidebar_args['_multi_num'] : '';
   184 	$multi_number = isset($sidebar_args['_multi_num']) ? $sidebar_args['_multi_num'] : '';
   162 	$add_new = isset($sidebar_args['_add']) ? $sidebar_args['_add'] : '';
   185 	$add_new = isset($sidebar_args['_add']) ? $sidebar_args['_add'] : '';
       
   186 
       
   187 	$before_form = isset( $sidebar_args['before_form'] ) ? $sidebar_args['before_form'] : '<form method="post">';
       
   188 	$after_form = isset( $sidebar_args['after_form'] ) ? $sidebar_args['after_form'] : '</form>';
       
   189 	$before_widget_content = isset( $sidebar_args['before_widget_content'] ) ? $sidebar_args['before_widget_content'] : '<div class="widget-content">';
       
   190 	$after_widget_content = isset( $sidebar_args['after_widget_content'] ) ? $sidebar_args['after_widget_content'] : '</div>';
   163 
   191 
   164 	$query_arg = array( 'editwidget' => $widget['id'] );
   192 	$query_arg = array( 'editwidget' => $widget['id'] );
   165 	if ( $add_new ) {
   193 	if ( $add_new ) {
   166 		$query_arg['addnew'] = 1;
   194 		$query_arg['addnew'] = 1;
   167 		if ( $multi_number ) {
   195 		if ( $multi_number ) {
   192 	$has_form = 'noform';
   220 	$has_form = 'noform';
   193 
   221 
   194 	echo $sidebar_args['before_widget']; ?>
   222 	echo $sidebar_args['before_widget']; ?>
   195 	<div class="widget-top">
   223 	<div class="widget-top">
   196 	<div class="widget-title-action">
   224 	<div class="widget-title-action">
   197 		<a class="widget-action hide-if-no-js" href="#available-widgets"></a>
   225 		<button type="button" class="widget-action hide-if-no-js" aria-expanded="false">
       
   226 			<span class="screen-reader-text"><?php printf( __( 'Edit widget: %s' ), $widget_title ); ?></span>
       
   227 			<span class="toggle-indicator" aria-hidden="true"></span>
       
   228 		</button>
   198 		<a class="widget-control-edit hide-if-js" href="<?php echo esc_url( add_query_arg( $query_arg ) ); ?>">
   229 		<a class="widget-control-edit hide-if-js" href="<?php echo esc_url( add_query_arg( $query_arg ) ); ?>">
   199 			<span class="edit"><?php _ex( 'Edit', 'widget' ); ?></span>
   230 			<span class="edit"><?php _ex( 'Edit', 'widget' ); ?></span>
   200 			<span class="add"><?php _ex( 'Add', 'widget' ); ?></span>
   231 			<span class="add"><?php _ex( 'Add', 'widget' ); ?></span>
   201 			<span class="screen-reader-text"><?php echo $widget_title; ?></span>
   232 			<span class="screen-reader-text"><?php echo $widget_title; ?></span>
   202 		</a>
   233 		</a>
   203 	</div>
   234 	</div>
   204 	<div class="widget-title"><h4><?php echo $widget_title ?><span class="in-widget-title"></span></h4></div>
   235 	<div class="widget-title"><h3><?php echo $widget_title; ?><span class="in-widget-title"></span></h3></div>
   205 	</div>
   236 	</div>
   206 
   237 
   207 	<div class="widget-inside">
   238 	<div class="widget-inside">
   208 	<form method="post">
   239 	<?php echo $before_form; ?>
   209 	<div class="widget-content">
   240 	<?php echo $before_widget_content; ?>
   210 <?php
   241 	<?php
   211 	if ( isset($control['callback']) )
   242 	if ( isset( $control['callback'] ) ) {
   212 		$has_form = call_user_func_array( $control['callback'], $control['params'] );
   243 		$has_form = call_user_func_array( $control['callback'], $control['params'] );
   213 	else
   244 	} else {
   214 		echo "\t\t<p>" . __('There are no options for this widget.') . "</p>\n"; ?>
   245 		echo "\t\t<p>" . __('There are no options for this widget.') . "</p>\n";
   215 	</div>
   246 	}
       
   247 	?>
       
   248 	<?php echo $after_widget_content; ?>
   216 	<input type="hidden" name="widget-id" class="widget-id" value="<?php echo esc_attr($id_format); ?>" />
   249 	<input type="hidden" name="widget-id" class="widget-id" value="<?php echo esc_attr($id_format); ?>" />
   217 	<input type="hidden" name="id_base" class="id_base" value="<?php echo esc_attr($id_base); ?>" />
   250 	<input type="hidden" name="id_base" class="id_base" value="<?php echo esc_attr($id_base); ?>" />
   218 	<input type="hidden" name="widget-width" class="widget-width" value="<?php if (isset( $control['width'] )) echo esc_attr($control['width']); ?>" />
   251 	<input type="hidden" name="widget-width" class="widget-width" value="<?php if (isset( $control['width'] )) echo esc_attr($control['width']); ?>" />
   219 	<input type="hidden" name="widget-height" class="widget-height" value="<?php if (isset( $control['height'] )) echo esc_attr($control['height']); ?>" />
   252 	<input type="hidden" name="widget-height" class="widget-height" value="<?php if (isset( $control['height'] )) echo esc_attr($control['height']); ?>" />
   220 	<input type="hidden" name="widget_number" class="widget_number" value="<?php echo esc_attr($widget_number); ?>" />
   253 	<input type="hidden" name="widget_number" class="widget_number" value="<?php echo esc_attr($widget_number); ?>" />
   221 	<input type="hidden" name="multi_number" class="multi_number" value="<?php echo esc_attr($multi_number); ?>" />
   254 	<input type="hidden" name="multi_number" class="multi_number" value="<?php echo esc_attr($multi_number); ?>" />
   222 	<input type="hidden" name="add_new" class="add_new" value="<?php echo esc_attr($add_new); ?>" />
   255 	<input type="hidden" name="add_new" class="add_new" value="<?php echo esc_attr($add_new); ?>" />
   223 
   256 
   224 	<div class="widget-control-actions">
   257 	<div class="widget-control-actions">
   225 		<div class="alignleft">
   258 		<div class="alignleft">
   226 		<a class="widget-control-remove" href="#remove"><?php _e('Delete'); ?></a> |
   259 			<button type="button" class="button-link button-link-delete widget-control-remove"><?php _e( 'Delete' ); ?></button>
   227 		<a class="widget-control-close" href="#close"><?php _e('Close'); ?></a>
   260 			<span class="widget-control-close-wrapper">
       
   261 				|
       
   262 				<button type="button" class="button-link widget-control-close"><?php _e( 'Done' ); ?></button>
       
   263 			</span>
   228 		</div>
   264 		</div>
   229 		<div class="alignright<?php if ( 'noform' === $has_form ) echo ' widget-control-noform'; ?>">
   265 		<div class="alignright<?php if ( 'noform' === $has_form ) echo ' widget-control-noform'; ?>">
   230 			<?php submit_button( __( 'Save' ), 'button-primary widget-control-save right', 'savewidget', false, array( 'id' => 'widget-' . esc_attr( $id_format ) . '-savewidget' ) ); ?>
   266 			<?php submit_button( __( 'Save' ), 'primary widget-control-save right', 'savewidget', false, array( 'id' => 'widget-' . esc_attr( $id_format ) . '-savewidget' ) ); ?>
   231 			<span class="spinner"></span>
   267 			<span class="spinner"></span>
   232 		</div>
   268 		</div>
   233 		<br class="clear" />
   269 		<br class="clear" />
   234 	</div>
   270 	</div>
   235 	</form>
   271 	<?php echo $after_form; ?>
   236 	</div>
   272 	</div>
   237 
   273 
   238 	<div class="widget-description">
   274 	<div class="widget-description">
   239 <?php echo ( $widget_description = wp_widget_description($widget_id) ) ? "$widget_description\n" : "$widget_title\n"; ?>
   275 <?php echo ( $widget_description = wp_widget_description($widget_id) ) ? "$widget_description\n" : "$widget_title\n"; ?>
   240 	</div>
   276 	</div>
   241 <?php
   277 <?php
   242 	echo $sidebar_args['after_widget'];
   278 	echo $sidebar_args['after_widget'];
   243 
   279 
   244 	return $sidebar_args;
   280 	return $sidebar_args;
   245 }
   281 }
       
   282 
       
   283 /**
       
   284  *
       
   285  * @param string $classes
       
   286  * @return string
       
   287  */
       
   288 function wp_widgets_access_body_class($classes) {
       
   289 	return "$classes widgets_access ";
       
   290 }