这可能是一个很难回答的问题,但我很困惑。
我创建了一个简单的WP模板页面。通过ajax回调将表单更新到db的表单。在底部,我放置了add\\u action()语句,以便在表单通过WP-AJAX提交时触发回调函数。
我很快意识到回调函数(add\\u action()语句中的函数)没有启动。我的jQuery中“done”函数的响应代码是0。。。这意味着WP-AJAX无法挂接到回调函数。
add_action(\'wp_ajax_updateuserprofileAction\', \'updateuserprofileAction\');
add_action(\'wp_ajax_nopriv_updateuserprofileAction\', \'updateuserprofileAction\');
function updateuserprofileAction($args) {
$nonce = $_POST[\'send\'];
if ( !wp_verify_nonce($_POST[\'send\'],\'jch-ajax-update-userprofile\') ) {
echo $nonce;
die ( $nonce ); }
// Read the form values
$success = false;
$senderFirstName = isset( $_POST[\'senderFirstName\'] ) ? preg_replace( "/[^\\.\\-\\\' a-zA-Z0-9]/", "", $_POST[\'senderFirstName\'] ) : "";
$senderLastName = isset( $_POST[\'senderLastName\'] ) ? preg_replace( "/[^\\.\\-\\\' a-zA-Z0-9]/", "", $_POST[\'senderLastName\'] ) : "";
$senderEmail = isset( $_POST[\'senderEmail\'] ) ? preg_replace( "/[^\\.\\-\\_\\@a-zA-Z0-9]/", "", $_POST[\'senderEmail\'] ) : "";
// If all values exist, send the email
if ( $senderFirstName && $senderLastName && $senderEmail) {
global $current_user;
get_currentuserinfo();
update_user_meta( $current_user->ID, \'phone\', $_POST[\'senderPhone\']);
if($success == 1)
{
die(\'success\');
}
}
else {
die( \'ERROR\');
}
}
出于沮丧,我将回调函数和add\\u action语句移动到一个插件中,该插件也使用WP-AJAX并立即。。。它起作用了。
所以我的问题是:为什么?为什么不能将add\\u action()语句放入模板页?或者换一种说法:在哪里可以放置add\\u action()的“规则”是什么?
理想情况下,我希望将add\\u action()和回调函数与模板页保持在同一个文件中。有没有办法做到这一点?