如何将ajax添加到wordpress主题

use*_*310 7 php mysql wordpress jquery

我有一个问题,我已经坚持了几天......我正在尝试使用一个简单的ajaxPOST函数将数据发送到MySQL数据库(而不是WP数据库).

此代码位于主题中的"single-post.php"内,因为必须在每个帖子之前检查它.

$.ajax({ url: 'library/functions/admin_checkuser.php',
     data: {action: userID},
     type: 'post',
     success: function(output) {
                  alert(output);
     }
});
Run Code Online (Sandbox Code Playgroud)

我只是将一个变量发送到"admin_checkuser.php"脚本,该脚本又调用另一个对数据库采取操作的脚本.

这是"admin_checkuser"的代码:

$userid = $_POST['action'];

echo $userid;//for testing
$oMySQL = new MySQL();
$query = "Select * FROM videotable WHERE uid = '$userid'";
$oMySQL->ExecuteSQL($query);
$bb = $oMySQL->iRecords;
$aa = $oMySQL->aResult;
echo $bb;

if ($bb == 0){
$query = "INSERT INTO videotable VALUES ('','$userid','true')";
$oMySQL->ExecuteSQL($query);
echo 'true';
    exit();

}else{
$sharing = mysql_result($aa,0,"share");
echo $sharing;
exit();

}
Run Code Online (Sandbox Code Playgroud)

但我不认为这些调用是通过脚本进行的.这些脚本在WordPress之外进行测试并且确实有效,所以它必须是WordPress中阻止ajax调用的东西.顺便说一句,我尝试将"admin_checkuser.php"放在许多不同的文件夹中但没有任何效果.

提前致谢.

Sto*_*osh 26

使用内置的Wordpress AJAX请求会好得多.

因此,在您的主题functions.php文件中,添加要调用的函数,例如:

function checkUser() {

    $userid = $_POST['user']; //validation also :)
    $oMySQL = new MySQL();
    $query = "Select * FROM videotable WHERE uid = '$userid'";
    $oMySQL->ExecuteSQL($query);
    $bb = $oMySQL->iRecords;
    $aa = $oMySQL->aResult;
    echo $bb;

    if ($bb == 0){
    $query = "INSERT INTO videotable VALUES ('','$userid','true')";
    $oMySQL->ExecuteSQL($query);
    echo 'true';
        exit();

    } else {
    $sharing = mysql_result($aa,0,"share");
    echo $sharing;
    exit();

    }
}
Run Code Online (Sandbox Code Playgroud)

之后,添加钩子连接到内置的AJAX系统

add_action('wp_ajax_check_user', 'checkUser');
add_action('wp_ajax_nopriv_check_user', 'checkUser');
Run Code Online (Sandbox Code Playgroud)

wp_ajax_nopriv_%s 允许从前端调用它.

然后,在您的javascript文件中,您只需触发您的ajax请求.

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) {
     alert(output);
 });
Run Code Online (Sandbox Code Playgroud)

如果ajaxurl未定义,则需要在模板文件中创建它,这样的东西应该可以工作,但还有其他方法.

add_action('wp_head','ajaxurl');
function ajaxurl() {
?>
<script type="text/javascript">
var ajaxurl = '<?php echo admin_url('admin-ajax.php'); ?>';
</script>
<?php
}
Run Code Online (Sandbox Code Playgroud)

wordpress的后端完成其余的工作.

它接受在AJAX请求中传递的动作,查找相应的`wp_ajax(_nopriv)_%s钩子,然后调用分配给钩子的函数.

它也将传入$_POST$_GET取决于AJAX请求的类型.

您可以阅读有关在Wordpress中使用AJAX的更多信息.


Goh*_*n67 3

您应该检查 ajax 调用的 url。

也许使用完整的 url 而不是相对的 url。

这可能是因为您的主题位置导致 url 不正确。我假设您的 ajax 代码位于您的主题文件夹中。

有一些 WordPress 函数可以获取主题目录。

例如,如果您在这个页面http://yourwebpage/test/,那么 ajax 调用将转到此处http://yourwebpage/test/library/functions/admin_checkuser.php。我认为这是不正确的位置。

这就是为什么您需要将绝对 url 添加到脚本中。如果它在你的主题中,你可以使用这个方法get_template_directory_uri()来获取模板目录。

请参阅此处: http: //codex.wordpress.org/Function_Reference/get_template_directory_uri