Я пробовал это двумя способами. Если я использую SQL-запрос, он по-прежнему говорит: вызов неопределенной функции get_wc_product (), когда он пытается вернуть продукт. Если я вставлю вызов $ product = new WC_Product ($ product_id); Он работает как с theSQL, так и с вызовом wc_get_product_id_by_sku ($ sku) ;. Проблема в том случае, когда он попадает в ваш код, он говорит Uncaught Exception: Invalid product ..
ужна помощь. Я пытаюсь обновлять товарный запас продуктов woocommerce программно. У нас есть канал для поставщиков через JSON. Я могу читать данные из ленты и правильно извлекать данные из мета-записи. Я использую последнюю версию WP и WOO. PHP составляет 7,2
Ниже показано, как я нахожу идентификатор продукта в SKU.
$product_id = $wpdb->get_var( $wpdb->prepare( "SELECT post_id FROM $wpdb->postmeta WHERE meta_key='_sku' AND meta_value='%s' LIMIT 1", $sku ) );
Это возвращает правильный идентификатор, и я могу использовать его, чтобы увидеть текущие метаданные, которые уже есть:
$website_stock = get_post_meta($product_id, '_stock', true);
echo "Website Stock - " . $website_stock . "</br>";
$website_stock_status = get_post_meta($product_id, '_stock_status', true);
echo "Website Stock Status - " . $website_stock_status . "</br>";
Я тогда обновляю запас, который я получаю от подачи. Это может быть запас, идущий от нуля до x или от x до нуля и где угодно между ними. Вот как я обновляю на складе:
$out_of_stock_staus = 'outofstock';
update_post_meta($product_id, '_stock', 0);
update_post_meta($product_id, '_stock_status', wc_clean( $out_of_stock_staus ));
wc_delete_product_transients( $product_id ); // Clear/refresh the variation cache
Вот где это становится странным.
Данные отображаются правильно в представлении продукта в панели администратора. Как примечание, этот SKU может принадлежать к вариации (у нас их много) или это может быть простой продукт. В конце концов, все они, кажется, обновляются нормально. Я не вижу ошибок, которые я вижу.
Я использую небольшой фрагмент PHP в своем файле functions.php, в котором в выпадающем списке отображаются недостающие элементы. Вот:
/* Grey out out of stock items in the product dropdown */
add_filter( 'woocommerce_variation_is_active', 'grey_out_variations_when_out_of_stock', 10, 2 );
function grey_out_variations_when_out_of_stock( $grey_out, $variation ) {
if ( ! $variation->is_in_stock() )
return false;
return true;
}
Итак, проблемы:
Элемент, которого нет в наличии, не должен отображаться в раскрывающемся списке как кликабельный, но он все еще отображаетсяЗапас на внешнем торце не всегда говорит о нуле, он позволяет выбрать тот, который говорит, что нет запаса, поэтому кнопка добавления в корзину активна и не должна быть. Так что передний конец не видит обновлений.Административная панель Woocommerce для продуктов не сводится к отсутствию на складе для родителей, я должен сделать быстрое редактирование и обновление, чтобы это произошло.В основном, серверная часть видит изменения, но внешний интерфейс не отображается правильно.Буду признателен за любую помощь, которую может оказать каждый!
Спасибо