', htmlspecialchars($context));
@@ -945,7 +902,7 @@ function do_meta_boxes($page, $context, $object) {
foreach ( $sorted as $box_context => $ids ) {
foreach ( explode(',', $ids ) as $id ) {
if ( $id && 'dashboard_browser_nag' !== $id )
- add_meta_box( $id, null, null, $page, $box_context, 'sorted' );
+ add_meta_box( $id, null, null, $screen, $box_context, 'sorted' );
}
}
}
@@ -987,12 +944,19 @@ function do_meta_boxes($page, $context, $object) {
* @since 2.6.0
*
* @param string $id String for use in the 'id' attribute of tags.
- * @param string $page The type of edit page on which to show the box (post, page, link).
+ * @param string|object $screen The screen on which to show the box (post, page, link).
* @param string $context The context within the page where the boxes should show ('normal', 'advanced').
*/
-function remove_meta_box($id, $page, $context) {
+function remove_meta_box($id, $screen, $context) {
global $wp_meta_boxes;
+ if ( empty( $screen ) )
+ $screen = get_current_screen();
+ elseif ( is_string( $screen ) )
+ $screen = convert_to_screen( $screen );
+
+ $page = $screen->id;
+
if ( !isset($wp_meta_boxes) )
$wp_meta_boxes = array();
if ( !isset($wp_meta_boxes[$page]) )
@@ -1004,67 +968,6 @@ function remove_meta_box($id, $page, $context) {
$wp_meta_boxes[$page][$context][$priority][$id] = false;
}
-/**
- * {@internal Missing Short Description}}
- *
- * @since 2.7.0
- *
- * @param unknown_type $screen
- */
-function meta_box_prefs($screen) {
- global $wp_meta_boxes;
-
- if ( is_string($screen) )
- $screen = convert_to_screen($screen);
-
- if ( empty($wp_meta_boxes[$screen->id]) )
- return;
-
- $hidden = get_hidden_meta_boxes($screen);
-
- foreach ( array_keys($wp_meta_boxes[$screen->id]) as $context ) {
- foreach ( array_keys($wp_meta_boxes[$screen->id][$context]) as $priority ) {
- foreach ( $wp_meta_boxes[$screen->id][$context][$priority] as $box ) {
- if ( false == $box || ! $box['title'] )
- continue;
- // Submit box cannot be hidden
- if ( 'submitdiv' == $box['id'] || 'linksubmitdiv' == $box['id'] )
- continue;
- $box_id = $box['id'];
- echo '
';
- echo ' ';
- echo "{$box['title']} \n";
- }
- }
- }
-}
-
-/**
- * Get Hidden Meta Boxes
- *
- * @since 2.7.0
- *
- * @param string|object $screen Screen identifier
- * @return array Hidden Meta Boxes
- */
-function get_hidden_meta_boxes( $screen ) {
- if ( is_string( $screen ) )
- $screen = convert_to_screen( $screen );
-
- $hidden = get_user_option( "metaboxhidden_{$screen->id}" );
-
- // Hide slug boxes by default
- if ( !is_array( $hidden ) ) {
- if ( 'post' == $screen->base || 'page' == $screen->base )
- $hidden = array('slugdiv', 'trackbacksdiv', 'postcustom', 'postexcerpt', 'commentstatusdiv', 'commentsdiv', 'authordiv', 'revisionsdiv');
- else
- $hidden = array( 'slugdiv' );
- $hidden = apply_filters('default_hidden_meta_boxes', $hidden, $screen);
- }
-
- return $hidden;
-}
-
/**
* Add a new section to a settings page.
*
@@ -1089,10 +992,15 @@ function add_settings_section($id, $title, $callback, $page) {
global $wp_settings_sections;
if ( 'misc' == $page ) {
- _deprecated_argument( __FUNCTION__, '3.0', __( 'The miscellaneous options group has been removed. Use another settings group.' ) );
+ _deprecated_argument( __FUNCTION__, '3.0', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'misc' ) );
$page = 'general';
}
+ if ( 'privacy' == $page ) {
+ _deprecated_argument( __FUNCTION__, '3.5', sprintf( __( 'The "%s" options group has been removed. Use another settings group.' ), 'privacy' ) );
+ $page = 'reading';
+ }
+
if ( !isset($wp_settings_sections) )
$wp_settings_sections = array();
if ( !isset($wp_settings_sections[$page]) )
@@ -1111,7 +1019,7 @@ function add_settings_section($id, $title, $callback, $page) {
* do_settings_fields() in do_settings-sections()
*
* The $callback argument should be the name of a function that echoes out the
- * html input tags for this setting field. Use get_option() to retrive existing
+ * html input tags for this setting field. Use get_option() to retrieve existing
* values to show.
*
* @since 2.7.0
@@ -1122,7 +1030,7 @@ function add_settings_section($id, $title, $callback, $page) {
* @param string $title Formatted title of the field. Shown as the label for the field during output.
* @param string $callback Function that fills the field with the desired form inputs. The function should echo its output.
* @param string $page The slug-name of the settings page on which to show the section (general, reading, writing, ...).
- * @param string $section The slug-name of the section of the settingss page in which to show the box (default, ...).
+ * @param string $section The slug-name of the section of the settings page in which to show the box (default, ...).
* @param array $args Additional arguments
*/
function add_settings_field($id, $title, $callback, $page, $section = 'default', $args = array()) {
@@ -1133,6 +1041,11 @@ function add_settings_field($id, $title, $callback, $page, $section = 'default',
$page = 'general';
}
+ if ( 'privacy' == $page ) {
+ _deprecated_argument( __FUNCTION__, '3.5', __( 'The privacy options group has been removed. Use another settings group.' ) );
+ $page = 'reading';
+ }
+
if ( !isset($wp_settings_fields) )
$wp_settings_fields = array();
if ( !isset($wp_settings_fields[$page]) )
@@ -1156,19 +1069,23 @@ function add_settings_field($id, $title, $callback, $page, $section = 'default',
*
* @param string $page The slug name of the page whos settings sections you want to output
*/
-function do_settings_sections($page) {
+function do_settings_sections( $page ) {
global $wp_settings_sections, $wp_settings_fields;
- if ( !isset($wp_settings_sections) || !isset($wp_settings_sections[$page]) )
+ if ( ! isset( $wp_settings_sections ) || !isset( $wp_settings_sections[$page] ) )
return;
foreach ( (array) $wp_settings_sections[$page] as $section ) {
- echo "
{$section['title']} \n";
- call_user_func($section['callback'], $section);
- if ( !isset($wp_settings_fields) || !isset($wp_settings_fields[$page]) || !isset($wp_settings_fields[$page][$section['id']]) )
+ if ( $section['title'] )
+ echo "
{$section['title']} \n";
+
+ if ( $section['callback'] )
+ call_user_func( $section['callback'], $section );
+
+ if ( ! isset( $wp_settings_fields ) || !isset( $wp_settings_fields[$page] ) || !isset( $wp_settings_fields[$page][$section['id']] ) )
continue;
echo '
';
}
}
@@ -1196,7 +1113,7 @@ function do_settings_fields($page, $section) {
foreach ( (array) $wp_settings_fields[$page][$section] as $field ) {
echo '
';
if ( !empty($field['args']['label_for']) )
- echo '' . $field['title'] . ' ';
+ echo '' . $field['title'] . ' ';
else
echo '' . $field['title'] . ' ';
echo '';
@@ -1265,34 +1182,36 @@ function add_settings_error( $setting, $code, $message, $type = 'error' ) {
* @param boolean $sanitize Whether to re-sanitize the setting value before returning errors.
* @return array Array of settings errors
*/
-function get_settings_errors( $setting = '', $sanitize = FALSE ) {
+function get_settings_errors( $setting = '', $sanitize = false ) {
global $wp_settings_errors;
// If $sanitize is true, manually re-run the sanitizisation for this option
// This allows the $sanitize_callback from register_setting() to run, adding
// any settings errors you want to show by default.
if ( $sanitize )
- sanitize_option( $setting, get_option($setting));
+ sanitize_option( $setting, get_option( $setting ) );
// If settings were passed back from options.php then use them
- // Ignore transients if $sanitize is true, we dont' want the old values anyway
- if ( isset($_GET['settings-updated']) && $_GET['settings-updated'] && get_transient('settings_errors') ) {
- $settings_errors = get_transient('settings_errors');
- delete_transient('settings_errors');
- // Otherwise check global in case validation has been run on this pageload
- } elseif ( count( $wp_settings_errors ) ) {
- $settings_errors = $wp_settings_errors;
- } else {
- return;
+ if ( isset( $_GET['settings-updated'] ) && $_GET['settings-updated'] && get_transient( 'settings_errors' ) ) {
+ $wp_settings_errors = array_merge( (array) $wp_settings_errors, get_transient( 'settings_errors' ) );
+ delete_transient( 'settings_errors' );
}
+ // Check global in case errors have been added on this pageload
+ if ( ! count( $wp_settings_errors ) )
+ return array();
+
// Filter the results to those of a specific setting if one was set
if ( $setting ) {
- foreach ( (array) $settings_errors as $key => $details )
- if ( $setting != $details['setting'] )
- unset( $settings_errors[$key] );
+ $setting_errors = array();
+ foreach ( (array) $wp_settings_errors as $key => $details ) {
+ if ( $setting == $details['setting'] )
+ $setting_errors[] = $wp_settings_errors[$key];
+ }
+ return $setting_errors;
}
- return $settings_errors;
+
+ return $wp_settings_errors;
}
/**
@@ -1317,13 +1236,15 @@ function get_settings_errors( $setting = '', $sanitize = FALSE ) {
* @param boolean $sanitize Whether to re-sanitize the setting value before returning errors.
* @param boolean $hide_on_update If set to true errors will not be shown if the settings page has already been submitted.
*/
-function settings_errors( $setting = '', $sanitize = FALSE, $hide_on_update = FALSE ) {
+function settings_errors( $setting = '', $sanitize = false, $hide_on_update = false ) {
- if ($hide_on_update AND $_GET['settings-updated']) return;
+ if ( $hide_on_update && ! empty( $_GET['settings-updated'] ) )
+ return;
$settings_errors = get_settings_errors( $setting, $sanitize );
- if ( !is_array($settings_errors) ) return;
+ if ( empty( $settings_errors ) )
+ return;
$output = '';
foreach ( $settings_errors as $key => $details ) {
@@ -1357,18 +1278,8 @@ function find_posts_div($found_action = '') {
-
-
- true), 'objects' );
- foreach ( $post_types as $post ) {
- if ( 'attachment' == $post->name )
- continue;
- ?>
- name, 'post'); ?> />
- label; ?>
-
+
+
@@ -1390,120 +1301,9 @@ function find_posts_div($found_action = '') {
* @since 2.7.0
*/
function the_post_password() {
- global $post;
- if ( isset( $post->post_password ) ) echo esc_attr( $post->post_password );
-}
-
-/**
- * {@internal Missing Short Description}}
- *
- * @since 2.7.0
- */
-function favorite_actions( $screen = null ) {
- $default_action = false;
-
- if ( is_string($screen) )
- $screen = convert_to_screen($screen);
-
- if ( $screen->is_user )
- return;
-
- if ( isset($screen->post_type) ) {
- $post_type_object = get_post_type_object($screen->post_type);
- if ( 'add' != $screen->action )
- $default_action = array('post-new.php?post_type=' . $post_type_object->name => array($post_type_object->labels->new_item, $post_type_object->cap->edit_posts));
- else
- $default_action = array('edit.php?post_type=' . $post_type_object->name => array($post_type_object->labels->name, $post_type_object->cap->edit_posts));
- }
-
- if ( !$default_action ) {
- if ( $screen->is_network ) {
- $default_action = array('sites.php' => array( __('Sites'), 'manage_sites'));
- } else {
- switch ( $screen->id ) {
- case 'upload':
- $default_action = array('media-new.php' => array(__('New Media'), 'upload_files'));
- break;
- case 'media':
- $default_action = array('upload.php' => array(__('Edit Media'), 'upload_files'));
- break;
- case 'link-manager':
- case 'link':
- if ( 'add' != $screen->action )
- $default_action = array('link-add.php' => array(__('New Link'), 'manage_links'));
- else
- $default_action = array('link-manager.php' => array(__('Edit Links'), 'manage_links'));
- break;
- case 'users':
- $default_action = array('user-new.php' => array(__('New User'), 'create_users'));
- break;
- case 'user':
- $default_action = array('users.php' => array(__('Edit Users'), 'edit_users'));
- break;
- case 'plugins':
- $default_action = array('plugin-install.php' => array(__('Install Plugins'), 'install_plugins'));
- break;
- case 'plugin-install':
- $default_action = array('plugins.php' => array(__('Manage Plugins'), 'activate_plugins'));
- break;
- case 'themes':
- $default_action = array('theme-install.php' => array(__('Install Themes'), 'install_themes'));
- break;
- case 'theme-install':
- $default_action = array('themes.php' => array(__('Manage Themes'), 'switch_themes'));
- break;
- default:
- $default_action = array('post-new.php' => array(__('New Post'), 'edit_posts'));
- break;
- }
- }
- }
-
- if ( !$screen->is_network ) {
- $actions = array(
- 'post-new.php' => array(__('New Post'), 'edit_posts'),
- 'edit.php?post_status=draft' => array(__('Drafts'), 'edit_posts'),
- 'post-new.php?post_type=page' => array(__('New Page'), 'edit_pages'),
- 'media-new.php' => array(__('Upload'), 'upload_files'),
- 'edit-comments.php' => array(__('Comments'), 'moderate_comments')
- );
- } else {
- $actions = array(
- 'sites.php' => array( __('Sites'), 'manage_sites'),
- 'users.php' => array( __('Users'), 'manage_network_users')
- );
- }
-
- $default_key = array_keys($default_action);
- $default_key = $default_key[0];
- if ( isset($actions[$default_key]) )
- unset($actions[$default_key]);
- $actions = array_merge($default_action, $actions);
- $actions = apply_filters( 'favorite_actions', $actions, $screen );
-
- $allowed_actions = array();
- foreach ( $actions as $action => $data ) {
- if ( current_user_can($data[1]) )
- $allowed_actions[$action] = $data[0];
- }
-
- if ( empty($allowed_actions) )
- return;
-
- $first = array_keys($allowed_actions);
- $first = $first[0];
- echo '';
- echo '
';
- echo '
';
-
- array_shift($allowed_actions);
-
- foreach ( $allowed_actions as $action => $label) {
- echo "
\n";
- }
- echo "
\n";
+ $post = get_post();
+ if ( isset( $post->post_password ) )
+ echo esc_attr( $post->post_password );
}
/**
@@ -1513,13 +1313,13 @@ function favorite_actions( $screen = null ) {
* returned.
*
* @since 2.7.0
- * @param int $post_id The post id. If not supplied the global $post is used.
+ * @param mixed $post Post id or object. If not supplied the global $post is used.
* @return string The post title if set
*/
-function _draft_or_post_title( $post_id = 0 ) {
- $title = get_the_title($post_id);
- if ( empty($title) )
- $title = __('(no title)');
+function _draft_or_post_title( $post = 0 ) {
+ $title = get_the_title( $post );
+ if ( empty( $title ) )
+ $title = __( '(no title)' );
return $title;
}
@@ -1547,19 +1347,16 @@ function _admin_search_query() {
*/
function iframe_header( $title = '', $limit_styles = false ) {
show_admin_bar( false );
- global $hook_suffix, $current_screen, $current_user, $admin_body_class, $wp_locale;
+ global $hook_suffix, $current_user, $admin_body_class, $wp_locale;
$admin_body_class = preg_replace('/[^a-z0-9_-]+/i', '-', $hook_suffix);
- $admin_body_class .= ' iframe';
-?>
- >
-
-
+ $current_screen = get_current_screen();
+
+ @header( 'Content-Type: ' . get_option( 'html_type' ) . '; charset=' . get_option( 'blog_charset' ) );
+ _wp_admin_html_begin();
+?>
› —
+ ' . __( 'New Feature: Toolbar' ) . '';
+ $content .= '' . __( 'We’ve combined the admin bar and the old Dashboard header into one persistent toolbar. Hover over the toolbar items to see what’s new.' ) . '
';
+
+ if ( is_multisite() && is_super_admin() )
+ $content .= '' . __( 'Network Admin is now located in the My Sites menu.' ) . '
';
+
+ WP_Internal_Pointers::print_js( 'wp330_toolbar', '#wpadminbar', array(
+ 'content' => $content,
+ 'position' => array( 'edge' => 'top', 'align' => 'center' ),
+ ) );
+ }
+
+ /**
+ * Print 'Updated Media Uploader' for 3.3.0.
+ *
+ * @since 3.3.0
+ */
+ public static function pointer_wp330_media_uploader() {}
+
+ /**
+ * Print 'New Feature: Saving Widgets' for 3.3.0.
+ *
+ * @since 3.3.0
+ */
+ public static function pointer_wp330_saving_widgets() {
+ $content = '' . __( 'New Feature: Saving Widgets' ) . ' ';
+ $content .= '' . __( 'If you change your mind and revert to your previous theme, we’ll put the widgets back the way you had them.' ) . '
';
+
+ WP_Internal_Pointers::print_js( 'wp330_saving_widgets', '#message2', array(
+ 'content' => $content,
+ 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left' ),
+ ) );
+ }
+
+ /**
+ * Print 'New Feature: Current Theme Customize Link' for 3.4.0.
+ *
+ * @since 3.4.0
+ */
+ public static function pointer_wp340_customize_current_theme_link() {
+ $content = '' . __( 'New Feature: Customizer' ) . ' ';
+ $content .= '' . __( 'Click Customize to change the header, background, title and menus of the current theme, all in one place.' ) . '
';
+ $content .= '' . __( 'Click the Live Preview links in the Available Themes list below to customize and preview another theme before activating it.' ) . '
';
+
+ WP_Internal_Pointers::print_js( 'wp340_customize_current_theme_link', '#customize-current-theme-link', array(
+ 'content' => $content,
+ 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'offset' => is_rtl() ? '32 0' : '-32 0' ),
+ ) );
+ }
+
+ /**
+ * Print 'New Feature: Choose Image from Library' for 3.4.0.
+ *
+ * @since 3.4.0
+ */
+ public static function pointer_wp340_choose_image_from_library() {
+ $content = '' . __( 'New Feature: Choose Image from Library' ) . ' ';
+ $content .= '' . __( 'Want to use an image you uploaded earlier? Select it from your media library instead of uploading it again.' ) . '
';
+
+ WP_Internal_Pointers::print_js( 'wp340_choose_image_from_library', '#choose-from-library-link', array(
+ 'content' => $content,
+ 'position' => array( 'edge' => 'top', 'align' => is_rtl() ? 'right' : 'left', 'defer_loading' => true ),
+ ) );
+ }
+
+ public static function pointer_wp350_media() {
+ $content = '' . __( 'New Media Manager' ) . ' ';
+ $content .= '' . __( 'Uploading files and creating image galleries has a whole new look. Check it out!' ) . '
';
+
+ self::print_js( 'wp350_media', '.insert-media', array(
+ 'content' => $content,
+ 'position' => array( 'edge' => is_rtl() ? 'right' : 'left', 'align' => 'center' ),
+ ) );
+ }
+
+ /**
+ * Prevents new users from seeing existing 'new feature' pointers.
+ *
+ * @since 3.3.0
+ */
+ public static function dismiss_pointers_for_new_users( $user_id ) {
+ add_user_meta( $user_id, 'dismissed_wp_pointers', 'wp330_toolbar,wp330_saving_widgets,wp340_choose_image_from_library,wp340_customize_current_theme_link,wp350_media' );
+ }
+}
+
+add_action( 'admin_enqueue_scripts', array( 'WP_Internal_Pointers', 'enqueue_scripts' ) );
+add_action( 'user_register', array( 'WP_Internal_Pointers', 'dismiss_pointers_for_new_users' ) );
+
+/**
+ * Convert a screen string to a screen object
+ *
+ * @since 3.0.0
+ *
+ * @param string $hook_name The hook name (also known as the hook suffix) used to determine the screen.
+ * @return WP_Screen Screen object.
+ */
+function convert_to_screen( $hook_name ) {
+ if ( ! class_exists( 'WP_Screen' ) ) {
+ _doing_it_wrong( 'convert_to_screen(), add_meta_box()', __( "Likely direct inclusion of wp-admin/includes/template.php in order to use add_meta_box(). This is very wrong. Hook the add_meta_box() call into the add_meta_boxes action instead." ), '3.3' );
+ return (object) array( 'id' => '_invalid', 'base' => '_are_belong_to_us' );
+ }
+
+ return WP_Screen::get( $hook_name );
+}