我正在开发一个使用自定义模板/主题的wordpress网站,但我遇到了麻烦。我想使用Ajax在用户单击按钮时调用函数。在一个页面上,我有一个这样的按钮:
<p class=\'form-submit\'>
<input name=\'message_read\' type=\'submit\' class=\'submit button mark-as-read\' value= \'Mark as read\' />
</p>
我有这样一个jQuery/Ajax函数:
jQuery(document).ready(function() {
jQuery(".mark-as-read").click(function () {
console.log(\'The function is hooked up\');
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: \'mark_message_as_read\',
},
success: function (output) {
console.log(output);
}
});
});
});
上述功能位于
wp-content/themes/my-theme/js/wp_ajax_calls.js
. 我将脚本添加到网站,如下所示:
1) 我将此添加到我的函数中。php文件:
wp_enqueue_script( \'ajax calls\', get_template_directory_uri() .\'/js/wp_ajax_calls.js\', array(\'jquery\'), \'1.0\', true);
2)我将脚本包含在标题中。
<script type="text/javascript" src="https://mysite//wp-content/themes/twentyfifteen/js/wp_ajax_calls.js"></script>
当我按原样点击按钮时,控制台。日志语句出现。据我所知,我希望我的ajax函数调用一个php函数,该函数将允许我使用$wpdb。我在函数中有这个。php:
function mark_message_as_read() {
global $wpdb;
// do stuff.
}
这就是我感到困惑的地方。我有两个主要问题:
1) I think I am supposed to have some add_action() \'s somewhere, but I don\'t know where to put them and I also don\'t know what hook I should use.
2) Additionally, I want to be able to pass data (the message id) to the php function for my db query. How do I pass an argument to that function?
我不想用这样的东西
if( isset($_POST[\'message_whatever\']) ) twentyfifteen_message_whatever();
因为我设置消息的方式。
如果需要,很乐意提供更多信息。提前感谢您的帮助!!
最合适的回答,由SO网友:Mike 整理而成
创建子主题,这样就不会弄乱现有主题的代码,因为下次更新主题时,可能会丢失所有更改(请参阅Child Themes)
以下是如何将值传递给ajax请求:
jQuery(document).ready(function() {
jQuery(".mark-as-read").click(function () {
console.log(\'The function is hooked up\');
jQuery.ajax({
type: "POST",
url: "/wp-admin/admin-ajax.php",
data: {
action: \'mark_message_as_read\',
// add your parameters here
message_id: $(\'.your-selector\').val()
},
success: function (output) {
console.log(output);
}
});
});
});
您也可以对nonce进行一些研究,为您的应用程序添加一个安全层:
https://codex.wordpress.org/WordPress_Nonces最后,处理请求的PHP代码(这里也应该处理实际代码中的nonce):
// register the ajax action for authenticated users
add_action(\'wp_ajax_mark_message_as_read\', \'mark_message_as_read\');
// register the ajax action for unauthenticated users
add_action(\'wp_ajax_nopriv_mark_message_as_read\', \'mark_message_as_read\');
// handle the ajax request
function mark_message_as_read() {
$message_id = $_REQUEST[\'message_id\'];
// add your logic here...
// in the end, returns success json data
wp_send_json_success([/* some data here */]);
// or, on error, return error json data
wp_send_json_error([/* some data here */]);
}