嗯,是的,有很多更好的方法。
首先,您不应该直接请求内部文件wp-content
目录如果某个插件执行这样的请求,那么正确地保护和强化WordPress要困难得多。
当然,没有必要这样做。
WP具有用于AJAX请求的内置机制。您可以在此处阅读完整文档:https://codex.wordpress.org/AJAX_in_Plugins
所有AJAX请求都应发送到wp-admin/admin-ajax.php
. 通过这种方式,您可以使用以下挂钩高效地处理它们:
wp_ajax_my_action
wp_ajax_nopriv_my_action
因此,在插件PHP文件的某个地方,您可以执行以下操作:
// Enqueue your JS file
function my_enqueue($hook) {
wp_enqueue_script( \'ajax-script\', plugins_url( \'/js/my-script.js\', __FILE__ ), array(\'jquery\') );
// in JavaScript, object properties are accessed as ajax_object.ajax_url
wp_localize_script( \'ajax-script\', \'My_Ajax_bject\',
array( \'ajax_url\' => admin_url( \'admin-ajax.php\' )
);
}
add_action( \'admin_enqueue_scripts\', \'my_enqueue\' );
// AJAX request handler
function my_action() {
global $wpdb; // you can use global WP variables and so on
$whatever = intval( $_POST[\'whatever\'] );
$whatever += 10;
echo $whatever;
wp_die();
}
add_action( \'wp_ajax_my_action\', \'my_action\' );
在JS文件中:
jQuery(document).ready(function($) {
var data = {
\'action\': \'my_action\',
\'whatever\': 1
};
$.post(ajax_object.ajax_url, data, function(response) {
alert(\'Got this from the server: \' + response);
});
});