#php #wordpress #laravel #woocommerce
Вопрос:
Технический стек
- PHP 7.4.2
- Ларавель 7
Фон
Я пытаюсь загрузить активные продукты с нашего сайта WooCommerce, по одной странице за раз. Затем эти данные должны быть извлечены, отформатированы в JSON и возвращены пользователю (в этом случае маркетинговая платформа, выполняющая вызов API).
Вопрос
Какой бы параметр запроса ни был первым в моем списке, он либо удаляется до того, как покинет мою систему, либо игнорируется API REST WC/WP.
Код для совершения вызова
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, 'amp;', 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=5amp;per_page=100amp;status=publish
Насколько я могу судить, это кажется обоснованным. Вложив его в «Почтальон», я получаю 5-ю страницу из 100 записей, как и ожидалось. Однако, если я запускаю его в своей системе, я каждый раз получаю первую страницу.
Затем, если я поменяюсь page
местами и per_page
округлю, я получу нужную страницу, но только 10 записей, что является значением по умолчанию, а не 100, которые я прошу. Тогда, конечно, если я поставлю статус первым, я тоже получу неактивные/архивированные продукты.
Кроме того, если я изменю URL-адрес на URL-адрес Pipedream, я смогу увидеть, что все 3 параметра четко перечислены.
Наконец, я протестировал, добавив t=1
сначала параметр в качестве фиктивного параметра, а затем все остальные параметры работают нормально, и я бы без проблем получил свою 5-ю страницу из 100 записей.
Если кто-нибудь сможет помочь или указать мне правильное направление, я буду очень признателен.
Твое здоровье, Том
Ответ №1:
Оказывается, в этом случае в правиле перезаписи uri на сайте wordpress была случайная буква, в результате чего имя первого параметра было добавлено указанной буквой.
Это было найдено в рамках try_files $uri /index.php?uri=$uriamp;i$args;
правила. Обратите i
внимание на то, что перед $args
добавлением.
В моем приведенном выше примере page
он будет переименован ipage
до того, как достигнет API.
Удалено, и теперь это работает.