Estoy tratando de crear y actualizar productos de woocommerce automáticamente desde una API. Creé el punto de partida del complemento y este es mi método que obtiene los productos de la API externa y luego los recorre y crea un producto simple en woocoommerce.
Crea los productos perfectamente bien, sin embargo, si ejecuto el código dos veces, los productos no se actualizan, pero se crea un lote completamente nuevo (los SKU se duplican sin ningún error), parece que el SKU no se reconoce a pesar de que existe y puedo verlo en el tablero del producto y en la interfaz aquí está mi código hasta ahora:
// Activating the function when the plugin is activated
public function __construct()
{
add_action( 'activated_plugin', array($this, 'add_products_from_api') );
}
public function add_products_from_api() {
// API products url
$url="https://example.com/products";
// Retreiving the products body from api and decoding the json
$external_products = wp_remote_retrieve_body(wp_remote_get($url));
$products = json_decode($external_products, true);
// Products found
if (!empty($products)) {
foreach ($products as $product) {
// check if SKU already exists
$product_id = wc_get_product_id_by_sku($product['id']);
if (!$product_id) {
$post = [
'post_author' => '',
'post_content' => $product['description'],
'post_status' => "publish",
'post_title' => wp_strip_all_tags($product['title']),
'post_name' => $product['title'],
'post_parent' => '',
'post_type' => "product",
];
// Create product
$product_id = wp_insert_post($post);
// Set product type
wp_set_object_terms($product_id, 'simple', 'product_type');
update_post_meta($product_id, '_sku', $product['id']);
update_post_meta($product_id, '_price', $product['price']);
update_post_meta($product_id, '_manage_stock', "yes");
update_post_meta($product_id, '_stock', $product['rating']['count']);
}
else {
// Product already exists
$post = [
'ID' => $product_id,
'post_title' => $product['title'],
'post_content' => $product['description'],
];
$post_id = wp_update_post($post, true);
if (is_wp_error($post_id)) {
$errors = $post_id->get_error_messages();
foreach ($errors as $error) {
echo $error;
}
}
}
update_post_meta($product_id, '_stock', $product['rating']['count']);
update_post_meta($product_id, '_price', $product['price']);
}
}
}
¿Alguien tiene alguna idea de por qué los SKU están presentes pero no se reconocen y los productos siguen duplicándose? Gracias.
wc_get_product_id_by_sku
devuelve 0 o un sku, por lo que siempre es cierto.– Howard E.
16 de marzo a las 10:25
ok, entonces que me recomiendas hacer en este caso?
– Blu3
16 de marzo a las 11:50
La respuesta negativa es 0. Cambia tu condición.
– Howard E.
16 de marzo a las 12:15
Lo siento, pero no entiendo qué cambiar, si pudieras, por favor, muéstrame lo que quieres decir.
– Blu3
16 de marzo a las 12:28
@HowardE, si por casualidad puede mostrarme qué condición cambiar y cómo sería muy útil, gracias.
– Blu3
17 de marzo a las 14:16