2008-02-02 02:57:51 -05:00
< ? php
2008-09-16 20:40:10 -04:00
/**
2011-04-28 11:24:49 -04:00
* WordPress Dashboard Widget Administration Screen API
2008-09-16 20:40:10 -04:00
*
* @ package WordPress
* @ subpackage Administration
*/
/**
* Registers dashboard widgets .
*
2010-09-04 22:45:39 -04:00
* Handles POST data , sets up filters .
2008-09-16 20:40:10 -04:00
*
2010-09-04 22:45:39 -04:00
* @ since 2.5 . 0
2015-05-28 17:41:30 -04:00
*
* @ global array $wp_registered_widgets
* @ global array $wp_registered_widget_controls
* @ global array $wp_dashboard_control_callbacks
2008-09-16 20:40:10 -04:00
*/
2008-02-02 02:57:51 -05:00
function wp_dashboard_setup () {
2008-10-08 19:32:34 -04:00
global $wp_registered_widgets , $wp_registered_widget_controls , $wp_dashboard_control_callbacks ;
$wp_dashboard_control_callbacks = array ();
2010-10-07 15:34:18 -04:00
$screen = get_current_screen ();
2008-10-08 19:32:34 -04:00
2008-02-02 02:57:51 -05:00
/* Register Widgets and Controls */
2011-05-11 23:33:27 -04:00
$response = wp_check_browser_version ();
2011-06-05 11:14:51 -04:00
if ( $response && $response [ 'upgrade' ] ) {
2011-05-11 23:33:27 -04:00
add_filter ( 'postbox_classes_dashboard_dashboard_browser_nag' , 'dashboard_browser_nag_class' );
if ( $response [ 'insecure' ] )
wp_add_dashboard_widget ( 'dashboard_browser_nag' , __ ( 'You are using an insecure browser!' ), 'wp_dashboard_browser_nag' );
else
wp_add_dashboard_widget ( 'dashboard_browser_nag' , __ ( 'Your browser is out of date!' ), 'wp_dashboard_browser_nag' );
}
2008-10-21 13:56:48 -04:00
// Right Now
2010-10-07 15:34:18 -04:00
if ( is_blog_admin () && current_user_can ( 'edit_posts' ) )
2013-12-05 17:38:11 -05:00
wp_add_dashboard_widget ( 'dashboard_right_now' , __ ( 'At a Glance' ), 'wp_dashboard_right_now' );
2008-10-21 13:56:48 -04:00
2010-11-08 12:31:00 -05:00
if ( is_network_admin () )
wp_add_dashboard_widget ( 'network_dashboard_right_now' , __ ( 'Right Now' ), 'wp_network_dashboard_right_now' );
2013-11-13 17:09:10 -05:00
// Activity Widget
2013-11-26 00:29:10 -05:00
if ( is_blog_admin () ) {
2013-12-05 16:23:10 -05:00
wp_add_dashboard_widget ( 'dashboard_activity' , __ ( 'Activity' ), 'wp_dashboard_site_activity' );
2013-11-26 00:29:10 -05:00
}
2011-12-22 19:25:09 -05:00
2008-10-31 16:47:36 -04:00
// QuickPress Widget
2015-10-20 01:49:24 -04:00
if ( is_blog_admin () && current_user_can ( get_post_type_object ( 'post' ) -> cap -> create_posts ) ) {
2013-12-03 12:32:19 -05:00
$quick_draft_title = sprintf ( '<span class="hide-if-no-js">%1$s</span> <span class="hide-if-js">%2$s</span>' , __ ( 'Quick Draft' ), __ ( 'Drafts' ) );
wp_add_dashboard_widget ( 'dashboard_quick_press' , $quick_draft_title , 'wp_dashboard_quick_press' );
}
2008-10-31 16:47:36 -04:00
2013-11-13 17:09:10 -05:00
// WordPress News
2013-11-15 15:15:10 -05:00
wp_add_dashboard_widget ( 'dashboard_primary' , __ ( 'WordPress News' ), 'wp_dashboard_primary' );
2008-02-21 16:20:09 -05:00
2010-10-21 06:06:17 -04:00
if ( is_network_admin () ) {
2014-03-23 22:21:15 -04:00
/**
* Fires after core widgets for the Network Admin dashboard have been registered .
*
* @ since 3.1 . 0
*/
2010-10-21 06:06:17 -04:00
do_action ( 'wp_network_dashboard_setup' );
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the list of widgets to load for the Network Admin dashboard .
2014-03-23 22:21:15 -04:00
*
* @ since 3.1 . 0
*
* @ param array $dashboard_widgets An array of dashboard widgets .
*/
2010-10-21 06:06:17 -04:00
$dashboard_widgets = apply_filters ( 'wp_network_dashboard_widgets' , array () );
2010-10-21 13:51:49 -04:00
} elseif ( is_user_admin () ) {
2014-03-23 22:21:15 -04:00
/**
* Fires after core widgets for the User Admin dashboard have been registered .
*
* @ since 3.1 . 0
*/
2010-10-21 13:51:49 -04:00
do_action ( 'wp_user_dashboard_setup' );
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the list of widgets to load for the User Admin dashboard .
2014-03-23 22:21:15 -04:00
*
* @ since 3.1 . 0
*
* @ param array $dashboard_widgets An array of dashboard widgets .
*/
2010-10-21 13:53:26 -04:00
$dashboard_widgets = apply_filters ( 'wp_user_dashboard_widgets' , array () );
2010-10-21 06:06:17 -04:00
} else {
2014-03-23 22:21:15 -04:00
/**
* Fires after core widgets for the admin dashboard have been registered .
*
* @ since 2.5 . 0
*/
2010-10-21 06:06:17 -04:00
do_action ( 'wp_dashboard_setup' );
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the list of widgets to load for the admin dashboard .
2014-03-23 22:21:15 -04:00
*
* @ since 2.5 . 0
*
* @ param array $dashboard_widgets An array of dashboard widgets .
*/
2010-10-21 06:06:17 -04:00
$dashboard_widgets = apply_filters ( 'wp_dashboard_widgets' , array () );
}
2008-02-02 02:57:51 -05:00
2008-11-17 20:04:41 -05:00
foreach ( $dashboard_widgets as $widget_id ) {
$name = empty ( $wp_registered_widgets [ $widget_id ][ 'all_link' ] ) ? $wp_registered_widgets [ $widget_id ][ 'name' ] : $wp_registered_widgets [ $widget_id ][ 'name' ] . " <a href=' { $wp_registered_widgets [ $widget_id ][ 'all_link' ] } ' class='edit-box open-box'> " . __ ( 'View all' ) . '</a>' ;
wp_add_dashboard_widget ( $widget_id , $name , $wp_registered_widgets [ $widget_id ][ 'callback' ], $wp_registered_widget_controls [ $widget_id ][ 'callback' ] );
}
2008-02-02 02:57:51 -05:00
if ( 'POST' == $_SERVER [ 'REQUEST_METHOD' ] && isset ( $_POST [ 'widget_id' ]) ) {
2012-12-01 19:12:43 -05:00
check_admin_referer ( 'edit-dashboard-widget_' . $_POST [ 'widget_id' ], 'dashboard-widget-nonce' );
2008-02-02 02:57:51 -05:00
ob_start (); // hack - but the same hack wp-admin/widgets.php uses
2008-03-23 12:34:28 -04:00
wp_dashboard_trigger_widget_control ( $_POST [ 'widget_id' ] );
2008-02-02 02:57:51 -05:00
ob_end_clean ();
wp_redirect ( remove_query_arg ( 'edit' ) );
exit ;
}
2013-10-24 18:59:20 -04:00
/** This action is documented in wp-admin/edit-form-advanced.php */
2014-03-23 22:21:15 -04:00
do_action ( 'do_meta_boxes' , $screen -> id , 'normal' , '' );
2013-10-24 18:59:20 -04:00
/** This action is documented in wp-admin/edit-form-advanced.php */
2014-03-23 22:21:15 -04:00
do_action ( 'do_meta_boxes' , $screen -> id , 'side' , '' );
2008-02-02 02:57:51 -05:00
}
2015-05-28 17:41:30 -04:00
/**
2016-03-06 07:08:28 -05:00
* Adds a new dashboard widget .
2015-05-28 17:41:30 -04:00
*
2016-03-07 17:17:26 -05:00
* @ since 2.7 . 0
*
* @ global array $wp_dashboard_control_callbacks
2015-05-28 17:41:30 -04:00
*
2016-03-06 07:08:28 -05:00
* @ param string $widget_id Widget ID ( used in the 'id' attribute for the widget ) .
* @ param string $widget_name Title of the widget .
* @ param callable $callback Function that fills the widget with the desired content .
* The function should echo its output .
* @ param callable $control_callback Optional . Function that outputs controls for the widget . Default null .
* @ param array $callback_args Optional . Data that should be set as the $args property of the widget array
* ( which is the second parameter passed to your callback ) . Default null .
2015-05-28 17:41:30 -04:00
*/
2013-09-16 14:07:10 -04:00
function wp_add_dashboard_widget ( $widget_id , $widget_name , $callback , $control_callback = null , $callback_args = null ) {
2010-10-07 15:34:18 -04:00
$screen = get_current_screen ();
2008-10-08 19:32:34 -04:00
global $wp_dashboard_control_callbacks ;
2010-12-08 14:53:26 -05:00
2016-07-05 11:22:29 -04:00
$private_callback_args = array ( '__widget_basename' => $widget_name );
if ( is_null ( $callback_args ) ) {
$callback_args = $private_callback_args ;
} else if ( is_array ( $callback_args ) ) {
$callback_args = array_merge ( $callback_args , $private_callback_args );
}
2008-10-08 19:32:34 -04:00
if ( $control_callback && current_user_can ( 'edit_dashboard' ) && is_callable ( $control_callback ) ) {
$wp_dashboard_control_callbacks [ $widget_id ] = $control_callback ;
if ( isset ( $_GET [ 'edit' ] ) && $widget_id == $_GET [ 'edit' ] ) {
list ( $url ) = explode ( '#' , add_query_arg ( 'edit' , false ), 2 );
2009-05-18 12:00:33 -04:00
$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url ( $url ) . '">' . __ ( 'Cancel' ) . '</a></span>' ;
2010-12-13 16:21:50 -05:00
$callback = '_wp_dashboard_control_callback' ;
} else {
list ( $url ) = explode ( '#' , add_query_arg ( 'edit' , $widget_id ), 2 );
2010-12-08 14:53:26 -05:00
$widget_name .= ' <span class="postbox-title-action"><a href="' . esc_url ( " $url # $widget_id " ) . '" class="edit-box open-box">' . __ ( 'Configure' ) . '</a></span>' ;
2008-10-08 19:32:34 -04:00
}
}
2010-11-17 13:47:34 -05:00
2013-11-15 15:15:10 -05:00
$side_widgets = array ( 'dashboard_quick_press' , 'dashboard_primary' );
2010-11-08 12:31:00 -05:00
2008-10-31 17:04:48 -04:00
$location = 'normal' ;
if ( in_array ( $widget_id , $side_widgets ) )
$location = 'side' ;
2011-06-15 15:23:35 -04:00
$priority = 'core' ;
if ( 'dashboard_browser_nag' === $widget_id )
$priority = 'high' ;
2013-09-16 14:07:10 -04:00
add_meta_box ( $widget_id , $widget_name , $callback , $screen , $location , $priority , $callback_args );
2008-10-08 19:32:34 -04:00
}
2008-02-02 02:57:51 -05:00
2015-05-29 17:17:27 -04:00
/**
2016-02-03 15:20:26 -05:00
* Outputs controls for the current dashboard widget .
2015-05-29 17:17:27 -04:00
*
2016-02-03 15:20:26 -05:00
* @ access private
* @ since 2.7 . 0
*
* @ param mixed $dashboard
* @ param array $meta_box
2015-05-29 17:17:27 -04:00
*/
2008-10-08 19:32:34 -04:00
function _wp_dashboard_control_callback ( $dashboard , $meta_box ) {
2015-01-15 23:16:24 -05:00
echo '<form method="post" class="dashboard-widget-control-form">' ;
2008-10-08 19:32:34 -04:00
wp_dashboard_trigger_widget_control ( $meta_box [ 'id' ] );
2012-12-01 19:12:43 -05:00
wp_nonce_field ( 'edit-dashboard-widget_' . $meta_box [ 'id' ], 'dashboard-widget-nonce' );
2010-10-17 14:24:34 -04:00
echo '<input type="hidden" name="widget_id" value="' . esc_attr ( $meta_box [ 'id' ]) . '" />' ;
submit_button ( __ ( 'Submit' ) );
2008-12-09 13:03:31 -05:00
echo '</form>' ;
2008-02-02 02:57:51 -05:00
}
2008-09-16 20:40:10 -04:00
/**
2008-10-08 19:32:34 -04:00
* Displays the dashboard .
2008-09-16 20:40:10 -04:00
*
2010-09-04 22:45:39 -04:00
* @ since 2.5 . 0
2008-09-16 20:40:10 -04:00
*/
2008-10-08 19:32:34 -04:00
function wp_dashboard () {
2010-10-07 15:34:18 -04:00
$screen = get_current_screen ();
2013-12-04 12:28:11 -05:00
$columns = absint ( $screen -> get_columns () );
$columns_css = '' ;
if ( $columns ) {
$columns_css = " columns- $columns " ;
}
2010-10-07 15:34:18 -04:00
2009-02-23 21:37:22 -05:00
?>
2013-12-04 12:28:11 -05:00
< div id = " dashboard-widgets " class = " metabox-holder<?php echo $columns_css ; ?> " >
2014-05-18 21:59:15 -04:00
< div id = " postbox-container-1 " class = " postbox-container " >
2012-03-23 17:41:00 -04:00
< ? php do_meta_boxes ( $screen -> id , 'normal' , '' ); ?>
</ div >
2014-05-18 21:59:15 -04:00
< div id = " postbox-container-2 " class = " postbox-container " >
2012-03-23 17:41:00 -04:00
< ? php do_meta_boxes ( $screen -> id , 'side' , '' ); ?>
</ div >
2014-05-18 21:59:15 -04:00
< div id = " postbox-container-3 " class = " postbox-container " >
2012-03-23 17:41:00 -04:00
< ? php do_meta_boxes ( $screen -> id , 'column3' , '' ); ?>
</ div >
2014-05-18 21:59:15 -04:00
< div id = " postbox-container-4 " class = " postbox-container " >
2012-03-23 17:41:00 -04:00
< ? php do_meta_boxes ( $screen -> id , 'column4' , '' ); ?>
</ div >
</ div >
2008-10-08 19:32:34 -04:00
2009-02-23 21:37:22 -05:00
< ? php
2008-10-08 19:32:34 -04:00
wp_nonce_field ( 'closedpostboxes' , 'closedpostboxesnonce' , false );
wp_nonce_field ( 'meta-box-order' , 'meta-box-order-nonce' , false );
2008-10-10 19:54:27 -04:00
2008-02-02 02:57:51 -05:00
}
2014-03-23 22:21:15 -04:00
//
// Dashboard Widgets
//
2008-02-02 02:57:51 -05:00
2013-11-15 15:15:10 -05:00
/**
* Dashboard widget that displays some basic stats about the site .
*
2013-12-05 17:38:11 -05:00
* Formerly 'Right Now' . A streamlined 'At a Glance' as of 3.8 .
2013-11-15 15:15:10 -05:00
*
* @ since 2.7 . 0
*/
function wp_dashboard_right_now () {
2013-11-13 17:09:10 -05:00
?>
< div class = " main " >
< ul >
< ? php
2013-12-05 18:34:11 -05:00
// Posts and Pages
foreach ( array ( 'post' , 'page' ) as $post_type ) {
2013-11-13 17:09:10 -05:00
$num_posts = wp_count_posts ( $post_type );
if ( $num_posts && $num_posts -> publish ) {
2013-12-05 18:34:11 -05:00
if ( 'post' == $post_type ) {
$text = _n ( '%s Post' , '%s Posts' , $num_posts -> publish );
} else {
$text = _n ( '%s Page' , '%s Pages' , $num_posts -> publish );
}
$text = sprintf ( $text , number_format_i18n ( $num_posts -> publish ) );
2014-01-22 11:52:11 -05:00
$post_type_object = get_post_type_object ( $post_type );
if ( $post_type_object && current_user_can ( $post_type_object -> cap -> edit_posts ) ) {
printf ( '<li class="%1$s-count"><a href="edit.php?post_type=%1$s">%2$s</a></li>' , $post_type , $text );
} else {
printf ( '<li class="%1$s-count"><span>%2$s</span></li>' , $post_type , $text );
}
2009-04-29 19:30:07 -04:00
}
2008-10-31 00:23:17 -04:00
}
2013-11-13 17:09:10 -05:00
// Comments
$num_comm = wp_count_comments ();
2016-05-01 07:06:28 -04:00
if ( $num_comm && ( $num_comm -> approved || $num_comm -> moderated ) ) {
2014-09-29 08:42:16 -04:00
$text = sprintf ( _n ( '%s Comment' , '%s Comments' , $num_comm -> approved ), number_format_i18n ( $num_comm -> approved ) );
2013-12-05 18:34:11 -05:00
?>
< li class = " comment-count " >< a href = " edit-comments.php " >< ? php echo $text ; ?> </a></li>
< ? php
2016-01-05 09:19:28 -05:00
$moderated_comments_count_i18n = number_format_i18n ( $num_comm -> moderated );
2015-09-24 11:53:25 -04:00
/* translators: Number of comments in moderation */
2016-01-05 09:19:28 -05:00
$text = sprintf ( _nx ( '%s in moderation' , '%s in moderation' , $num_comm -> moderated , 'comments' ), $moderated_comments_count_i18n );
/* translators: Number of comments in moderation */
$aria_label = sprintf ( _nx ( '%s comment in moderation' , '%s comments in moderation' , $num_comm -> moderated , 'comments' ), $moderated_comments_count_i18n );
2015-09-24 11:53:25 -04:00
?>
< li class = " comment-mod-count<?php
if ( ! $num_comm -> moderated ) {
echo ' hidden' ;
}
2016-01-05 09:19:28 -05:00
?> "><a href="edit-comments.php?comment_status=moderated" aria-label="<?php esc_attr_e( $aria_label ); ?>"><?php echo $text; ?></a></li>
2015-09-24 11:53:25 -04:00
< ? php
2011-05-06 19:42:37 -04:00
}
2013-12-09 14:12:10 -05:00
/**
2016-05-22 14:01:30 -04:00
* Filters the array of extra elements to list in the 'At a Glance'
2014-03-23 22:21:15 -04:00
* dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' . Each element
* is wrapped in list - item tags on output .
2013-12-09 14:12:10 -05:00
*
* @ since 3.8 . 0
2014-03-23 22:21:15 -04:00
*
* @ param array $items Array of extra 'At a Glance' widget items .
2013-12-09 14:12:10 -05:00
*/
$elements = apply_filters ( 'dashboard_glance_items' , array () );
2014-03-23 22:21:15 -04:00
2013-12-09 14:12:10 -05:00
if ( $elements ) {
echo '<li>' . implode ( " </li> \n <li> " , $elements ) . " </li> \n " ;
}
2013-11-13 17:09:10 -05:00
?>
</ ul >
2013-12-05 18:05:10 -05:00
< ? php
2014-03-25 10:36:15 -04:00
update_right_now_message ();
2013-12-05 18:05:10 -05:00
// Check if search engines are asked not to index this site.
2015-12-11 17:03:26 -05:00
if ( ! is_network_admin () && ! is_user_admin () && current_user_can ( 'manage_options' ) && '0' == get_option ( 'blog_public' ) ) {
2013-12-05 18:05:10 -05:00
/**
2016-05-22 14:01:30 -04:00
* Filters the link title attribute for the 'Search Engines Discouraged'
2014-03-23 22:21:15 -04:00
* message displayed in the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
2013-12-05 18:05:10 -05:00
*
* @ since 3.0 . 0
2016-03-03 03:56:26 -05:00
* @ since 4.5 . 0 The default for `$title` was updated to an empty string .
2013-12-05 18:05:10 -05:00
*
2014-03-23 22:21:15 -04:00
* @ param string $title Default attribute text .
2013-12-05 18:05:10 -05:00
*/
2016-01-05 09:19:28 -05:00
$title = apply_filters ( 'privacy_on_link_title' , '' );
2011-05-06 19:42:37 -04:00
2013-12-05 18:05:10 -05:00
/**
2016-05-22 14:01:30 -04:00
* Filters the link label for the 'Search Engines Discouraged' message
2014-03-23 22:21:15 -04:00
* displayed in the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
2013-12-05 18:05:10 -05:00
*
* @ since 3.0 . 0
*
2014-03-23 22:21:15 -04:00
* @ param string $content Default text .
2013-12-05 18:05:10 -05:00
*/
$content = apply_filters ( 'privacy_on_link_text' , __ ( 'Search Engines Discouraged' ) );
2016-01-05 09:19:28 -05:00
$title_attr = '' === $title ? '' : " title=' $title ' " ;
2013-12-05 18:05:10 -05:00
2016-01-05 09:19:28 -05:00
echo " <p><a href='options-reading.php' $title_attr > $content </a></p> " ;
2013-12-05 18:05:10 -05:00
}
?>
</ div >
2013-11-13 17:09:10 -05:00
< ? php
2014-03-23 22:21:15 -04:00
/*
* activity_box_end has a core action , but only prints content when multisite .
* Using an output buffer is the only way to really check if anything ' s displayed here .
*/
2013-11-13 17:09:10 -05:00
ob_start ();
2014-03-23 22:21:15 -04:00
/**
* Fires at the end of the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
*
* @ since 2.5 . 0
*/
2008-10-21 13:56:48 -04:00
do_action ( 'rightnow_end' );
2014-03-23 22:21:15 -04:00
/**
* Fires at the end of the 'At a Glance' dashboard widget .
*
* Prior to 3.8 . 0 , the widget was named 'Right Now' .
*
* @ since 2.0 . 0
*/
2008-10-21 13:56:48 -04:00
do_action ( 'activity_box_end' );
2014-03-23 22:21:15 -04:00
2013-11-13 17:09:10 -05:00
$actions = ob_get_clean ();
if ( ! empty ( $actions ) ) : ?>
< div class = " sub " >
< ? php echo $actions ; ?>
</ div >
< ? php endif ;
2008-10-21 13:56:48 -04:00
}
2015-05-30 23:18:25 -04:00
/**
* @ since 3.1 . 0
*/
2010-11-08 12:31:00 -05:00
function wp_network_dashboard_right_now () {
$actions = array ();
if ( current_user_can ( 'create_sites' ) )
$actions [ 'create-site' ] = '<a href="' . network_admin_url ( 'site-new.php' ) . '">' . __ ( 'Create a New Site' ) . '</a>' ;
if ( current_user_can ( 'create_users' ) )
$actions [ 'create-user' ] = '<a href="' . network_admin_url ( 'user-new.php' ) . '">' . __ ( 'Create a New User' ) . '</a>' ;
$c_users = get_user_count ();
$c_blogs = get_blog_count ();
$user_text = sprintf ( _n ( '%s user' , '%s users' , $c_users ), number_format_i18n ( $c_users ) );
$blog_text = sprintf ( _n ( '%s site' , '%s sites' , $c_blogs ), number_format_i18n ( $c_blogs ) );
2010-11-17 13:47:34 -05:00
2010-11-08 12:31:00 -05:00
$sentence = sprintf ( __ ( 'You have %1$s and %2$s.' ), $blog_text , $user_text );
if ( $actions ) {
echo '<ul class="subsubsub">' ;
2010-11-08 12:36:09 -05:00
foreach ( $actions as $class => $action ) {
2010-11-08 12:31:00 -05:00
$actions [ $class ] = " \t <li class=' $class '> $action " ;
}
echo implode ( " |</li> \n " , $actions ) . " </li> \n " ;
echo '</ul>' ;
}
?>
< br class = " clear " />
< p class = " youhave " >< ? php echo $sentence ; ?> </p>
2014-03-23 22:21:15 -04:00
< ? php
/**
* Fires in the Network Admin 'Right Now' dashboard widget
* just before the user and site search form fields .
*
* @ since MU
*
* @ param null $unused
*/
do_action ( 'wpmuadminresult' , '' );
?>
2010-11-08 12:31:00 -05:00
2012-06-05 14:51:33 -04:00
< form action = " <?php echo network_admin_url('users.php'); ?> " method = " get " >
2010-11-08 12:31:00 -05:00
< p >
2015-02-22 21:29:26 -05:00
< label class = " screen-reader-text " for = " search-users " >< ? php _e ( 'Search Users' ); ?> </label>
< input type = " search " name = " s " value = " " size = " 30 " autocomplete = " off " id = " search-users " />
2015-09-22 01:45:26 -04:00
< ? php submit_button ( __ ( 'Search Users' ), 'button' , false , false , array ( 'id' => 'submit_users' ) ); ?>
2010-11-08 12:31:00 -05:00
</ p >
</ form >
2012-06-05 14:51:33 -04:00
< form action = " <?php echo network_admin_url('sites.php'); ?> " method = " get " >
2010-11-08 12:31:00 -05:00
< p >
2015-02-22 21:29:26 -05:00
< label class = " screen-reader-text " for = " search-sites " >< ? php _e ( 'Search Sites' ); ?> </label>
< input type = " search " name = " s " value = " " size = " 30 " autocomplete = " off " id = " search-sites " />
2015-09-22 01:45:26 -04:00
< ? php submit_button ( __ ( 'Search Sites' ), 'button' , false , false , array ( 'id' => 'submit_sites' ) ); ?>
2010-11-08 12:31:00 -05:00
</ p >
</ form >
< ? php
2014-03-23 22:21:15 -04:00
/**
* Fires at the end of the 'Right Now' widget in the Network Admin dashboard .
*
* @ since MU
*/
2010-11-08 12:31:00 -05:00
do_action ( 'mu_rightnow_end' );
2014-03-23 22:21:15 -04:00
/**
* Fires at the end of the 'Right Now' widget in the Network Admin dashboard .
*
* @ since MU
*/
2010-11-08 12:31:00 -05:00
do_action ( 'mu_activity_box_end' );
}
2013-11-13 17:09:10 -05:00
/**
2013-11-16 22:21:10 -05:00
* The Quick Draft widget display and creation of drafts .
2013-11-13 17:09:10 -05:00
*
* @ since 3.8 . 0
*
2015-05-28 17:41:30 -04:00
* @ global int $post_ID
*
2013-12-06 14:18:11 -05:00
* @ param string $error_msg Optional . Error message . Default false .
2013-11-13 17:09:10 -05:00
*/
2013-11-16 22:21:10 -05:00
function wp_dashboard_quick_press ( $error_msg = false ) {
2010-05-23 03:58:06 -04:00
global $post_ID ;
2015-07-22 00:02:25 -04:00
if ( ! current_user_can ( 'edit_posts' ) ) {
return ;
}
2010-05-23 03:58:06 -04:00
/* Check if a new auto-draft (= no new post_ID) is needed or if the old can be used */
$last_post_id = ( int ) get_user_option ( 'dashboard_quick_press_last_post_id' ); // Get the last post_ID
if ( $last_post_id ) {
$post = get_post ( $last_post_id );
if ( empty ( $post ) || $post -> post_status != 'auto-draft' ) { // auto-draft doesn't exists anymore
2013-11-13 17:09:10 -05:00
$post = get_default_post_to_edit ( 'post' , true );
2012-10-17 14:58:09 -04:00
update_user_option ( get_current_user_id (), 'dashboard_quick_press_last_post_id' , ( int ) $post -> ID ); // Save post_ID
2010-05-23 03:58:06 -04:00
} else {
$post -> post_title = '' ; // Remove the auto draft title
}
} else {
2012-10-17 14:58:09 -04:00
$post = get_default_post_to_edit ( 'post' , true );
$user_id = get_current_user_id ();
// Don't create an option if this is a super admin who does not belong to this site.
if ( ! ( is_super_admin ( $user_id ) && ! in_array ( get_current_blog_id (), array_keys ( get_blogs_of_user ( $user_id ) ) ) ) )
update_user_option ( $user_id , 'dashboard_quick_press_last_post_id' , ( int ) $post -> ID ); // Save post_ID
2010-05-23 03:58:06 -04:00
}
$post_ID = ( int ) $post -> ID ;
2008-08-27 15:36:12 -04:00
?>
2013-12-03 12:32:19 -05:00
< form name = " post " action = " <?php echo esc_url( admin_url( 'post.php' ) ); ?> " method = " post " id = " quick-press " class = " initial-form hide-if-no-js " >
2008-08-27 15:36:12 -04:00
2013-11-16 22:21:10 -05:00
< ? php if ( $error_msg ) : ?>
< div class = " error " >< ? php echo $error_msg ; ?> </div>
2008-12-09 15:31:51 -05:00
< ? php endif ; ?>
2008-10-16 18:35:53 -04:00
2013-11-13 17:09:10 -05:00
< div class = " input-text-wrap " id = " title-wrap " >
2014-03-23 22:21:15 -04:00
< label class = " screen-reader-text prompt " for = " title " id = " title-prompt-text " >
< ? php
/** This filter is documented in wp-admin/edit-form-advanced.php */
echo apply_filters ( 'enter_title_here' , __ ( 'Title' ), $post );
?>
</ label >
2013-11-13 17:09:10 -05:00
< input type = " text " name = " post_title " id = " title " autocomplete = " off " />
2008-08-27 15:36:12 -04:00
</ div >
2008-12-09 13:03:31 -05:00
2013-11-13 17:09:10 -05:00
< div class = " textarea-wrap " id = " description-wrap " >
2013-12-08 19:43:11 -05:00
< label class = " screen-reader-text prompt " for = " content " id = " content-prompt-text " >< ? php _e ( 'What’s on your mind?' ); ?> </label>
2014-07-29 11:34:16 -04:00
< textarea name = " content " id = " content " class = " mceEditor " rows = " 3 " cols = " 15 " autocomplete = " off " ></ textarea >
2008-08-27 15:36:12 -04:00
</ div >
< p class = " submit " >
2013-11-13 17:09:10 -05:00
< input type = " hidden " name = " action " id = " quickpost-action " value = " post-quickdraft-save " />
2011-10-31 13:08:36 -04:00
< input type = " hidden " name = " post_ID " value = " <?php echo $post_ID ; ?> " />
2010-01-27 09:36:17 -05:00
< input type = " hidden " name = " post_type " value = " post " />
2013-11-13 17:09:10 -05:00
< ? php wp_nonce_field ( 'add-post' ); ?>
< ? php submit_button ( __ ( 'Save Draft' ), 'primary' , 'save' , false , array ( 'id' => 'save-post' ) ); ?>
2008-10-08 19:32:34 -04:00
< br class = " clear " />
2008-08-27 15:36:12 -04:00
</ p >
2008-10-08 19:32:34 -04:00
</ form >
2013-11-15 15:40:15 -05:00
< ? php
2013-12-05 16:23:10 -05:00
wp_dashboard_recent_drafts ();
}
/**
* Show recent drafts of the user on the dashboard .
*
* @ since 2.7 . 0
2015-05-29 17:17:27 -04:00
*
* @ param array $drafts
2013-12-05 16:23:10 -05:00
*/
function wp_dashboard_recent_drafts ( $drafts = false ) {
2013-11-15 15:40:15 -05:00
if ( ! $drafts ) {
2013-12-05 16:23:10 -05:00
$query_args = array (
'post_type' => 'post' ,
'post_status' => 'draft' ,
'author' => get_current_user_id (),
'posts_per_page' => 4 ,
'orderby' => 'modified' ,
'order' => 'DESC'
);
2015-10-10 02:33:25 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the post query arguments for the 'Recent Drafts' dashboard widget .
2015-10-10 02:33:25 -04:00
*
* @ since 4.4 . 0
*
2015-10-10 02:39:24 -04:00
* @ param array $query_args The query arguments for the 'Recent Drafts' dashboard widget .
2015-10-10 02:33:25 -04:00
*/
$query_args = apply_filters ( 'dashboard_recent_drafts_query_args' , $query_args );
2013-12-05 16:23:10 -05:00
$drafts = get_posts ( $query_args );
if ( ! $drafts ) {
return ;
}
2013-11-15 15:40:15 -05:00
}
2013-11-23 09:13:09 -05:00
2013-11-15 15:40:15 -05:00
echo '<div class="drafts">' ;
if ( count ( $drafts ) > 3 ) {
2015-10-28 13:57:25 -04:00
echo '<p class="view-all"><a href="' . esc_url ( admin_url ( 'edit.php?post_status=draft' ) ) . '" aria-label="' . __ ( 'View all drafts' ) . '">' . _x ( 'View all' , 'drafts' ) . " </a></p> \n " ;
2013-11-15 15:40:15 -05:00
}
2015-10-28 13:57:25 -04:00
echo '<h2 class="hide-if-no-js">' . __ ( 'Drafts' ) . " </h2> \n <ul> " ;
2013-11-23 09:13:09 -05:00
2013-11-15 15:40:15 -05:00
$drafts = array_slice ( $drafts , 0 , 3 );
foreach ( $drafts as $draft ) {
$url = get_edit_post_link ( $draft -> ID );
$title = _draft_or_post_title ( $draft -> ID );
echo " <li> \n " ;
2016-01-05 09:19:28 -05:00
/* translators: %s: post title */
echo '<div class="draft-title"><a href="' . esc_url ( $url ) . '" aria-label="' . esc_attr ( sprintf ( __ ( 'Edit “%s”' ), $title ) ) . '">' . esc_html ( $title ) . '</a>' ;
2015-12-06 23:26:27 -05:00
echo '<time datetime="' . get_the_time ( 'c' , $draft ) . '">' . get_the_time ( __ ( 'F j, Y' ), $draft ) . '</time></div>' ;
2013-11-15 15:40:15 -05:00
if ( $the_content = wp_trim_words ( $draft -> post_content , 10 ) ) {
echo '<p>' . $the_content . '</p>' ;
}
echo " </li> \n " ;
}
echo " </ul> \n </div> " ;
2008-08-27 15:36:12 -04:00
}
2015-05-28 17:41:30 -04:00
/**
2016-02-03 15:20:26 -05:00
* Outputs a row for the Recent Comments widget .
*
* @ access private
* @ since 2.7 . 0
*
2015-09-03 14:17:24 -04:00
* @ global WP_Comment $comment
2015-05-28 17:41:30 -04:00
*
2016-02-03 15:20:26 -05:00
* @ param WP_Comment $comment The current comment .
* @ param bool $show_date Optional . Whether to display the date .
2015-05-28 17:41:30 -04:00
*/
2008-10-08 19:32:34 -04:00
function _wp_dashboard_recent_comments_row ( & $comment , $show_date = true ) {
2015-09-24 11:53:25 -04:00
$GLOBALS [ 'comment' ] = clone $comment ;
2008-10-08 19:32:34 -04:00
2016-02-24 11:07:26 -05:00
if ( $comment -> comment_post_ID > 0 ) {
2015-09-11 01:56:24 -04:00
$comment_post_title = _draft_or_post_title ( $comment -> comment_post_ID );
2016-02-24 11:07:26 -05:00
$comment_post_url = get_the_permalink ( $comment -> comment_post_ID );
2014-03-18 18:44:27 -04:00
$comment_post_link = " <a href=' $comment_post_url '> $comment_post_title </a> " ;
} else {
2015-09-11 01:56:24 -04:00
$comment_post_link = '' ;
2014-03-18 18:44:27 -04:00
}
2008-12-09 12:44:04 -05:00
$actions_string = '' ;
2010-09-07 19:35:28 -04:00
if ( current_user_can ( 'edit_comment' , $comment -> comment_ID ) ) {
2014-07-17 05:14:16 -04:00
// Pre-order it: Approve | Reply | Edit | Spam | Trash.
2009-11-27 07:57:35 -05:00
$actions = array (
'approve' => '' , 'unapprove' => '' ,
'reply' => '' ,
'edit' => '' ,
2009-12-01 17:05:03 -05:00
'spam' => '' ,
2015-09-10 13:49:24 -04:00
'trash' => '' , 'delete' => '' ,
'view' => '' ,
2009-11-27 07:57:35 -05:00
);
2009-10-08 04:24:59 -04:00
$del_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " delete-comment_ $comment->comment_ID " ) );
$approve_nonce = esc_html ( '_wpnonce=' . wp_create_nonce ( " approve-comment_ $comment->comment_ID " ) );
$approve_url = esc_url ( " comment.php?action=approvecomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $approve_nonce " );
$unapprove_url = esc_url ( " comment.php?action=unapprovecomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $approve_nonce " );
2009-12-15 04:45:29 -05:00
$spam_url = esc_url ( " comment.php?action=spamcomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $del_nonce " );
2009-10-08 04:24:59 -04:00
$trash_url = esc_url ( " comment.php?action=trashcomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $del_nonce " );
2009-11-10 05:38:19 -05:00
$delete_url = esc_url ( " comment.php?action=deletecomment&p= $comment->comment_post_ID &c= $comment->comment_ID & $del_nonce " );
2009-10-08 04:24:59 -04:00
2016-01-05 09:19:28 -05:00
$actions [ 'approve' ] = " <a href=' $approve_url ' data-wp-lists='dim:the-comment-list:comment- $comment->comment_ID :unapproved:e7e7d3:e7e7d3:new=approved' class='vim-a' aria-label=' " . esc_attr__ ( 'Approve this comment' ) . " '> " . __ ( 'Approve' ) . '</a>' ;
$actions [ 'unapprove' ] = " <a href=' $unapprove_url ' data-wp-lists='dim:the-comment-list:comment- $comment->comment_ID :unapproved:e7e7d3:e7e7d3:new=unapproved' class='vim-u' aria-label=' " . esc_attr__ ( 'Unapprove this comment' ) . " '> " . __ ( 'Unapprove' ) . '</a>' ;
$actions [ 'edit' ] = " <a href='comment.php?action=editcomment&c= { $comment -> comment_ID } ' aria-label=' " . esc_attr__ ( 'Edit this comment' ) . " '> " . __ ( 'Edit' ) . '</a>' ;
$actions [ 'reply' ] = '<a onclick="window.commentReply && commentReply.open(\'' . $comment -> comment_ID . '\',\'' . $comment -> comment_post_ID . '\');return false;" class="vim-r hide-if-no-js" aria-label="' . esc_attr__ ( 'Reply to this comment' ) . '" href="#">' . __ ( 'Reply' ) . '</a>' ;
$actions [ 'spam' ] = " <a href=' $spam_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::spam=1' class='vim-s vim-destructive' aria-label=' " . esc_attr__ ( 'Mark this comment as spam' ) . " '> " . /* translators: mark as spam link */ _x ( 'Spam' , 'verb' ) . '</a>' ;
2015-09-10 13:49:24 -04:00
if ( ! EMPTY_TRASH_DAYS ) {
2016-01-05 09:19:28 -05:00
$actions [ 'delete' ] = " <a href=' $delete_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::trash=1' class='delete vim-d vim-destructive' aria-label=' " . esc_attr__ ( 'Delete this comment permanently' ) . " '> " . __ ( 'Delete Permanently' ) . '</a>' ;
2015-09-10 13:49:24 -04:00
} else {
2016-01-05 09:19:28 -05:00
$actions [ 'trash' ] = " <a href=' $trash_url ' data-wp-lists='delete:the-comment-list:comment- $comment->comment_ID ::trash=1' class='delete vim-d vim-destructive' aria-label=' " . esc_attr__ ( 'Move this comment to the Trash' ) . " '> " . _x ( 'Trash' , 'verb' ) . '</a>' ;
2015-09-10 13:49:24 -04:00
}
2016-04-22 17:30:28 -04:00
$actions [ 'view' ] = '<a class="comment-link" href="' . esc_url ( get_comment_link ( $comment ) ) . '" aria-label="' . esc_attr__ ( 'View this comment' ) . '">' . __ ( 'View' ) . '</a>' ;
2008-02-02 02:57:51 -05:00
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the action links displayed for each comment in the 'Recent Comments'
2014-03-23 22:21:15 -04:00
* dashboard widget .
*
* @ since 2.6 . 0
*
2015-09-03 14:17:24 -04:00
* @ param array $actions An array of comment actions . Default actions include :
* 'Approve' , 'Unapprove' , 'Edit' , 'Reply' , 'Spam' ,
* 'Delete' , and 'Trash' .
* @ param WP_Comment $comment The comment object .
2014-03-23 22:21:15 -04:00
*/
2009-11-27 07:57:35 -05:00
$actions = apply_filters ( 'comment_row_actions' , array_filter ( $actions ), $comment );
2008-02-02 02:57:51 -05:00
2008-10-08 19:32:34 -04:00
$i = 0 ;
foreach ( $actions as $action => $link ) {
++ $i ;
( ( ( 'approve' == $action || 'unapprove' == $action ) && 2 === $i ) || 1 === $i ) ? $sep = '' : $sep = ' | ' ;
2008-02-02 02:57:51 -05:00
2008-10-08 19:32:34 -04:00
// Reply and quickedit need a hide-if-no-js span
2016-04-22 17:30:28 -04:00
if ( 'reply' == $action || 'quickedit' == $action ) {
2008-10-08 19:32:34 -04:00
$action .= ' hide-if-no-js' ;
2016-04-22 17:30:28 -04:00
}
2008-02-02 02:57:51 -05:00
2016-04-22 17:30:28 -04:00
if ( 'view' === $action && '1' !== $comment -> comment_approved ) {
$action .= ' hidden' ;
}
2008-12-09 07:00:44 -05:00
$actions_string .= " <span class=' $action '> $sep $link </span> " ;
2008-02-02 02:57:51 -05:00
}
2008-10-08 19:32:34 -04:00
}
?>
2008-02-02 02:57:51 -05:00
2016-02-24 11:07:26 -05:00
< li id = " comment-<?php echo $comment->comment_ID ; ?> " < ? php comment_class ( array ( 'comment-item' , wp_get_comment_status ( $comment ) ), $comment ); ?> >
2008-10-08 19:32:34 -04:00
2013-08-22 16:08:08 -04:00
< ? php echo get_avatar ( $comment , 50 , 'mystery' ); ?>
2009-03-05 22:20:38 -05:00
2014-03-03 15:14:14 -05:00
< ? php if ( ! $comment -> comment_type || 'comment' == $comment -> comment_type ) : ?>
2015-07-07 11:26:24 -04:00
< div class = " dashboard-comment-wrap has-row-actions " >
2015-10-28 13:57:25 -04:00
< p class = " comment-meta " >
2016-02-24 11:07:26 -05:00
< ? php
// Comments might not have a post they relate to, e.g. programmatically created ones.
2015-09-11 01:56:24 -04:00
if ( $comment_post_link ) {
printf (
/* translators: 1: comment author, 2: post link, 3: notification if the comment is pending */
2016-02-24 11:07:26 -05:00
__ ( 'From %1$s on %2$s %3$s' ),
2015-09-11 01:56:24 -04:00
'<cite class="comment-author">' . get_comment_author_link ( $comment ) . '</cite>' ,
$comment_post_link ,
2016-02-24 11:07:26 -05:00
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
2015-09-11 01:56:24 -04:00
);
} else {
printf (
/* translators: 1: comment author, 2: notification if the comment is pending */
__ ( 'From %1$s %2$s' ),
'<cite class="comment-author">' . get_comment_author_link ( $comment ) . '</cite>' ,
2016-02-24 11:07:26 -05:00
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
2015-09-11 01:56:24 -04:00
);
}
2016-02-24 11:07:26 -05:00
?>
2015-10-28 13:57:25 -04:00
</ p >
2008-10-08 19:32:34 -04:00
< ? php
else :
2014-05-30 13:58:15 -04:00
switch ( $comment -> comment_type ) {
case 'pingback' :
$type = __ ( 'Pingback' );
break ;
case 'trackback' :
$type = __ ( 'Trackback' );
break ;
default :
$type = ucwords ( $comment -> comment_type );
}
2009-05-18 11:11:07 -04:00
$type = esc_html ( $type );
2008-10-08 19:32:34 -04:00
?>
2015-07-07 11:26:24 -04:00
< div class = " dashboard-comment-wrap has-row-actions " >
2016-02-24 11:07:26 -05:00
< p class = " comment-meta " >
< ? php
// Pingbacks, Trackbacks or custom comment types might not have a post they relate to, e.g. programmatically created ones.
if ( $comment_post_link ) {
printf (
/* translators: 1: type of comment, 2: post link, 3: notification if the comment is pending */
_x ( '%1$s on %2$s %3$s' , 'dashboard' ),
" <strong> $type </strong> " ,
$comment_post_link ,
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
);
} else {
printf (
/* translators: 1: type of comment, 2: notification if the comment is pending */
2016-02-28 16:39:26 -05:00
_x ( '%1$s %2$s' , 'dashboard' ),
2016-02-24 11:07:26 -05:00
" <strong> $type </strong> " ,
'<span class="approve">' . __ ( '[Pending]' ) . '</span>'
);
}
?>
</ p >
2015-09-11 01:56:24 -04:00
< p class = " comment-author " >< ? php comment_author_link ( $comment ); ?> </p>
2008-10-08 19:32:34 -04:00
< ? php endif ; // comment_type ?>
2015-09-11 01:56:24 -04:00
< blockquote >< p >< ? php comment_excerpt ( $comment ); ?> </p></blockquote>
2016-02-24 11:07:26 -05:00
< ? php if ( $actions_string ) : ?>
2008-11-27 23:33:35 -05:00
< p class = " row-actions " >< ? php echo $actions_string ; ?> </p>
2016-02-24 11:07:26 -05:00
< ? php endif ; ?>
2009-03-05 22:20:38 -05:00
</ div >
2016-02-24 11:07:26 -05:00
</ li >
2008-10-08 19:32:34 -04:00
< ? php
2015-09-11 01:56:24 -04:00
$GLOBALS [ 'comment' ] = null ;
2008-10-08 19:32:34 -04:00
}
2008-02-02 02:57:51 -05:00
2010-02-12 23:39:39 -05:00
/**
2013-11-16 22:21:10 -05:00
* Callback function for Activity widget .
2013-11-13 17:09:10 -05:00
*
* @ since 3.8 . 0
2010-02-12 23:39:39 -05:00
*/
2013-12-05 16:23:10 -05:00
function wp_dashboard_site_activity () {
2010-02-12 23:39:39 -05:00
2013-11-13 17:09:10 -05:00
echo '<div id="activity-widget">' ;
2010-02-12 23:39:39 -05:00
2013-12-05 16:23:10 -05:00
$future_posts = wp_dashboard_recent_posts ( array (
2013-11-13 17:09:10 -05:00
'max' => 5 ,
'status' => 'future' ,
'order' => 'ASC' ,
'title' => __ ( 'Publishing Soon' ),
'id' => 'future-posts' ,
) );
2013-12-05 16:23:10 -05:00
$recent_posts = wp_dashboard_recent_posts ( array (
2013-11-13 17:09:10 -05:00
'max' => 5 ,
'status' => 'publish' ,
'order' => 'DESC' ,
'title' => __ ( 'Recently Published' ),
'id' => 'published-posts' ,
) );
2010-02-12 23:39:39 -05:00
2013-12-05 16:23:10 -05:00
$recent_comments = wp_dashboard_recent_comments ();
2013-11-13 17:09:10 -05:00
if ( ! $future_posts && ! $recent_posts && ! $recent_comments ) {
echo '<div class="no-activity">' ;
echo '<p class="smiley"></p>' ;
echo '<p>' . __ ( 'No activity yet!' ) . '</p>' ;
echo '</div>' ;
}
echo '</div>' ;
2008-02-02 02:57:51 -05:00
}
2008-09-16 20:40:10 -04:00
/**
2013-11-16 22:21:10 -05:00
* Generates Publishing Soon and Recently Published sections .
2013-11-13 17:09:10 -05:00
*
* @ since 3.8 . 0
2008-09-16 20:40:10 -04:00
*
2013-12-06 14:18:11 -05:00
* @ param array $args {
* An array of query and display arguments .
*
2014-03-18 08:56:14 -04:00
* @ type int $max Number of posts to display .
2013-12-06 14:18:11 -05:00
* @ type string $status Post status .
* @ type string $order Designates ascending ( 'ASC' ) or descending ( 'DESC' ) order .
* @ type string $title Section title .
* @ type string $id The container id .
* }
* @ return bool False if no posts were found . True otherwise .
2008-09-16 20:40:10 -04:00
*/
2013-12-05 16:23:10 -05:00
function wp_dashboard_recent_posts ( $args ) {
2013-11-13 17:09:10 -05:00
$query_args = array (
'post_type' => 'post' ,
'post_status' => $args [ 'status' ],
'orderby' => 'date' ,
'order' => $args [ 'order' ],
'posts_per_page' => intval ( $args [ 'max' ] ),
'no_found_rows' => true ,
2014-03-18 18:44:27 -04:00
'cache_results' => false ,
'perm' => ( 'future' === $args [ 'status' ] ) ? 'editable' : 'readable' ,
2013-11-13 17:09:10 -05:00
);
2015-02-22 14:57:24 -05:00
/**
2016-05-22 14:01:30 -04:00
* Filters the query arguments used for the Recent Posts widget .
2015-02-22 14:57:24 -05:00
*
* @ since 4.2 . 0
*
* @ param array $query_args The arguments passed to WP_Query to produce the list of posts .
*/
$query_args = apply_filters ( 'dashboard_recent_posts_query_args' , $query_args );
2013-11-13 17:09:10 -05:00
$posts = new WP_Query ( $query_args );
2009-03-07 14:44:28 -05:00
2013-11-13 17:09:10 -05:00
if ( $posts -> have_posts () ) {
2008-03-02 15:17:30 -05:00
2013-11-13 17:09:10 -05:00
echo '<div id="' . $args [ 'id' ] . '" class="activity-block">' ;
2008-02-21 16:20:09 -05:00
2015-10-28 13:57:25 -04:00
echo '<h3>' . $args [ 'title' ] . '</h3>' ;
2008-02-21 16:20:09 -05:00
2013-11-13 17:09:10 -05:00
echo '<ul>' ;
2009-02-27 14:32:50 -05:00
2013-12-05 16:23:10 -05:00
$today = date ( 'Y-m-d' , current_time ( 'timestamp' ) );
$tomorrow = date ( 'Y-m-d' , strtotime ( '+1 day' , current_time ( 'timestamp' ) ) );
2013-11-13 17:09:10 -05:00
while ( $posts -> have_posts () ) {
$posts -> the_post ();
2013-12-05 16:23:10 -05:00
$time = get_the_time ( 'U' );
if ( date ( 'Y-m-d' , $time ) == $today ) {
$relative = __ ( 'Today' );
} elseif ( date ( 'Y-m-d' , $time ) == $tomorrow ) {
$relative = __ ( 'Tomorrow' );
2015-10-09 00:26:24 -04:00
} elseif ( date ( 'Y' , $time ) !== date ( 'Y' , current_time ( 'timestamp' ) ) ) {
2016-06-10 00:50:33 -04:00
/* translators: date and time format for recent posts on the dashboard, from a different calendar year, see https://secure.php.net/date */
2015-10-09 00:26:24 -04:00
$relative = date_i18n ( __ ( 'M jS Y' ), $time );
2013-12-05 16:23:10 -05:00
} else {
2016-06-10 00:50:33 -04:00
/* translators: date and time format for recent posts on the dashboard, see https://secure.php.net/date */
2013-12-05 18:34:11 -05:00
$relative = date_i18n ( __ ( 'M jS' ), $time );
2013-12-05 16:23:10 -05:00
}
2015-01-07 19:26:22 -05:00
// Use the post edit link for those who can edit, the permalink otherwise.
$recent_post_link = current_user_can ( 'edit_post' , get_the_ID () ) ? get_edit_post_link () : get_permalink ();
2016-01-05 09:19:28 -05:00
$draft_or_post_title = _draft_or_post_title ();
2016-02-29 20:39:27 -05:00
printf (
'<li><span>%1$s</span> <a href="%2$s" aria-label="%3$s">%4$s</a></li>' ,
/* translators: 1: relative date, 2: time */
sprintf ( _x ( '%1$s, %2$s' , 'dashboard' ), $relative , get_the_time () ),
2016-01-05 09:19:28 -05:00
$recent_post_link ,
/* translators: %s: post title */
2016-02-29 20:39:27 -05:00
esc_attr ( sprintf ( __ ( 'Edit “%s”' ), $draft_or_post_title ) ),
$draft_or_post_title
2016-01-05 09:19:28 -05:00
);
2009-06-15 12:56:51 -04:00
}
2009-02-27 14:32:50 -05:00
2013-11-13 17:09:10 -05:00
echo '</ul>' ;
echo '</div>' ;
2009-02-27 14:32:50 -05:00
2013-11-13 17:09:10 -05:00
} else {
return false ;
2008-02-21 16:20:09 -05:00
}
2009-02-27 14:32:50 -05:00
2013-11-13 17:09:10 -05:00
wp_reset_postdata ();
2008-02-21 16:20:09 -05:00
2013-11-13 17:09:10 -05:00
return true ;
2008-10-08 19:32:34 -04:00
}
2008-09-16 20:40:10 -04:00
/**
2013-11-16 22:21:10 -05:00
* Show Comments section .
2008-09-16 20:40:10 -04:00
*
2013-11-13 17:09:10 -05:00
* @ since 3.8 . 0
2008-09-16 20:40:10 -04:00
*
2013-12-06 14:18:11 -05:00
* @ param int $total_items Optional . Number of comments to query . Default 5.
* @ return bool False if no comments were found . True otherwise .
2008-09-16 20:40:10 -04:00
*/
2013-12-05 16:23:10 -05:00
function wp_dashboard_recent_comments ( $total_items = 5 ) {
2013-11-13 17:09:10 -05:00
// Select all comment types and filter out spam later for better query performance.
$comments = array ();
2011-12-22 19:25:09 -05:00
2013-11-13 17:09:10 -05:00
$comments_query = array (
'number' => $total_items * 5 ,
'offset' => 0
);
if ( ! current_user_can ( 'edit_posts' ) )
$comments_query [ 'status' ] = 'approve' ;
2011-12-22 19:25:09 -05:00
2013-11-13 17:09:10 -05:00
while ( count ( $comments ) < $total_items && $possible = get_comments ( $comments_query ) ) {
2015-05-25 13:59:25 -04:00
if ( ! is_array ( $possible ) ) {
break ;
}
2013-11-13 17:09:10 -05:00
foreach ( $possible as $comment ) {
if ( ! current_user_can ( 'read_post' , $comment -> comment_post_ID ) )
continue ;
$comments [] = $comment ;
if ( count ( $comments ) == $total_items )
break 2 ;
}
$comments_query [ 'offset' ] += $comments_query [ 'number' ];
$comments_query [ 'number' ] = $total_items * 10 ;
2011-12-22 19:25:09 -05:00
}
2013-11-13 17:09:10 -05:00
if ( $comments ) {
echo '<div id="latest-comments" class="activity-block">' ;
2016-02-24 11:07:26 -05:00
echo '<h3>' . __ ( 'Recent Comments' ) . '</h3>' ;
2011-12-22 19:25:09 -05:00
2016-02-24 11:07:26 -05:00
echo '<ul id="the-comment-list" data-wp-lists="list:comment">' ;
Grouped backports to the 4.6 branch.
- Comments: Prevent users who can not see a post from seeing comments on it.
- Shortcodes: Restrict media shortcode ajax to certain type.
- REST API: Ensure no-cache headers are sent when methods are overridden.
- Prevent unintended behavior when certain objects are unserialized.
Merges [56834], [56835], [56836], and [56838] to the 4.6 branch.
Props xknown, jorbin, joehoyle, timothyblynjacobs, peterwilsoncc, ehtis, tykoted, antpb, rmccue.
Built from https://develop.svn.wordpress.org/branches/4.6@56859
git-svn-id: http://core.svn.wordpress.org/branches/4.6@56370 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2023-10-12 14:10:52 -04:00
foreach ( $comments as $comment ) {
$comment_post = get_post ( $comment -> comment_post_ID );
if (
current_user_can ( 'edit_post' , $comment -> comment_post_ID ) ||
(
empty ( $comment_post -> post_password ) &&
current_user_can ( 'read_post' , $comment -> comment_post_ID )
)
) {
_wp_dashboard_recent_comments_row ( $comment );
}
}
2016-02-24 11:07:26 -05:00
echo '</ul>' ;
2011-12-22 19:25:09 -05:00
2016-02-24 11:07:26 -05:00
if ( current_user_can ( 'edit_posts' ) ) {
echo '<h3 class="screen-reader-text">' . __ ( 'View more comments' ) . '</h3>' ;
_get_list_table ( 'WP_Comments_List_Table' ) -> views ();
}
2011-12-22 19:25:09 -05:00
2013-11-13 17:09:10 -05:00
wp_comment_reply ( - 1 , false , 'dashboard' , false );
wp_comment_trashnotice ();
2011-12-22 19:25:09 -05:00
2013-11-13 17:09:10 -05:00
echo '</div>' ;
} else {
return false ;
}
return true ;
}
2011-12-22 19:25:09 -05:00
2013-11-15 15:15:10 -05:00
/**
* Display generic dashboard RSS widget feed .
*
* @ since 2.5 . 0
*
* @ param string $widget_id
*/
function wp_dashboard_rss_output ( $widget_id ) {
$widgets = get_option ( 'dashboard_widget_options' );
echo '<div class="rss-widget">' ;
wp_widget_rss_output ( $widgets [ $widget_id ] );
echo " </div> " ;
}
2008-09-16 20:40:10 -04:00
/**
* Checks to see if all of the feed url in $check_urls are cached .
*
* If $check_urls is empty , look for the rss feed url found in the dashboard
2011-09-03 10:18:10 -04:00
* widget options of $widget_id . If cached , call $callback , a function that
2008-09-16 20:40:10 -04:00
* echoes out output for this widget . If not cache , echo a " Loading... " stub
2016-07-09 20:51:30 -04:00
* which is later replaced by Ajax call ( see top of / wp - admin / index . php )
2008-09-16 20:40:10 -04:00
*
2010-09-04 22:45:39 -04:00
* @ since 2.5 . 0
2008-09-16 20:40:10 -04:00
*
2010-09-04 22:45:39 -04:00
* @ param string $widget_id
2015-09-25 19:58:25 -04:00
* @ param callable $callback
2008-09-16 20:40:10 -04:00
* @ param array $check_urls RSS feeds
* @ return bool False on failure . True on success .
*/
2008-02-21 16:20:09 -05:00
function wp_dashboard_cached_rss_widget ( $widget_id , $callback , $check_urls = array () ) {
2011-04-30 13:24:06 -04:00
$loading = '<p class="widget-loading hide-if-no-js">' . __ ( 'Loading…' ) . '</p><p class="hide-if-js">' . __ ( 'This widget requires JavaScript.' ) . '</p>' ;
2011-06-10 02:31:39 -04:00
$doing_ajax = ( defined ( 'DOING_AJAX' ) && DOING_AJAX );
2008-02-21 16:20:09 -05:00
if ( empty ( $check_urls ) ) {
2011-04-29 10:46:27 -04:00
$widgets = get_option ( 'dashboard_widget_options' );
2011-06-10 02:31:39 -04:00
if ( empty ( $widgets [ $widget_id ][ 'url' ]) && ! $doing_ajax ) {
2008-02-21 16:20:09 -05:00
echo $loading ;
return false ;
}
$check_urls = array ( $widgets [ $widget_id ][ 'url' ] );
}
2015-07-12 18:07:25 -04:00
$locale = get_locale ();
2015-07-13 11:32:25 -04:00
$cache_key = 'dash_' . md5 ( $widget_id . '_' . $locale );
2011-06-10 02:31:39 -04:00
if ( false !== ( $output = get_transient ( $cache_key ) ) ) {
echo $output ;
return true ;
}
if ( ! $doing_ajax ) {
echo $loading ;
return false ;
2008-02-21 16:20:09 -05:00
}
if ( $callback && is_callable ( $callback ) ) {
2014-08-07 17:47:16 -04:00
$args = array_slice ( func_get_args (), 3 );
array_unshift ( $args , $widget_id , $check_urls );
2011-06-10 02:31:39 -04:00
ob_start ();
2008-02-21 16:20:09 -05:00
call_user_func_array ( $callback , $args );
2012-09-25 01:26:19 -04:00
set_transient ( $cache_key , ob_get_flush (), 12 * HOUR_IN_SECONDS ); // Default lifetime in cache of 12 hours (same as the feeds)
2008-02-21 16:20:09 -05:00
}
return true ;
}
2015-09-25 18:51:24 -04:00
//
// Dashboard Widgets Controls
//
2008-02-02 02:57:51 -05:00
2008-09-16 20:40:10 -04:00
/**
* Calls widget control callback .
*
2010-09-04 22:45:39 -04:00
* @ since 2.5 . 0
2008-09-16 20:40:10 -04:00
*
2015-05-28 17:41:30 -04:00
* @ global array $wp_dashboard_control_callbacks
*
2008-09-16 20:40:10 -04:00
* @ param int $widget_control_id Registered Widget ID .
*/
2008-03-23 12:34:28 -04:00
function wp_dashboard_trigger_widget_control ( $widget_control_id = false ) {
2008-10-08 19:32:34 -04:00
global $wp_dashboard_control_callbacks ;
2008-12-09 13:03:31 -05:00
2008-10-08 19:32:34 -04:00
if ( is_scalar ( $widget_control_id ) && $widget_control_id && isset ( $wp_dashboard_control_callbacks [ $widget_control_id ]) && is_callable ( $wp_dashboard_control_callbacks [ $widget_control_id ]) ) {
call_user_func ( $wp_dashboard_control_callbacks [ $widget_control_id ], '' , array ( 'id' => $widget_control_id , 'callback' => $wp_dashboard_control_callbacks [ $widget_control_id ] ) );
}
2008-02-02 02:57:51 -05:00
}
2013-12-05 16:23:10 -05:00
/**
* The RSS dashboard widget control .
*
* Sets up $args to be used as input to wp_widget_rss_form () . Handles POST data
* from RSS - type widgets .
*
* @ since 2.5 . 0
*
* @ param string $widget_id
* @ param array $form_inputs
*/
function wp_dashboard_rss_control ( $widget_id , $form_inputs = array () ) {
if ( ! $widget_options = get_option ( 'dashboard_widget_options' ) )
$widget_options = array ();
if ( ! isset ( $widget_options [ $widget_id ]) )
$widget_options [ $widget_id ] = array ();
$number = 1 ; // Hack to use wp_widget_rss_form()
$widget_options [ $widget_id ][ 'number' ] = $number ;
if ( 'POST' == $_SERVER [ 'REQUEST_METHOD' ] && isset ( $_POST [ 'widget-rss' ][ $number ]) ) {
$_POST [ 'widget-rss' ][ $number ] = wp_unslash ( $_POST [ 'widget-rss' ][ $number ] );
$widget_options [ $widget_id ] = wp_widget_rss_process ( $_POST [ 'widget-rss' ][ $number ] );
$widget_options [ $widget_id ][ 'number' ] = $number ;
2014-07-17 05:14:16 -04:00
// Title is optional. If black, fill it if possible.
2013-12-05 16:23:10 -05:00
if ( ! $widget_options [ $widget_id ][ 'title' ] && isset ( $_POST [ 'widget-rss' ][ $number ][ 'title' ]) ) {
$rss = fetch_feed ( $widget_options [ $widget_id ][ 'url' ]);
if ( is_wp_error ( $rss ) ) {
$widget_options [ $widget_id ][ 'title' ] = htmlentities ( __ ( 'Unknown Feed' ));
} else {
$widget_options [ $widget_id ][ 'title' ] = htmlentities ( strip_tags ( $rss -> get_title ()));
$rss -> __destruct ();
unset ( $rss );
}
}
update_option ( 'dashboard_widget_options' , $widget_options );
$cache_key = 'dash_' . md5 ( $widget_id );
delete_transient ( $cache_key );
}
wp_widget_rss_form ( $widget_options [ $widget_id ], $form_inputs );
}
2008-09-16 20:40:10 -04:00
/**
2013-11-15 15:15:10 -05:00
* WordPress News dashboard widget .
2013-11-13 17:09:10 -05:00
*
2013-11-15 15:15:10 -05:00
* @ since 2.7 . 0
2013-11-13 17:09:10 -05:00
*/
2013-11-15 15:15:10 -05:00
function wp_dashboard_primary () {
$feeds = array (
2014-03-23 22:21:15 -04:00
'news' => array (
/**
2016-05-22 14:01:30 -04:00
* Filters the primary link URL for the 'WordPress News' dashboard widget .
2014-03-23 22:21:15 -04:00
*
* @ since 2.5 . 0
*
* @ param string $link The widget ' s primary link URL .
*/
2015-10-02 18:46:28 -04:00
'link' => apply_filters ( 'dashboard_primary_link' , __ ( 'https://wordpress.org/news/' ) ),
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the primary feed URL for the 'WordPress News' dashboard widget .
2014-03-23 22:21:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $url The widget ' s primary feed URL .
*/
'url' => apply_filters ( 'dashboard_primary_feed' , __ ( 'http://wordpress.org/news/feed/' ) ),
/**
2016-05-22 14:01:30 -04:00
* Filters the primary link title for the 'WordPress News' dashboard widget .
2014-03-23 22:21:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $title Title attribute for the widget ' s primary link .
*/
2013-12-05 16:23:10 -05:00
'title' => apply_filters ( 'dashboard_primary_title' , __ ( 'WordPress Blog' ) ),
2013-11-13 17:09:10 -05:00
'items' => 1 ,
'show_summary' => 1 ,
'show_author' => 0 ,
'show_date' => 1 ,
),
'planet' => array (
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the secondary link URL for the 'WordPress News' dashboard widget .
2014-03-23 22:21:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $link The widget ' s secondary link URL .
*/
2014-09-29 09:24:15 -04:00
'link' => apply_filters ( 'dashboard_secondary_link' , __ ( 'https://planet.wordpress.org/' ) ),
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the secondary feed URL for the 'WordPress News' dashboard widget .
2014-03-23 22:21:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $url The widget ' s secondary feed URL .
*/
2014-09-29 09:24:15 -04:00
'url' => apply_filters ( 'dashboard_secondary_feed' , __ ( 'https://planet.wordpress.org/feed/' ) ),
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the secondary link title for the 'WordPress News' dashboard widget .
2014-03-23 22:21:15 -04:00
*
* @ since 2.3 . 0
*
* @ param string $title Title attribute for the widget ' s secondary link .
*/
2013-12-05 16:23:10 -05:00
'title' => apply_filters ( 'dashboard_secondary_title' , __ ( 'Other WordPress News' ) ),
2015-08-31 17:57:21 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the number of secondary link items for the 'WordPress News' dashboard widget .
2015-08-31 17:57:21 -04:00
*
* @ since 4.4 . 0
*
* @ param string $items How many items to show in the secondary feed .
*/
'items' => apply_filters ( 'dashboard_secondary_items' , 3 ),
2013-11-13 17:09:10 -05:00
'show_summary' => 0 ,
'show_author' => 0 ,
'show_date' => 0 ,
2013-11-15 15:15:10 -05:00
)
);
if ( ( ! is_multisite () && is_blog_admin () && current_user_can ( 'install_plugins' ) ) || ( is_network_admin () && current_user_can ( 'manage_network_plugins' ) && current_user_can ( 'install_plugins' ) ) ) {
$feeds [ 'plugins' ] = array (
2013-11-13 17:09:10 -05:00
'link' => '' ,
'url' => array (
2013-11-15 15:15:10 -05:00
'popular' => 'http://wordpress.org/plugins/rss/browse/popular/' ,
2013-11-13 17:09:10 -05:00
),
'title' => '' ,
'items' => 1 ,
'show_summary' => 0 ,
'show_author' => 0 ,
'show_date' => 0 ,
2013-11-15 15:15:10 -05:00
);
2013-11-13 17:09:10 -05:00
}
2013-11-15 15:15:10 -05:00
wp_dashboard_cached_rss_widget ( 'dashboard_primary' , 'wp_dashboard_primary_output' , $feeds );
2013-11-13 17:09:10 -05:00
}
/**
2013-11-15 15:15:10 -05:00
* Display the WordPress news feeds .
2013-11-13 17:09:10 -05:00
*
* @ since 3.8 . 0
2013-12-06 14:18:11 -05:00
*
* @ param string $widget_id Widget ID .
* @ param array $feeds Array of RSS feeds .
2013-11-13 17:09:10 -05:00
*/
2013-11-15 15:15:10 -05:00
function wp_dashboard_primary_output ( $widget_id , $feeds ) {
2015-08-25 16:28:22 -04:00
foreach ( $feeds as $type => $args ) {
2013-11-13 17:09:10 -05:00
$args [ 'type' ] = $type ;
echo '<div class="rss-widget">' ;
2013-11-15 15:15:10 -05:00
if ( $type === 'plugins' ) {
wp_dashboard_plugins_output ( $args [ 'url' ], $args );
} else {
wp_widget_rss_output ( $args [ 'url' ], $args );
}
2013-11-13 17:09:10 -05:00
echo " </div> " ;
2008-02-02 02:57:51 -05:00
}
2013-11-13 17:09:10 -05:00
}
/**
2013-11-15 15:15:10 -05:00
* Display plugins text for the WordPress news widget .
2013-11-13 17:09:10 -05:00
*
2013-11-15 15:15:10 -05:00
* @ since 2.5 . 0
2016-01-09 20:26:25 -05:00
*
* @ param string $rss The RSS feed URL .
* @ param array $args Array of arguments for this RSS feed .
2013-11-13 17:09:10 -05:00
*/
2013-11-15 15:15:10 -05:00
function wp_dashboard_plugins_output ( $rss , $args = array () ) {
2013-11-13 17:09:10 -05:00
// Plugin feeds plus link to install them
2013-11-15 15:15:10 -05:00
$popular = fetch_feed ( $args [ 'url' ][ 'popular' ] );
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
if ( false === $plugin_slugs = get_transient ( 'plugin_slugs' ) ) {
$plugin_slugs = array_keys ( get_plugins () );
set_transient ( 'plugin_slugs' , $plugin_slugs , DAY_IN_SECONDS );
}
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
echo '<ul>' ;
2013-11-13 17:09:10 -05:00
2014-06-11 14:55:14 -04:00
foreach ( array ( $popular ) as $feed ) {
if ( is_wp_error ( $feed ) || ! $feed -> get_item_quantity () )
2013-11-15 15:15:10 -05:00
continue ;
2013-11-13 17:09:10 -05:00
2014-06-11 14:55:14 -04:00
$items = $feed -> get_items ( 0 , 5 );
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
// Pick a random, non-installed plugin
while ( true ) {
// Abort this foreach loop iteration if there's no plugins left of this type
if ( 0 == count ( $items ) )
continue 2 ;
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
$item_key = array_rand ( $items );
$item = $items [ $item_key ];
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
list ( $link , $frag ) = explode ( '#' , $item -> get_link () );
2008-02-02 02:57:51 -05:00
2013-11-15 15:15:10 -05:00
$link = esc_url ( $link );
if ( preg_match ( '|/([^/]+?)/?$|' , $link , $matches ) )
$slug = $matches [ 1 ];
else {
unset ( $items [ $item_key ] );
continue ;
}
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
// Is this random plugin's slug already installed? If so, try again.
reset ( $plugin_slugs );
foreach ( $plugin_slugs as $plugin_slug ) {
if ( $slug == substr ( $plugin_slug , 0 , strlen ( $slug ) ) ) {
unset ( $items [ $item_key ] );
continue 2 ;
2013-11-13 17:09:10 -05:00
}
}
2013-11-15 15:15:10 -05:00
// If we get to this point, then the random plugin isn't installed and we can stop the while().
break ;
}
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
// Eliminate some common badly formed plugin descriptions
while ( ( null !== $item_key = array_rand ( $items ) ) && false !== strpos ( $items [ $item_key ] -> get_description (), 'Plugin Name:' ) )
unset ( $items [ $item_key ]);
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
if ( ! isset ( $items [ $item_key ]) )
continue ;
2013-11-13 17:09:10 -05:00
2016-01-05 09:19:28 -05:00
$raw_title = $item -> get_title ();
2013-11-13 17:09:10 -05:00
2013-11-15 15:15:10 -05:00
$ilink = wp_nonce_url ( 'plugin-install.php?tab=plugin-information&plugin=' . $slug , 'install-plugin_' . $slug ) . '&TB_iframe=true&width=600&height=800' ;
2016-01-05 09:19:28 -05:00
echo '<li class="dashboard-news-plugin"><span>' . __ ( 'Popular Plugin' ) . ':</span> ' . esc_html ( $raw_title ) .
2016-03-10 17:37:26 -05:00
' <a href="' . $ilink . '" class="thickbox open-plugin-details-modal" aria-label="' .
2016-01-05 09:19:28 -05:00
/* translators: %s: plugin name */
esc_attr ( sprintf ( __ ( 'Install %s' ), $raw_title ) ) . '">(' . __ ( 'Install' ) . ')</a></li>' ;
2013-11-13 17:09:10 -05:00
2014-06-11 14:55:14 -04:00
$feed -> __destruct ();
unset ( $feed );
2013-11-13 17:09:10 -05:00
}
2013-11-15 15:15:10 -05:00
echo '</ul>' ;
2008-02-02 02:57:51 -05:00
}
2013-05-14 08:37:30 -04:00
/**
* Display file upload quota on dashboard .
*
2016-05-23 13:28:27 -04:00
* Runs on the { @ see 'activity_box_end' } hook in wp_dashboard_right_now () .
2013-05-14 08:37:30 -04:00
*
* @ since 3.0 . 0
*
2014-11-03 02:09:23 -05:00
* @ return bool | null True if not multisite , user can ' t upload files , or the space check option is disabled .
2015-12-12 10:37:28 -05:00
*/
2010-08-02 13:56:05 -04:00
function wp_dashboard_quota () {
2015-10-07 13:11:25 -04:00
if ( ! is_multisite () || ! current_user_can ( 'upload_files' ) || get_site_option ( 'upload_space_check_disabled' ) )
2010-08-02 13:56:05 -04:00
return true ;
$quota = get_space_allowed ();
2012-08-01 09:52:06 -04:00
$used = get_space_used ();
2010-08-02 13:56:05 -04:00
if ( $used > $quota )
$percentused = '100' ;
else
$percentused = ( $used / $quota ) * 100 ;
2013-11-13 17:09:10 -05:00
$used_class = ( $percentused >= 70 ) ? ' warning' : '' ;
2010-08-02 13:56:05 -04:00
$used = round ( $used , 2 );
$percentused = number_format ( $percentused );
?>
2015-10-28 13:57:25 -04:00
< h3 class = " mu-storage " >< ? php _e ( 'Storage Space' ); ?> </h3>
2013-11-13 17:09:10 -05:00
< div class = " mu-storage " >
< ul >
< li class = " storage-count " >
2013-12-05 18:34:11 -05:00
< ? php $text = sprintf (
/* translators: number of megabytes */
__ ( '%s MB Space Allowed' ),
number_format_i18n ( $quota )
);
printf (
2016-01-05 09:19:28 -05:00
'<a href="%1$s">%2$s <span class="screen-reader-text">(%3$s)</span></a>' ,
2013-11-13 17:09:10 -05:00
esc_url ( admin_url ( 'upload.php' ) ),
2016-01-05 09:19:28 -05:00
$text ,
__ ( 'Manage Uploads' )
2013-11-13 17:09:10 -05:00
); ?>
</ li >< li class = " storage-count <?php echo $used_class ; ?> " >
2013-12-05 18:34:11 -05:00
< ? php $text = sprintf (
/* translators: 1: number of megabytes, 2: percentage */
__ ( '%1$s MB (%2$s%%) Space Used' ),
2013-11-13 17:09:10 -05:00
number_format_i18n ( $used , 2 ),
2013-12-05 18:34:11 -05:00
$percentused
);
printf (
2016-01-05 09:19:28 -05:00
'<a href="%1$s" class="musublink">%2$s <span class="screen-reader-text">(%3$s)</span></a>' ,
2013-12-05 18:34:11 -05:00
esc_url ( admin_url ( 'upload.php' ) ),
2016-01-05 09:19:28 -05:00
$text ,
__ ( 'Manage Uploads' )
2013-11-13 17:09:10 -05:00
); ?>
</ li >
</ ul >
2010-08-02 13:56:05 -04:00
</ div >
< ? php
}
2011-05-11 23:33:27 -04:00
// Display Browser Nag Meta Box
function wp_dashboard_browser_nag () {
$notice = '' ;
$response = wp_check_browser_version ();
2011-06-05 11:14:51 -04:00
if ( $response ) {
if ( $response [ 'insecure' ] ) {
2015-10-29 21:33:25 -04:00
/* translators: %s: browser name and link */
$msg = sprintf ( __ ( " It looks like you're using an insecure version of %s. Using an outdated browser makes your computer unsafe. For the best WordPress experience, please update your browser. " ),
sprintf ( '<a href="%s">%s</a>' , esc_url ( $response [ 'update_url' ] ), esc_html ( $response [ 'name' ] ) )
);
2011-06-05 11:14:51 -04:00
} else {
2015-10-29 21:33:25 -04:00
/* translators: %s: browser name and link */
$msg = sprintf ( __ ( " It looks like you're using an old version of %s. For the best WordPress experience, please update your browser. " ),
sprintf ( '<a href="%s">%s</a>' , esc_url ( $response [ 'update_url' ] ), esc_html ( $response [ 'name' ] ) )
);
2011-06-05 11:14:51 -04:00
}
2011-05-11 23:33:27 -04:00
2011-06-05 11:14:51 -04:00
$browser_nag_class = '' ;
if ( ! empty ( $response [ 'img_src' ] ) ) {
$img_src = ( is_ssl () && ! empty ( $response [ 'img_src_ssl' ] ) ) ? $response [ 'img_src_ssl' ] : $response [ 'img_src' ];
2011-05-11 23:33:27 -04:00
2011-06-05 11:14:51 -04:00
$notice .= '<div class="alignright browser-icon"><a href="' . esc_attr ( $response [ 'update_url' ]) . '"><img src="' . esc_attr ( $img_src ) . '" alt="" /></a></div>' ;
$browser_nag_class = ' has-browser-icon' ;
}
$notice .= " <p class='browser-update-nag { $browser_nag_class } '> { $msg } </p> " ;
2012-05-13 18:44:01 -04:00
$browsehappy = 'http://browsehappy.com/' ;
$locale = get_locale ();
if ( 'en_US' !== $locale )
$browsehappy = add_query_arg ( 'locale' , $locale , $browsehappy );
$notice .= '<p>' . sprintf ( __ ( '<a href="%1$s" class="update-browser-link">Update %2$s</a> or learn how to <a href="%3$s" class="browse-happy-link">browse happy</a>' ), esc_attr ( $response [ 'update_url' ] ), esc_html ( $response [ 'name' ] ), esc_url ( $browsehappy ) ) . '</p>' ;
2016-01-05 09:19:28 -05:00
$notice .= '<p class="hide-if-no-js"><a href="" class="dismiss" aria-label="' . esc_attr__ ( 'Dismiss the browser warning panel' ) . '">' . __ ( 'Dismiss' ) . '</a></p>' ;
2011-06-05 11:14:51 -04:00
$notice .= '<div class="clear"></div>' ;
2011-05-11 23:33:27 -04:00
}
2014-03-23 22:21:15 -04:00
/**
2016-05-22 14:01:30 -04:00
* Filters the notice output for the 'Browse Happy' nag meta box .
2014-03-23 22:21:15 -04:00
*
* @ since 3.2 . 0
*
* @ param string $notice The notice content .
* @ param array $response An array containing web browser information .
*/
2011-05-11 23:33:27 -04:00
echo apply_filters ( 'browse-happy-notice' , $notice , $response );
}
2015-05-30 23:18:25 -04:00
/**
* @ since 3.2 . 0
*
* @ param array $classes
* @ return array
*/
2011-05-11 23:33:27 -04:00
function dashboard_browser_nag_class ( $classes ) {
$response = wp_check_browser_version ();
2011-06-05 11:14:51 -04:00
if ( $response && $response [ 'insecure' ] )
2011-05-11 23:33:27 -04:00
$classes [] = 'browser-insecure' ;
return $classes ;
}
/**
* Check if the user needs a browser update
*
2011-06-11 00:40:18 -04:00
* @ since 3.2 . 0
2011-06-05 11:14:51 -04:00
*
2015-05-28 17:41:30 -04:00
* @ global string $wp_version
*
2011-06-05 11:14:51 -04:00
* @ return array | bool False on failure , array of browser data on success .
2011-05-11 23:33:27 -04:00
*/
function wp_check_browser_version () {
2011-06-05 11:14:51 -04:00
if ( empty ( $_SERVER [ 'HTTP_USER_AGENT' ] ) )
return false ;
2011-05-11 23:33:27 -04:00
$key = md5 ( $_SERVER [ 'HTTP_USER_AGENT' ] );
2011-05-12 01:45:02 -04:00
if ( false === ( $response = get_site_transient ( 'browser_' . $key ) ) ) {
2011-05-11 23:33:27 -04:00
global $wp_version ;
$options = array (
'body' => array ( 'useragent' => $_SERVER [ 'HTTP_USER_AGENT' ] ),
2012-04-11 16:22:48 -04:00
'user-agent' => 'WordPress/' . $wp_version . '; ' . home_url ()
2011-05-11 23:33:27 -04:00
);
2013-09-14 15:31:08 -04:00
$response = wp_remote_post ( 'http://api.wordpress.org/core/browse-happy/1.1/' , $options );
2011-05-11 23:33:27 -04:00
2011-05-14 15:45:07 -04:00
if ( is_wp_error ( $response ) || 200 != wp_remote_retrieve_response_code ( $response ) )
return false ;
2011-05-11 23:33:27 -04:00
/**
* Response should be an array with :
2011-06-05 11:14:51 -04:00
* 'name' - string - A user friendly browser name
2015-09-05 20:17:24 -04:00
* 'version' - string - The version of the browser the user is using
* 'current_version' - string - The most recent version of the browser
2011-05-11 23:33:27 -04:00
* 'upgrade' - boolean - Whether the browser needs an upgrade
* 'insecure' - boolean - Whether the browser is deemed insecure
* 'upgrade_url' - string - The url to visit to upgrade
* 'img_src' - string - An image representing the browser
2011-05-11 23:45:25 -04:00
* 'img_src_ssl' - string - An image ( over SSL ) representing the browser
2011-05-11 23:33:27 -04:00
*/
2013-09-14 15:31:08 -04:00
$response = json_decode ( wp_remote_retrieve_body ( $response ), true );
2011-05-11 23:33:27 -04:00
2012-04-27 11:57:51 -04:00
if ( ! is_array ( $response ) )
2011-06-05 11:14:51 -04:00
return false ;
2011-05-11 23:33:27 -04:00
2012-09-25 01:26:19 -04:00
set_site_transient ( 'browser_' . $key , $response , WEEK_IN_SECONDS );
2011-05-11 23:33:27 -04:00
}
return $response ;
}
2008-11-17 20:04:41 -05:00
/**
* Empty function usable by plugins to output empty dashboard widget ( to be populated later by JS ) .
*/
function wp_dashboard_empty () {}
2011-09-22 02:23:10 -04:00
/**
* Displays a welcome panel to introduce users to WordPress .
*
2012-01-04 14:03:33 -05:00
* @ since 3.3 . 0
2011-09-22 02:23:10 -04:00
*/
function wp_welcome_panel () {
?>
2011-11-18 19:42:22 -05:00
< div class = " welcome-panel-content " >
2015-10-28 13:57:25 -04:00
< h2 >< ? php _e ( 'Welcome to WordPress!' ); ?> </h2>
2012-09-26 15:44:43 -04:00
< p class = " about-description " >< ? php _e ( 'We’ve assembled some links to get you started:' ); ?> </p>
2011-11-18 19:42:22 -05:00
< div class = " welcome-panel-column-container " >
< div class = " welcome-panel-column " >
2014-07-14 15:01:16 -04:00
< ? php if ( current_user_can ( 'customize' ) ) : ?>
2015-10-28 13:57:25 -04:00
< h3 >< ? php _e ( 'Get Started' ); ?> </h3>
2014-07-14 15:01:16 -04:00
< a class = " button button-primary button-hero load-customize hide-if-no-customize " href = " <?php echo wp_customize_url(); ?> " >< ? php _e ( 'Customize Your Site' ); ?> </a>
< ? php endif ; ?>
2012-11-30 08:40:59 -05:00
< a class = " button button-primary button-hero hide-if-customize " href = " <?php echo admin_url( 'themes.php' ); ?> " >< ? php _e ( 'Customize Your Site' ); ?> </a>
2012-09-26 15:44:43 -04:00
< ? php if ( current_user_can ( 'install_themes' ) || ( current_user_can ( 'switch_themes' ) && count ( wp_get_themes ( array ( 'allowed' => true ) ) ) > 1 ) ) : ?>
2012-10-01 10:58:05 -04:00
< p class = " hide-if-no-customize " >< ? php printf ( __ ( 'or, <a href="%s">change your theme completely</a>' ), admin_url ( 'themes.php' ) ); ?> </p>
2012-09-26 15:44:43 -04:00
< ? php endif ; ?>
2011-11-18 19:42:22 -05:00
</ div >
< div class = " welcome-panel-column " >
2015-10-28 13:57:25 -04:00
< h3 >< ? php _e ( 'Next Steps' ); ?> </h3>
2011-11-18 19:42:22 -05:00
< ul >
2012-09-26 15:44:43 -04:00
< ? php if ( 'page' == get_option ( 'show_on_front' ) && ! get_option ( 'page_for_posts' ) ) : ?>
2012-11-17 16:51:39 -05:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-edit-page">' . __ ( 'Edit your front page' ) . '</a>' , get_edit_post_link ( get_option ( 'page_on_front' ) ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-add-page">' . __ ( 'Add additional pages' ) . '</a>' , admin_url ( 'post-new.php?post_type=page' ) ); ?> </li>
2012-09-26 15:44:43 -04:00
< ? php elseif ( 'page' == get_option ( 'show_on_front' ) ) : ?>
2012-11-17 16:51:39 -05:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-edit-page">' . __ ( 'Edit your front page' ) . '</a>' , get_edit_post_link ( get_option ( 'page_on_front' ) ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-add-page">' . __ ( 'Add additional pages' ) . '</a>' , admin_url ( 'post-new.php?post_type=page' ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-write-blog">' . __ ( 'Add a blog post' ) . '</a>' , admin_url ( 'post-new.php' ) ); ?> </li>
2012-09-26 15:44:43 -04:00
< ? php else : ?>
2012-11-17 16:51:39 -05:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-write-blog">' . __ ( 'Write your first blog post' ) . '</a>' , admin_url ( 'post-new.php' ) ); ?> </li>
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-add-page">' . __ ( 'Add an About page' ) . '</a>' , admin_url ( 'post-new.php?post_type=page' ) ); ?> </li>
2012-09-26 15:44:43 -04:00
< ? php endif ; ?>
2012-11-17 16:51:39 -05:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-view-site">' . __ ( 'View your site' ) . '</a>' , home_url ( '/' ) ); ?> </li>
2011-11-18 19:42:22 -05:00
</ ul >
</ div >
2011-11-19 21:10:10 -05:00
< div class = " welcome-panel-column welcome-panel-last " >
2015-10-28 13:57:25 -04:00
< h3 >< ? php _e ( 'More Actions' ); ?> </h3>
2012-09-26 15:44:43 -04:00
< ul >
2014-03-17 15:47:15 -04:00
< ? php if ( current_theme_supports ( 'widgets' ) || current_theme_supports ( 'menus' ) ) : ?>
< li >< div class = " welcome-icon welcome-widgets-menus " >< ? php
if ( current_theme_supports ( 'widgets' ) && current_theme_supports ( 'menus' ) ) {
printf ( __ ( 'Manage <a href="%1$s">widgets</a> or <a href="%2$s">menus</a>' ),
admin_url ( 'widgets.php' ), admin_url ( 'nav-menus.php' ) );
} elseif ( current_theme_supports ( 'widgets' ) ) {
echo '<a href="' . admin_url ( 'widgets.php' ) . '">' . __ ( 'Manage widgets' ) . '</a>' ;
} else {
echo '<a href="' . admin_url ( 'nav-menus.php' ) . '">' . __ ( 'Manage menus' ) . '</a>' ;
}
?> </div></li>
< ? php endif ; ?>
< ? php if ( current_user_can ( 'manage_options' ) ) : ?>
2012-11-17 16:51:39 -05:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-comments">' . __ ( 'Turn comments on or off' ) . '</a>' , admin_url ( 'options-discussion.php' ) ); ?> </li>
2014-03-17 15:47:15 -04:00
< ? php endif ; ?>
2015-04-12 17:29:32 -04:00
< li >< ? php printf ( '<a href="%s" class="welcome-icon welcome-learn-more">' . __ ( 'Learn more about getting started' ) . '</a>' , __ ( 'https://codex.wordpress.org/First_Steps_With_WordPress' ) ); ?> </li>
2012-09-26 15:44:43 -04:00
</ ul >
2011-11-18 19:42:22 -05:00
</ div >
</ div >
2011-09-22 02:23:10 -04:00
</ div >
< ? php
}