Установить или обновить класс доставки товара программно в Woocommerce - PullRequest
0 голосов
/ 27 января 2019

Добрый день, я пытался понять, как программно выбрать класс доставки с помощью php.Я создаю продукт woocommerce из внешнего интерфейса, используя форму, и при отправке формы продукт создается, но я могу выбрать любой класс доставки, который будет выбран.ниже приведен снимок экрана, показывающий настройку класса доставки для продукта, созданного из веб-интерфейса, на вкладке элемента контроля отображаются идентификаторы (в качестве значения) классов доставки

woocommerce shipping classes

Я использую приведенный ниже код для выбора телефона. Класс платы за доставку

$pShipping_Class = 25; //Where 25 is the id/value for Phone Shipping Fee Class
update_post_meta( $product_id, 'product_shipping_class', $pShipping_Class );

update_post_meta работает для всех остальных полей, даже для настраиваемого поля, которое я создал, я смог использовать update_post_meta( $product_id, '_list_of_stores', 'custom-order' ); для выбораЗначение custom-order из пользовательского выпадающего поля, которое я создал, но когда я попробовал то же самое для класса доставки, это не сработало.Не уверен, что я делаю неправильно.

Пожалуйста, укажите мне правильное направление.Как я могу обновить класс доставки с помощью PHP.у меня уже есть идентификаторы и слаг.

Спасибо

ОБНОВЛЕНИЕ: я понял, что когда я вручную выбираю плату за доставку по телефону и нажимаю кнопку Обновить продукт.он добавил выбранное свойство (то есть selected = "selected"), см. скриншот ниже;

woocommerce shipping class selected

Пожалуйста, как мне сделать это обновление / выбрать любой изкласс доставки (либо по идентификаторам, либо по слагу), так как класс доставки нужно обновлять на лету, чтобы предоставить пользователям скорость доставки продукта, который они создали и добавили в корзину.

1 Ответ

0 голосов
/ 28 января 2019

Классы доставки не управляются метаданными для продуктов.Они управляются пользовательской таксономией , поэтому вы не можете использовать update_post_meta() функцию .

В Woocommerce классы доставки управляются пользовательскимтаксономия product_shipping_class и вам нужно будет использовать функцию wp_set_post_terms () , чтобы она работала программно, например:

$shipping_class_id = 25; // the targeted shipping class ID to be set for the product

// Set the shipping class for the product
wp_set_post_terms( $product_id, array($shipping_class_id), 'product_shipping_class' );

Или, начиная с Woocommerce 3, вы можете использоватьWC_Product метод CRUD set_shipping_class_id() таким образом:

$shipping_class_id = 25; // the targeted shipping class ID to be set for the product

$product = wc_get_product( $product_id ); // Get an instance of the WC_Product Object

$product->set_shipping_class_id( $shipping_class_id ); // Set the shipping class ID 

$product->save(); // Save the product data to database
...