【问题标题】:Using Javascript Variables as WP_Query Parameters使用 Javascript 变量作为 WP_Query 参数
【发布时间】:2016-03-12 00:18:48
【问题描述】:

我在尝试将 Javascript 变量用作 WordPress 查询参数时遇到了一些问题。

我正在使用 AJAX 发布请求向 Wordpress 发送一个 post_ids 的 Javascript 数组。

$.post('url', { data: requestIds }, function(response) { console.log(response) });

我基本上是在尝试将 'requestIds' 的 Javascript 数组作为 post__in WP_Query 参数传递。

$COMPARISON_QUERY = new WP_Query(array(
    'post_type' => array('Post'),
    'post__in' => // this is where the array would be passed as a parameter
));

这是处理请求的 PHP:

$response_object = DecodeJSONString($_POST['data']);

function DecodeJSONString($string) {
    $decoded_string = json_decode($string);
    return $decoded_string; // this would be the query parameter
}

感谢您的任何反馈!

【问题讨论】:

  • 那你有什么问题??
  • 好吧,为了使用 WP_Query 我需要包括以下内容:define('WP_USE_THEMES', false); require_once('../../../wp-load.php');但是,这样做会破坏 json_decode 函数,使数组的值为“NULL”。这意味着当我尝试将其用作参数时,我只是将 NULL 作为 post__in 传递。
  • var_dump($_POST) 并编辑您的问题以显示输出 - 可能您发送的是常规键值对,而不是 json
  • 感谢 Connor - 您能否确认 var_dump 输出是否适用于定义和要求行是否包含在内?您的函数会中断似乎很奇怪 - 但也许已经有一个具有该名称的函数 - 您可以尝试直接调用 json_decode 吗?
  • 永远不要使用require_once('../../../wp-load.php') 这是一个老生常谈的话题,应该贴在某个地方:ottopress.com/2010/dont-include-wp-load-pleaseottopress.com/2010/…

标签: javascript php jquery ajax wordpress


【解决方案1】:

您应该使用WordPress ajax functions 进行ajax 请求,而不是直接发布到您的php 文件中。

假设您正在使用的自定义 php 文件名为 process_post.php。不要直接发布到您的自定义 php 文件,而是发布到 admin-ajax.php 并在您的 functions.php 文件中处理该帖子。

在您的前端页面上:

<script>
    var ajaxUrl = "<?php echo admin_url('admin-ajax.php'); ?>"; // This will get the approriate ajax url using wordpress functionality
    $.post(  ajaxUrl, 
         { 
            'action': 'my_action',
            'requestIds': requestIds // Assuming you have your requestIds var populated already 
         },
         function(response) {
           console.log(response)
         });
</script>

现在在 php 方面,关于注册您的 ajax 操作 my_action,有一种棘手/不直观的部分。这是一种命名约定,在wp_ajaxwp_ajax_no_priv 之后附加操作名称my_action。请注意,如果普通用户不应该触摸它,您不会将您的操作与wp_ajax_no_priv 挂钩。

第一个参数是命名约定,第二个参数是你的自定义函数名:

<?php // in functions.php
add_action( 'wp_ajax_my_action', 'my_action_callback' );
add_action( 'wp_ajax_nopriv_my_action', 'my_action_callback' );
?>

现在您已设置好 ajax 操作!现在创建您的回调函数,也在functions.php 中。我通常只是从这一点包含单独的 php 文件,如下所示:

<?php // Still in functions.php
function my_action_callback(){
    include_once('my_code.php');
}
?>

现在您已经正确设置了所有这些,您不再需要包含不同的核心 WordPress 类!这是以这种方式进行所有麻烦设置的主要原因。

my_code.php 在我的示例中将驻留在您的主题中:

<?php
$COMPARISON_QUERY = new WP_Query(array(
    'post_type' => array('Post'),
    'post__in' => json_decode( $_POST['requestIds'] ),
));

【讨论】:

  • 谢谢!我设法以与您在上面发布的方法非常相似的方法解决了我的问题!虽然,我不得不本地化我的 ajaxurl,因为我直接从 .js 文件工作。该视频非常有用,因此对于未来遇到此问题的人:youtube.com/watch?v=d01I9n8mbOU
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-01
  • 2013-12-23
  • 2014-06-02
  • 1970-01-01
  • 1970-01-01
  • 2014-01-07
相关资源
最近更新 更多