我正在制作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文件或一些全局变量,但我不知道如何。
答案 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 = "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值吗?