【问题标题】:First query string parameter being ignored by Laravel or Wordpress/WooCommerce?Laravel 或 Wordpress/WooCommerce 忽略第一个查询字符串参数?
【发布时间】:2021-08-06 22:45:49
【问题描述】:

技术栈

  • PHP 7.4.2
  • Laravel 7

背景

我正在尝试从我们的 WooCommerce 网站中提取有效产品,一次一页。然后将这些所需的数据提取出来并格式化为 JSON,然后返回给用户(在本例中是一个营销平台进行 API 调用)。

问题

无论哪个查询参数在我的列表中排在第一位,要么在它离开我的系统之前被删除,要么被 WC/WP REST API 忽略。

调用代码


    function getProducts($page = 1, $per_page = 100, $status = 'publish') {
        
        $query = array(
            // 't' => 1, // For testing first parameter bug
            'page' => $page,
            'per_page' => $per_page,
            'status' => $status,
        );

        $string = http_build_query($query, null, '&', PHP_QUERY_RFC3986);

        $url = $this->finalUrl . '/wp-json/wc/v3/products?' . $string;

        $json = file_get_contents($url);

        return json_decode($json);
    }

如果我转储$url,我会得到:

https://user:pass@domain.com/wp-json/wc/v3/products?page=5&per_page=100&status=publish

据我所知,这似乎是有效的。将其放入 Postman 中,我得到了 100 条记录的第 5 页,正如预期的那样。但是,如果我在我的系统中运行它,我每次都会得到第一页。

然后,如果我交换pageper_page 回合,我会得到我想要的页面,但只有10 条记录,这是默认的,而不是我要求的100 条。当然,如果我把状态放在首位,我也会得到非活动/存档的产品。

此外,如果我将 URL 更改为 Pipedream URL,我可以清楚地看到所有 3 个参数都被列出。

最后,我通过首先添加t=1 参数作为虚拟参数进行测试,然后其余参数都可以正常工作,我会得到我的第 5 页 100 条记录。

如果有人可以帮助或指出正确的方向,将不胜感激。

干杯, 汤姆

【问题讨论】:

    标签: php wordpress laravel woocommerce


    【解决方案1】:

    在这种情况下,wordpress 网站上的 uri 重写规则中有一个杂散字母,导致第一个参数的名称前面带有该字母。

    这是在 try_files $uri /index.php?uri=$uri&i$args; 规则中找到的。注意 i$args 被附加之前。

    在我上面的示例中,page 在到达 API 之前将被重命名为 ipage

    已删除,现在可以使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 1970-01-01
      • 1970-01-01
      • 2022-10-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多