Я пытаюсь синхронизировать количество товаров в магазине woocommerce с внешним API.
Мне нужно, чтобы все запасы продуктов в моем магазине были получены из API веб-сайта поставщика.
Я всегда синхронизирую все запасы вручную, но это огромная работа, когда у вас есть более 70 продуктов с 5-6 вариантами каждый, поэтому я решил попробовать их API, чтобы всегда автоматически синхронизировать запасы товаров с их запасами (обратите внимание, что мне нужно только получить информацию о запасе от них, а не наоборот).
Вот код, который они предоставляют:
require_once("client_v1.1/tl_api_client_class.php");
ini_set("error_reporting", E_ALL | E_NOTICE);
ini_set("display_errors", "on");
header("content-type: text/html; charset=utf-8");
//all API errors will be send through an Excepion
try {
//create a tl_api_client passing the login information (key, user, password)
$tl_client = new tl_api_client(
"YOUR_API_KEY",
"YOUR_API_USER",
"YOUR_API_PASSWORD");
//get english language details for the product with id 1149
//null if no result
$product = $tl_client->get_details(1149, "en", "USD");
//get quantity for each color
$color_quantity = array();
foreach( $product->attributes as $attribute ){
$result = $tl_client->get_quantity(20, 1);
/*Return null if no result for this param or a GetQuantityResult object
object(
[product_id]
[attributes_id]
[quantity]
)
*/
$color_quantity[$attribute->attributes_name] = $result->quantity;
}
} catch (Exception $e) {
//catch error
echo $e->getMessage();
exit;
}
//Do something with the result
?>
<html>
<head>
<style>
.categories{
float: left;
}
table{
border-collapse: collapse;
}
table td{
border: 1px solid #333;
}
</style>
</head>
<body><!-- example to show info about a product -->
<div style='clear: both;'>
<div><?php echo $product->parts_code; ?> - <?php echo $product->products_price; ?> EUR</div>
<table>
<tr>
<th>
color
</th>
<th>
quantity
</th>
</tr>
<?php foreach ($color_quantity as $color => $quantity): ?>
<tr>
<td align="center">
<?php echo $color; ?>
</td>
<td align="right">
<?php echo $quantity; ?>
</td>
</tr>
<?php endforeach; ?>
</table>
</div>
</body>
</html>
У меня уже есть и ключ API, пользователь и пароль. Я думаю, мне нужно создать новый плагин, поместить в него первую часть этого кода (пока он не создаст tl_api_client), а затем использовать функцию для обновления всего моего пакета. Может ли кто-нибудь помочь с этой последней частью (учитывая мое первое предположение верно)?
Заранее большое спасибо
Alessio
РЕДАКТИРОВАТЬ: Хорошо, я сделал это на 90%, но мне не хватает одного последнего бита, той части, где запас варианта обновляется с новой стоимостью $ акций. что я делал до сих пор (и это работает):
require_once("client_v1.1/tl_api_client_class.php");
ini_set("error_reporting", E_ALL | E_NOTICE);
ini_set("display_errors", "on");
header("content-type: text/html; charset=utf-8");
add_filter( 'init', 'update_stock', 10, 1);function update_stock( $stock ){$args = array(
'post_type' => 'product'
);
$i=0;
$loop = new WP_Query( $args );if ( $loop->have_posts() ) {
while ( $loop->have_posts() ) : $loop->the_post();global $woocommerce, $product, $post;
$colorvalues = get_the_terms( $product->id, 'pa_color');
$available_variations = $product->get_available_variations();
foreach ( $available_variations as $available_variation) {
$variation_id = $available_variation['variation_id'];
$variation_object = get_post($variation_id);
$parentsku = $product->get_sku();
$tlsku = (int)substr($parentsku, -4);
$varsku = get_post_meta( $variation_object->ID, '_sku', true);
$tlvarid = (int)substr($varsku, -1);
try {
//create a tl_api_client passing the login information (key, user, password)
$tl_client = new tl_api_client(
"**",
"***",
"****");
$stock = $tl_client->get_quantity($tlsku, $tlvarid);
} catch (Exception $e) {
//catch error
echo $e->getMessage();
exit;
}}$i++;
endwhile;
} else {
echo __( 'No products found' );
}
wp_reset_postdata();
}
Задача ещё не решена.
Других решений пока нет …