【问题标题】:How to add ajax to wordpress theme如何将 ajax 添加到 wordpress 主题
【发布时间】:2012-05-22 06:33:20
【问题描述】:

我有一个问题困扰了好几天... 我正在尝试使用简单的 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”放在许多不同的文件夹中,但没有任何效果。

提前致谢。

【问题讨论】:

  • 使用诸如 Firebug 的 net tab 或 HTTPFox 之类的东西来查看是否真的发生了 ajax 调用 - 或查看服务器的访问日志。

标签: php mysql wordpress jquery


【解决方案1】:

使用内置的 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 系统

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 钩子,然后调用分配给该钩子的函数。

它还会传入$_POST$_GET,具体取决于AJAX 请求的类型。

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

【讨论】:

  • 感谢您的精彩回答!我应该将“add_action”放在admin-ajax中的什么位置?把它扔在那里?
  • 那只是在主题的functions.php文件中,在函数定义的下方或下方保持有序!
  • 是的,我同意 Stoosh 的观点。最好走这条路。
  • 作为一项改进,我建议通过 wp_localize_script 输出 JavaScript 的 admin_url。例如。 add_action('wp_enqueue_scripts', 'localize_scripts');函数 localize_scripts() { wp_localize_script('jquery', 'urls', array('ajaxurl' => admin_url('admin-ajax.php') ));这将在您网站的&lt;head&gt; 中输出类似以下内容:
  • 我不得不更改最后一部分以定义 ajaxurl:function ajaxurl() { echo '&lt;script type="text/javascript"&gt; var ajaxurl = "'.admin_url("admin-ajax.php").'"; &lt;/script&gt;'; } add_action('wp_head','ajaxurl');
【解决方案2】:

您应该检查您的 ajax 调用的 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

【讨论】:

  • 10 倍!我在这上面浪费了很多时间
猜你喜欢
  • 1970-01-01
  • 2020-05-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-28
  • 1970-01-01
相关资源
最近更新 更多