2006-03-28 20:51:55 -05:00
|
|
|
<?php
|
2008-08-11 16:26:31 -04:00
|
|
|
/**
|
2016-07-09 20:51:30 -04:00
|
|
|
* WordPress Ajax Process Execution
|
2008-08-11 16:26:31 -04:00
|
|
|
*
|
|
|
|
* @package WordPress
|
|
|
|
* @subpackage Administration
|
2012-01-23 14:31:15 -05:00
|
|
|
*
|
2015-04-12 17:29:32 -04:00
|
|
|
* @link https://codex.wordpress.org/AJAX_in_Plugins
|
2008-08-11 16:26:31 -04:00
|
|
|
*/
|
|
|
|
|
|
|
|
/**
|
2016-07-09 20:51:30 -04:00
|
|
|
* Executing Ajax process.
|
2008-08-11 16:26:31 -04:00
|
|
|
*
|
2010-09-04 22:45:39 -04:00
|
|
|
* @since 2.1.0
|
2008-08-11 16:26:31 -04:00
|
|
|
*/
|
2012-01-23 14:12:04 -05:00
|
|
|
define( 'DOING_AJAX', true );
|
2014-05-18 16:42:16 -04:00
|
|
|
if ( ! defined( 'WP_ADMIN' ) ) {
|
|
|
|
define( 'WP_ADMIN', true );
|
|
|
|
}
|
2008-01-04 18:34:33 -05:00
|
|
|
|
2012-09-25 11:55:32 -04:00
|
|
|
/** Load WordPress Bootstrap */
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once dirname( __DIR__ ) . '/wp-load.php';
|
2012-09-25 11:55:32 -04:00
|
|
|
|
2016-02-25 07:53:27 -05:00
|
|
|
/** Allow for cross-domain requests (from the front end). */
|
2012-09-25 11:55:32 -04:00
|
|
|
send_origin_headers();
|
|
|
|
|
2019-07-16 21:11:56 -04:00
|
|
|
header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
|
|
|
|
header( 'X-Robots-Tag: noindex' );
|
|
|
|
|
2020-01-28 19:45:18 -05:00
|
|
|
// Require an action parameter.
|
2017-11-30 18:11:00 -05:00
|
|
|
if ( empty( $_REQUEST['action'] ) ) {
|
2017-07-22 20:21:42 -04:00
|
|
|
wp_die( '0', 400 );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2010-02-17 07:26:47 -05:00
|
|
|
|
2012-01-23 14:31:15 -05:00
|
|
|
/** Load WordPress Administration APIs */
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/includes/admin.php';
|
2012-01-23 14:31:15 -05:00
|
|
|
|
|
|
|
/** Load Ajax Handlers for WordPress Core */
|
2020-02-06 01:33:11 -05:00
|
|
|
require_once ABSPATH . 'wp-admin/includes/ajax-actions.php';
|
2010-05-03 16:26:11 -04:00
|
|
|
|
2012-01-23 14:12:04 -05:00
|
|
|
send_nosniff_header();
|
2012-11-27 11:17:53 -05:00
|
|
|
nocache_headers();
|
2011-09-27 16:52:07 -04:00
|
|
|
|
2013-10-24 18:59:20 -04:00
|
|
|
/** This action is documented in wp-admin/admin.php */
|
2012-01-23 14:12:04 -05:00
|
|
|
do_action( 'admin_init' );
|
2011-09-27 16:52:07 -04:00
|
|
|
|
2012-03-15 09:20:00 -04:00
|
|
|
$core_actions_get = array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'fetch-list',
|
|
|
|
'ajax-tag-search',
|
|
|
|
'wp-compression-test',
|
|
|
|
'imgedit-preview',
|
|
|
|
'oembed-cache',
|
|
|
|
'autocomplete-user',
|
|
|
|
'dashboard-widgets',
|
|
|
|
'logged-in',
|
2019-09-23 13:47:56 -04:00
|
|
|
'rest-nonce',
|
2012-03-15 09:20:00 -04:00
|
|
|
);
|
2011-09-27 16:52:07 -04:00
|
|
|
|
2012-01-23 14:12:04 -05:00
|
|
|
$core_actions_post = array(
|
2017-11-30 18:11:00 -05:00
|
|
|
'oembed-cache',
|
|
|
|
'image-editor',
|
|
|
|
'delete-comment',
|
|
|
|
'delete-tag',
|
|
|
|
'delete-link',
|
|
|
|
'delete-meta',
|
|
|
|
'delete-post',
|
|
|
|
'trash-post',
|
|
|
|
'untrash-post',
|
|
|
|
'delete-page',
|
|
|
|
'dim-comment',
|
|
|
|
'add-link-category',
|
|
|
|
'add-tag',
|
|
|
|
'get-tagcloud',
|
|
|
|
'get-comments',
|
|
|
|
'replyto-comment',
|
|
|
|
'edit-comment',
|
|
|
|
'add-menu-item',
|
|
|
|
'add-meta',
|
|
|
|
'add-user',
|
|
|
|
'closed-postboxes',
|
|
|
|
'hidden-columns',
|
|
|
|
'update-welcome-panel',
|
|
|
|
'menu-get-metabox',
|
|
|
|
'wp-link-ajax',
|
|
|
|
'menu-locations-save',
|
|
|
|
'menu-quick-search',
|
|
|
|
'meta-box-order',
|
|
|
|
'get-permalink',
|
|
|
|
'sample-permalink',
|
|
|
|
'inline-save',
|
|
|
|
'inline-save-tax',
|
|
|
|
'find_posts',
|
|
|
|
'widgets-order',
|
|
|
|
'save-widget',
|
|
|
|
'delete-inactive-widgets',
|
|
|
|
'set-post-thumbnail',
|
|
|
|
'date_format',
|
|
|
|
'time_format',
|
|
|
|
'wp-remove-post-lock',
|
|
|
|
'dismiss-wp-pointer',
|
|
|
|
'upload-attachment',
|
|
|
|
'get-attachment',
|
|
|
|
'query-attachments',
|
|
|
|
'save-attachment',
|
|
|
|
'save-attachment-compat',
|
|
|
|
'send-link-to-editor',
|
|
|
|
'send-attachment-to-editor',
|
|
|
|
'save-attachment-order',
|
2019-09-03 21:11:54 -04:00
|
|
|
'media-create-image-subsizes',
|
2017-11-30 18:11:00 -05:00
|
|
|
'heartbeat',
|
|
|
|
'get-revision-diffs',
|
|
|
|
'save-user-color-scheme',
|
|
|
|
'update-widget',
|
|
|
|
'query-themes',
|
|
|
|
'parse-embed',
|
|
|
|
'set-attachment-thumbnail',
|
|
|
|
'parse-media-shortcode',
|
|
|
|
'destroy-sessions',
|
|
|
|
'install-plugin',
|
|
|
|
'update-plugin',
|
|
|
|
'crop-image',
|
|
|
|
'generate-password',
|
|
|
|
'save-wporg-username',
|
|
|
|
'delete-plugin',
|
|
|
|
'search-plugins',
|
|
|
|
'search-install-plugins',
|
|
|
|
'activate-plugin',
|
|
|
|
'update-theme',
|
|
|
|
'delete-theme',
|
|
|
|
'install-theme',
|
|
|
|
'get-post-thumbnail-html',
|
|
|
|
'get-community-events',
|
|
|
|
'edit-theme-plugin-file',
|
2018-03-28 15:28:31 -04:00
|
|
|
'wp-privacy-export-personal-data',
|
2018-04-18 18:30:22 -04:00
|
|
|
'wp-privacy-erase-personal-data',
|
Admin: Introduce the Site Health screens.
The Site Health tool serves two purposes:
- Provide site owners with information to improve the performance, reliability, and security of their site.
- Collect comprehensive debug information about the site.
By encouraging site owners to maintain their site and adhere to modern best practices, we ultimately improve the software hygeine of both the WordPress ecosystem, and the open internet as a whole.
Props Clorith, hedgefield, melchoyce, xkon, karmatosed, jordesign, earnjam, ianbelanger, wpscholar, desrosj, pedromendonca, peterbooker, jcastaneda, garyj, soean, pento, timothyblynjacobs, zodiac1978, dgroddick, garrett-eclipse, netweb, tobifjellner, pixolin, afercia, joedolson, birgire.
See #46573.
Built from https://develop.svn.wordpress.org/trunk@44986
git-svn-id: http://core.svn.wordpress.org/trunk@44817 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2019-03-22 23:55:53 -04:00
|
|
|
'health-check-site-status-result',
|
|
|
|
'health-check-dotorg-communication',
|
|
|
|
'health-check-is-in-debug-mode',
|
|
|
|
'health-check-background-updates',
|
|
|
|
'health-check-loopback-requests',
|
2019-04-12 15:24:51 -04:00
|
|
|
'health-check-get-sizes',
|
Security: Add user interface to auto-update themes and plugins.
Building on core update mechanisms, this adds the ability to enable automatic updates for themes and plugins to the WordPress admin.
Fixes: #50052.
Props: afercia, afragen, audrasjb, azaozz, bookdude13, davidperonne, desrosj, gmays, gmays, javiercasares, karmatosed, knutsp, mapk, mukesh27, netweb, nicolaskulka, nielsdeblaauw, paaljoachim, passoniate, pbiron, pedromendonca, whodunitagency, whyisjake, wpamitkumar, and xkon.
Built from https://develop.svn.wordpress.org/trunk@47835
git-svn-id: http://core.svn.wordpress.org/trunk@47611 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2020-05-20 14:49:09 -04:00
|
|
|
'toggle-auto-updates',
|
Users: enable admins to send users a reset password link.
Add a feature so Admins can send users a 'password reset' email. This doesn't change the password or force a password change. It only emails the user the password reset link.
The feature appears in several places:
* A "Send Reset Link" button on user profile screen.
* A "Send password reset" option in the user list bulk action dropdown.
* A "Send password reset" quick action when hovering over a username in the user list.
Props Ipstenu, DrewAPicture, eventualo, wonderboymusic, knutsp, ericlewis, afercia, JoshuaWold, johnbillion, paaljoachim, hedgefield.
Fixes #34281.
Built from https://develop.svn.wordpress.org/trunk@50129
git-svn-id: http://core.svn.wordpress.org/trunk@49808 1a063a9b-81f0-0310-95a4-ce76da25c4cd
2021-02-01 17:13:03 -05:00
|
|
|
'send-password-reset',
|
2012-01-23 14:12:04 -05:00
|
|
|
);
|
2011-10-10 19:31:36 -04:00
|
|
|
|
2020-01-28 19:45:18 -05:00
|
|
|
// Deprecated.
|
2020-10-14 22:00:08 -04:00
|
|
|
$core_actions_post_deprecated = array(
|
|
|
|
'wp-fullscreen-save-post',
|
|
|
|
'press-this-save-post',
|
|
|
|
'press-this-add-category',
|
|
|
|
'health-check-dotorg-communication',
|
|
|
|
'health-check-is-in-debug-mode',
|
|
|
|
'health-check-background-updates',
|
|
|
|
'health-check-loopback-requests',
|
|
|
|
);
|
2017-11-30 18:11:00 -05:00
|
|
|
$core_actions_post = array_merge( $core_actions_post, $core_actions_post_deprecated );
|
2015-06-01 13:38:29 -04:00
|
|
|
|
2012-01-23 14:31:15 -05:00
|
|
|
// Register core Ajax calls.
|
2020-04-04 23:02:11 -04:00
|
|
|
if ( ! empty( $_GET['action'] ) && in_array( $_GET['action'], $core_actions_get, true ) ) {
|
2012-01-23 14:12:04 -05:00
|
|
|
add_action( 'wp_ajax_' . $_GET['action'], 'wp_ajax_' . str_replace( '-', '_', $_GET['action'] ), 1 );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2011-10-10 19:31:36 -04:00
|
|
|
|
2020-04-04 23:02:11 -04:00
|
|
|
if ( ! empty( $_POST['action'] ) && in_array( $_POST['action'], $core_actions_post, true ) ) {
|
2012-01-23 14:12:04 -05:00
|
|
|
add_action( 'wp_ajax_' . $_POST['action'], 'wp_ajax_' . str_replace( '-', '_', $_POST['action'] ), 1 );
|
2017-11-30 18:11:00 -05:00
|
|
|
}
|
2011-10-10 19:31:36 -04:00
|
|
|
|
2013-02-24 21:32:22 -05:00
|
|
|
add_action( 'wp_ajax_nopriv_heartbeat', 'wp_ajax_nopriv_heartbeat', 1 );
|
2011-10-10 19:31:36 -04:00
|
|
|
|
2017-12-01 06:36:50 -05:00
|
|
|
$action = ( isset( $_REQUEST['action'] ) ) ? $_REQUEST['action'] : '';
|
|
|
|
|
2013-09-21 01:32:09 -04:00
|
|
|
if ( is_user_logged_in() ) {
|
2017-10-18 17:01:49 -04:00
|
|
|
// If no action is registered, return a Bad Request response.
|
2017-12-01 06:36:50 -05:00
|
|
|
if ( ! has_action( "wp_ajax_{$action}" ) ) {
|
2017-10-18 17:01:49 -04:00
|
|
|
wp_die( '0', 400 );
|
|
|
|
}
|
|
|
|
|
2013-09-21 01:53:09 -04:00
|
|
|
/**
|
2016-07-09 20:51:30 -04:00
|
|
|
* Fires authenticated Ajax actions for logged-in users.
|
2013-09-21 01:32:09 -04:00
|
|
|
*
|
2017-12-01 06:36:50 -05:00
|
|
|
* The dynamic portion of the hook name, `$action`, refers
|
|
|
|
* to the name of the Ajax action callback being fired.
|
2013-09-21 01:53:09 -04:00
|
|
|
*
|
|
|
|
* @since 2.1.0
|
|
|
|
*/
|
2017-12-01 06:36:50 -05:00
|
|
|
do_action( "wp_ajax_{$action}" );
|
2013-09-21 01:32:09 -04:00
|
|
|
} else {
|
2017-10-18 17:01:49 -04:00
|
|
|
// If no action is registered, return a Bad Request response.
|
2017-12-01 06:36:50 -05:00
|
|
|
if ( ! has_action( "wp_ajax_nopriv_{$action}" ) ) {
|
2017-10-18 17:01:49 -04:00
|
|
|
wp_die( '0', 400 );
|
|
|
|
}
|
|
|
|
|
2013-09-21 01:53:09 -04:00
|
|
|
/**
|
2016-07-09 20:51:30 -04:00
|
|
|
* Fires non-authenticated Ajax actions for logged-out users.
|
2013-09-21 01:32:09 -04:00
|
|
|
*
|
2017-12-01 06:36:50 -05:00
|
|
|
* The dynamic portion of the hook name, `$action`, refers
|
|
|
|
* to the name of the Ajax action callback being fired.
|
2013-09-21 01:32:09 -04:00
|
|
|
*
|
2013-09-21 01:53:09 -04:00
|
|
|
* @since 2.8.0
|
|
|
|
*/
|
2017-12-01 06:36:50 -05:00
|
|
|
do_action( "wp_ajax_nopriv_{$action}" );
|
2013-09-21 01:32:09 -04:00
|
|
|
}
|
2020-01-28 19:45:18 -05:00
|
|
|
// Default status.
|
2017-10-18 17:01:49 -04:00
|
|
|
wp_die( '0' );
|