WooCommerce REST API - Получить все продукты с их вариантами изменений в одном запросе API - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в API REST, У меня есть страница php, где мне нужно заполнить все продукты и варианты. поэтому я использую curl https://my_ip/index.php/wp-json/wc/v2/products, затем я зацикливаю его и передаю идентификатор продукта, чтобы получить варианты, поэтому внутри цикла я использую https://my_ip/index.php/wp-json/wc/v2/products/$variable_product_id/variations/, но это требует больше времени, поскольку у каждого продукта больше вариантов, поэтому есть ли способ получить все продукты и вариации в одном запросе?

как: есть ли какие-либо настройки в class-wc-rest-products-controller.php или в любом запросе или в любом месте в woocommerce? чтобы я мог получить результат.

mycode:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
    CURLOPT_URL => "https://my_ip/index.php/wp-json/wc/v2/products",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "GET",
    CURLOPT_SSL_VERIFYPEER=> false,

    CURLOPT_HTTPHEADER => array(
        "Authorization: Basic *****************",
        "Cache-Control: no-cache"
    ),
));

$response = curl_exec( $curl) ;
curl_close( $curl );

$Product = json_decode( $response );

//after getting all product. looping all to get variations price.

foreach ( $Product as $row ){
    $product_id= $row->id;

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://my_ip/index.php/wp-json/wc/v2/products/".$product_id."/variations/",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_SSL_VERIFYPEER=> false,

        CURLOPT_HTTPHEADER => array(
            "Authorization: Basic **************",
            "Cache-Control: no-cache"
        ),
    ));

    $response1 = curl_exec( $curl );
    curl_close( $curl );


}

$variations=json_decode( $response1 );
print_r( $variations->price );

// here getting variation of particular product 

поэтому, когда мы звоним https://my-ip/index.php/wp-json/wc/v2/products/423, мы получаем весь продукт, и только variations id принадлежит ему как

 "variations": [
        603,
        604,
        605,
        606
    ], 

но мне нужны детали (цена) каждого варианта

 {
        "id": 603,
        "date_created": "2018-06-18T12:45:58",
        "date_created_gmt": "2018-06-18T12:45:58",
        "date_modified": "2018-06-29T06:41:21",
        "date_modified_gmt": "2018-06-29T06:41:21",
        "description": "",
        "sku": "",
        "price": "550",
        "regular_price": "550",
}

примечание: я создаю отдельную страницу test.php в / var / www / html /. эта страница отсутствует внутри wp-контента

Ответы [ 2 ]

0 голосов
/ 03 июля 2018

каждый раз в цикле вы переписываете значение - response1

если вы хотите сохранить все значения, вам нужно добавить это значение в массив например:

<?php

$array = array();

foreach ($Product as $row){
    $product_id= $row->id;

    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => "https://my_ip/index.php/wp-json/wc/v2/products/" . $product_id . "/variations/",
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_ENCODING => "",
        CURLOPT_MAXREDIRS => 10,
        CURLOPT_TIMEOUT => 30,
        CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_SSL_VERIFYPEER=> false,

        CURLOPT_HTTPHEADER => array(
            "Authorization: Basic **************",
            "Cache-Control: no-cache"
        ),
    ));

    $array[] = json_decode( curl_exec( $curl ) );
    curl_close( $curl );
}

print_r( $array );
0 голосов
/ 03 июля 2018

Я сделал это используя они phpLib

while (count($woocommerce->get('products',array('per_page' => 100, 'page' => $page))) > 0) {
        $all_products = array_merge($all_products,$woocommerce->get('products',array('per_page' => 100, 'page' => $page)));
        $page++;
      }

 if ($source_product->type = "variable") {
      $variation = $woocommerce->get('products/'.$source_product->id.'/variations');
      foreach ($variation as $source_child) {
          //do stuff

    }
}
...