wp_ajax_activate_plugin()
云策文档标注
概述
wp_ajax_activate_plugin() 是一个 WordPress AJAX 处理函数,用于通过 AJAX 请求激活插件。它检查用户权限、验证输入,并返回 JSON 响应以指示成功或失败。
关键要点
- 函数通过 AJAX 处理插件激活请求,确保安全性和用户权限验证。
- 使用 check_ajax_referer() 验证 AJAX 请求,防止外部攻击。
- 检查必需参数(name、slug、plugin)是否为空,否则返回错误。
- 验证当前用户是否具有 activate_plugin 权限,否则返回错误。
- 检查插件是否已激活,避免重复操作。
- 调用 activate_plugin() 激活插件,处理可能的错误并返回 JSON 响应。
- 使用 wp_send_json_error() 和 wp_send_json_success() 发送 JSON 响应。
代码示例
function wp_ajax_activate_plugin() {
check_ajax_referer( 'updates' );
if ( empty( $_POST['name'] ) || empty( $_POST['slug'] ) || empty( $_POST['plugin'] ) ) {
wp_send_json_error(
array(
'slug' => '',
'pluginName' => '',
'plugin' => '',
'errorCode' => 'no_plugin_specified',
'errorMessage' => __( 'No plugin specified.' ),
)
);
}
$status = array(
'activate' => 'plugin',
'slug' => wp_unslash( $_POST['slug'] ),
'pluginName' => wp_unslash( $_POST['name'] ),
'plugin' => wp_unslash( $_POST['plugin'] ),
);
if ( ! current_user_can( 'activate_plugin', $status['plugin'] ) ) {
$status['errorMessage'] = __( 'Sorry, you are not allowed to activate plugins on this site.' );
wp_send_json_error( $status );
}
if ( is_plugin_active( $status['plugin'] ) ) {
$status['errorMessage'] = sprintf(
/* translators: %s: Plugin name. */
__( '%s is already active.' ),
$status['pluginName']
);
}
$activated = activate_plugin( $status['plugin'] );
if ( is_wp_error( $activated ) ) {
$status['errorMessage'] = $activated->get_error_message();
wp_send_json_error( $status );
}
wp_send_json_success( $status );
}注意事项
- 此函数在 WordPress 6.5.0 版本中引入,开发者需确保使用兼容版本。
- 依赖多个核心函数如 is_plugin_active()、activate_plugin() 等,需正确包含相关文件。
- AJAX 请求必须包含正确的 nonce(通过 'updates' 参数)以确保安全性。
- 错误处理使用 is_wp_error() 检查 activate_plugin() 的返回值,开发者应遵循此模式处理潜在错误。
原文内容
Handles activating a plugin via AJAX.
Source
function wp_ajax_activate_plugin() {
check_ajax_referer( 'updates' );
if ( empty( $_POST['name'] ) || empty( $_POST['slug'] ) || empty( $_POST['plugin'] ) ) {
wp_send_json_error(
array(
'slug' => '',
'pluginName' => '',
'plugin' => '',
'errorCode' => 'no_plugin_specified',
'errorMessage' => __( 'No plugin specified.' ),
)
);
}
$status = array(
'activate' => 'plugin',
'slug' => wp_unslash( $_POST['slug'] ),
'pluginName' => wp_unslash( $_POST['name'] ),
'plugin' => wp_unslash( $_POST['plugin'] ),
);
if ( ! current_user_can( 'activate_plugin', $status['plugin'] ) ) {
$status['errorMessage'] = __( 'Sorry, you are not allowed to activate plugins on this site.' );
wp_send_json_error( $status );
}
if ( is_plugin_active( $status['plugin'] ) ) {
$status['errorMessage'] = sprintf(
/* translators: %s: Plugin name. */
__( '%s is already active.' ),
$status['pluginName']
);
}
$activated = activate_plugin( $status['plugin'] );
if ( is_wp_error( $activated ) ) {
$status['errorMessage'] = $activated->get_error_message();
wp_send_json_error( $status );
}
wp_send_json_success( $status );
}
Changelog
| Version | Description |
|---|---|
| 6.5.0 | Introduced. |