使用AJAX返回空数组的WP_QUERY

时间:2017-10-23 作者:toofarm

在广泛阅读了这篇文章之后,我遇到了一个难题,所以我想我应该在这里继续问下去。

我正在构建一个AJAX调用,它将运行WP\\u查询并返回一系列具有特定标记的帖子。该标记由用户单击ul中的项目来指定,然后将适当的标记作为“数据段塞”传递给AJAX调用。

我已经构建了JS和PHP,但我的AJAX调用一直返回一个空数组,尽管它记录了一个“成功”。我已经仔细检查了正确的slug是否传递到WP\\u查询的参数中,以及正确的脚本是否已排队。查询似乎没有返回任何内容。然而,当我在AJAX之外运行相同的查询时,使用硬编码的参数,它可以正常工作。

如果有人对如何进行这项工作有想法,我们将不胜感激。

这是我在函数中放置的PHP。php:

    //Enqueue custom scripts
    function my_adding_scripts() {


        wp_register_script(\'gg-load\', \'/wp-content/plugins/gg-load.js\', array(\'jquery\'),\'1.1\', true);
        wp_localize_script( \'gg-load\', \'myAjax\', array( \'ajaxurl\' => admin_url( \'admin-ajax.php\' )));
        wp_enqueue_script(\'gg-load\');

    }

    add_action(\'wp_enqueue_scripts\', \'my_adding_scripts\');

    //Process AJAX data   
    add_action( \'wp_ajax_gg_query_posts\', \'gg_query_posts\' );
    add_action( \'wp_ajax_nopriv_gg_query_posts\', \'gg_query_posts\' );

    function gg_query_posts() {

        $response = array();

        $slug = $_REQUEST["slug"];

        $args = array(
            \'tag\' => "$slug",
            \'orderby\' => "title",
            \'order\'   => "ASC",
        );

        $the_query = new WP_Query ($args);

        if ( $the_query->have_posts() ) {

            while ( $the_query->have_posts() ) {

            $the_query->the_post();

            $response->status = true;

            $response->query = $the_query; 

            }

        } else {

            $response->status = false;

            $response->message = esc_attr__( \'No posts were found\' );

        }

        wp_reset_postdata();
        die( json_encode( $response ) );

    } 
下面是ajax调用:

jQuery(document).ready( function() {

   jQuery("ul.gg-menu>li").click( function(e) {
      e.preventDefault(); 
      slug = jQuery(this).attr("data-slug"); //Passes slug to the PHP script for use in the WP_Query

      jQuery.ajax({
         type : "post",
         dataType : "json",
         url : myAjax.ajaxurl,
         data : {action: "gg_query_posts", slug: slug},
         error: function(data) {
                    console.log(data, "error");
                },
          success: function(data) {
                    console.log(data, "success");
                    //We work with the post data here
                }
      })   

   })

})

1 个回复
SO网友:Jacob Peattie

$response->status, $response->query etc.不是在PHP中设置数组值的方式。因此,您只需返回一开始定义的空数组。要在数组中设置值,请使用方括号和字符串作为键:

$response[\'status\'] = true;
无论你现在在哪里都可以这样做->.

此外,如果您可以获得标签ID,则根本不需要自己处理请求,因为您可以使用REST API,只需将请求发送到:

/wp-json/wp/v2/posts/?tags=39&order=asc&orderby=title
获取贴子的步骤,例如,标记39 按照你想要的顺序。代替admin_url( \'admin-ajax.php\' ) 仅使用rest_url( \'wp/v2/posts\' ) 并发送GET 请求,而不是POST.

结束

相关推荐

无法在仪表板中看到所有页面(只能看到3)/wp-admin/edit.php>500错误

一个客户的网站有12个页面,但我们都只能看到其中的3个页面,即使我们有管理员帐户,而创建一个新的管理员帐户并不能解决问题。屏幕选项将不会打开,如果我检查Chrome控制台,我会看到:加载资源失败:服务器响应状态为500():/wp admin/edit。php我看得出来/wp-admin/edit.php 存在。我已删除/wp-admin 和/wp-includes 并上传了新的副本。我上传了一个新的父主题副本,而子主题未被触及。如果我重命名plugins 到plugins.temp 问题仍然存在。感谢您