php - 如何将ajax添加到wordpress主题

标签 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);
     }
});

我只是将一个变量发送到“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();

}

但我不认为调用会通过脚本。 这些脚本在 WordPress 之外进行了测试并且确实有效,因此一定是 WordPress 中的某些东西阻止了 ajax 调用。 顺便说一句,我尝试将“admin_checkuser.php”放在许多不同的文件夹中,但没有任何效果。

提前致谢。

最佳答案

最好使用内置的 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();

    }
}

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

add_action('wp_ajax_check_user', 'checkUser');
add_action('wp_ajax_nopriv_check_user', 'checkUser');

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

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

$.post(ajaxurl, { action: 'check_user', user: userId }, function(output) {
     alert(output);
 });

如果 ajaxurl 未定义,您将需要在模板文件中创建它,类似这样的方法应该可行,但还有其他方法。

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

剩下的由 wordpress 后端完成。

它获取 AJAX 请求中传递的操作,查找相应的 `wp_ajax(_nopriv)_%s Hook ,然后调用分配给该 Hook 的函数。

它还会根据 AJAX 请求的类型传入 $_POST$_GET

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

关于php - 如何将ajax添加到wordpress主题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10589018/

相关文章:

mysql - 在mysql中创建一个简单的函数

wordpress - 在wordpress中编辑帖子时如何设置指定的字体系列?

php - WooCommerce:更改删除购物车中的优惠券链接

php - FB Messenger webview X-Frame-Options : Deny ruining webview

php - 错误 401 Paypal

c# - 使用 lambda 函数过滤掉重复的(基于所选列)查询结果

mysql - 如何使 SQL 查询在所选日期和现在之间耗时?

php - 如何使用 .htaccess/Apache2 在子目录中配置 wordpress 应用程序和简单的 php 应用程序?

php - 我如何在查询之间进行此操作以在同一列中查找不同的值?

php - 从 paypal 付款返回站点期间 mysql 插入查询的问题