如何在ajax php文件中使用wordpress函数

时间:2014-05-16 00:56:06

标签: php ajax wordpress

我正在制作WordPress模板,在wordpress 3.9中使用mytemp.php。在这里我可以使用wordpress功能。例如,下面的工作非常完美。

    $(document).ready(function() {
        alert(<?php echo get_current_user_id() ?>);
    }

但是,此模板文件也会调用一些ajax脚本,具体取决于用户输入。它在那里不起作用。例如,下面的语句返回致命错误“调用未定义函数get_current_user_id”

    $sql = 'SELECT x,y FROM table WHERE user_id = ' . get_current_user_id();

我猜,我需要告诉ajax脚本包含一些wordpress文件或一些全局变量,但我不知道如何。

4 个答案:

答案 0 :(得分:1)

我解决了。我需要做的就是在下面包括声明。

   include '../../../../wp-load.php';

通过包含它,它开始识别函数get_current_user_id()

答案 1 :(得分:1)

尝试在ajax文件中包含 wp-load.php 文件,包含此文件后wordpress函数在您的ajax文件中正常工作,或者您需要编写一个插件,如 ajax.php ,然后将此插件文件用于您的ajax文件。

之后,您可以访问wp函数。

希望它有所帮助。

答案 2 :(得分:0)

试试这个。我刚刚使用函数get_current_user_id();

使用这种样式的sql语法回答了一个问题
$sql = "SELECT x,y FROM table WHERE user_id = %d", get_current_user_id();

答案 3 :(得分:0)

另一个解决方案是在您的ajax脚本和发布到它的javascript之间建立合同。 因此,在您的调用php脚本中,您可以在标题中设置一些JSON:

<script>
  <?php echo "wp-data = {current_user_id: " . get_current_user_id() "}"; ?>
</script>

然后把它放在你的ajax电话中:

$.ajax({
   url: "http://yourdomain.com/process_wp_ajax.php",
   method: "post",
   data: {
      . . . //your post data
      current_user_id: wp-data.current_user_id;
   })
   .success(function(response) {})
   .fail(function(response) {} )
   .complent(function(response, status) {};

您的接收应该期望“current_user_id”在POST(或GET)上。

这涉及更多工作,但每次进行ajax调用时,您都可以避免加载WP框架。

如果要设置多个值,请不要使用上面的php。改为设置一个对象,只需在其上调用json_encode:

<?php
    wp_object = (object) array('wp-val1' => wp_func1(), 'wp-val2' => wp_func2());
?>
<script>
    <?php echo "wp-data =" . json_encode(wp_object) . ";"; ?>
</script>

DRY,只需直接在你的ajax中传递wp-data对象:

$.ajax({
  url: "http://yourdomain.com/process_wp_ajax.php",
  method: "post",
  data: { 
     . . . 
     wp-object: wp-data,
   }
   . . . 

因此,在您的调用脚本中,您最终会到达:

$sql = "SELECT x,y FROM table WHERE user_id = %d", $_POST['current_user_id']

或`$ _POST ['wp-object'] ['current_user_id']

(当然你会在此之前在三元组中设置$ _POST值吗?