我正在尝试学习如何以正确的方式在 WordPress 中使用 Ajax。 这是我学到的:
步骤1: 创建 Ajax 文件并使用注册它 wp_enqueue_script
.
function wpdocs_theme_name_scripts() {
wp_enqueue_script( 'script-name', get_stylesheet_directory_uri() . '/js/ajxfile.js', array(), '1.0.0', true );
}
add_action( 'wp_enqueue_scripts', 'wpdocs_theme_name_scripts' );
第2步: 在 ajxfile.js 中像这样使用 ajax:
$( document ).ready(function() {
$('#id').on('click',function (e){
alert("Its Working");
var up = 1;
var id = $( "#id" ).data( "user_id" );
$.ajax({
type: "POST",
url: "runcode.php",
data: {up:up, id:id},
success:
function(result){
alert("result");
}
});
});
});
第 3 步: 在页面中添加 HTML:
<a href="#" id="id" data-user_id="<?php echo $user_id = get_current_user_id(); ?>"
data-post_id="<?php echo $post_id = get_the_ID(); ?>">
<i class="fa fa-thumbs-up" aria-hidden="true"></i>
</a>
每次有人点击链接时,它都会成功提醒“它正在工作”声明。 现在我想检索该数据并将其添加到用户元中。 但这让我感到困惑。 那个 nonce 是什么东西? 谁能指导我正确的方向?
现在我懂了! WordPress 真是太棒了。 也谢谢你 knif3r,你的建议对我很有帮助。 我试图用我的话来解释它。 如果我错了,请纠正我。
什么是随机数?
Nonce 类似于安全哈希,可以防止攻击和错误。 它创建唯一标识符来检查 ajax 请求是否来自网站。 用 WordPress 的话
nonce 是一个“使用一次的数字”,有助于保护 URL 和表单免受某些类型的滥用、恶意或其他形式的滥用。 WordPress 随机数不是数字,而是由数字和字母组成的散列。 它们也不是只使用一次,而是有一个有限的“生命周期”,之后它们就会过期。
如何使用它?
-
首先我们需要正确使用添加我们的js文件
wp_enqueue_script()
. 是这样的:function wpdocs_theme_name_scripts() { wp_enqueue_script( 'script-name', get_stylesheet_directory_uri(). '/js/ajxfile.js', array(), '1.0.0', true ); } add_action( 'wp_enqueue_scripts', 'wpdocs_theme_name_scripts' );
我们注册我们的 ajxfile.js
文件名称 script-name
. 现在它加载到我们 wordpress 的所有页面上。
-
现在我们需要使用
wp_localize_script()
声明我们的变量,在这里我们添加我们的随机数以在函数中使用它。function wpdocs_theme_name_scripts() { wp_enqueue_script( 'script-name', get_stylesheet_directory_uri() . '/js/ajxfile.js', array(), '1.0.0', true ); wp_localize_script('script-name', 'ajax_var', array( 'url' => admin_url('admin-ajax.php'), 'nonce' => wp_create_nonce('ajax-nonce') )); }
我们成功注册并本地化了我们的脚本。
-
请务必在您的 ajax 调用中传递 nonce 数据
ajxfile.js
:/* global ajax_var */ $.ajax( { url: ajax_var.url, type: 'post', data: { action: 'custom_script_name', nonce: ajax_var.nonce, // pass the nonce here moredata: 'whatever', }, success( data ) { if ( data ) { // etc... } }, } );
-
现在我们想将我们的函数与我们的脚本绑定。 所以我用这个
add_action('wp_ajax_nopriv_custom_script_name', 'custom_php_ajax_function'); add_action('wp_ajax_custom_script_name', 'custom_php_ajax_function');
我们正在使用 wp_ajax_nopriv_
& wp_ajax_
用 wordpress 钩子绑定我们的函数。 第二个钩子在用户登录时触发,第一个钩子在用户未登录时触发。
-
我们的功能是这样的
function custom_php_ajax_function() { // Check for nonce security if ( ! wp_verify_nonce( $_POST['nonce'], 'ajax-nonce' ) ) { die ( 'Busted!'); } }
我们的函数将检查 ajax 数据是否正在发送 nonce
隐藏数据与其他参数。 如果没有,那么它将引发错误。 这确实有助于防止 ajax 攻击。 Nonce
data 是一个隐藏值,必须需要和其他参数一起发送。
如何检查它是否工作?
- 消除
'nonce' => wp_create_nonce('ajax-nonce')
从
wpdocs_theme_name_scripts()
并点击链接。 它会显示一个错误。 - 现在从我们的功能中删除安全检查并单击链接。 它会起作用。
这表明如果没有随机数数据,我们的随机数安全检查功能将永远无法工作。 它是隐藏的,所以没有人可以使用它。 如果没有人知道,那么无论他们运行该 ajax 多少次,我们的功能都不会响应他们。
抱歉我的英语不好和解释不好。 只是想帮忙。 如果我遗漏了什么或做错了什么,请告诉我。

