Обновление SKU для продукта WooCommerce

Мне нужно обновить SKU продукта WooCommerce, но ничего из того, что я пробовал, не работает.

Я пытаюсь обновить SKU продукта. Я создаю новое настраиваемое поле выбора (´´id=>'_leadlovers_integration_product'´´ в приведенном ниже коде) в настройках инвентаря с параметрами, которые я импортирую с помощью API с другой платформы). Это прекрасно работает. Я могу сохранить код, распечатать его. Но я не могу просто обновить SKU с помощью этого кода.

Я пробовал много сниппетов, но ничего не работает...


add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields');
function save_leadlovers_custom_fields( $post_id )
{
    //These two guys works perfectly
    update_post_meta( $post_id, '_leadlovers_integration_check', esc_attr( $_POST['_leadlovers_integration_check'] ) );
    update_post_meta( $post_id, '_leadlovers_integration_product', esc_attr( $_POST['_leadlovers_integration_product'] ) );
    
    //First, I tried this... no success
    //update_post_meta( $post_id, '_sku', esc_attr( $_POST['_leadlovers_integration_product'] ) );

    //Then I tried this, with no changes, forcing by hand the 
    //update_post_meta( $post_id, '_sku', '30445' );

    //I tried using the function set_sku() too... nothing happens
    //$product = wc_get_product( $post_id );
    //$product->set_sku( get_post_meta( $post->ID, '_leadlovers_integration_product', true ) );

    //nothing too with this...
        $product = wc_get_product( $post_id );
    $product->set_sku( '30445' ) ;

        ///i tried even make the procedure on other function...

}

Ну, у кого-то есть идея, что происходит или... не происходит??

Спасибо,

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
0
75
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

update_post_meta должно работать нормально. Вы все равно должны использовать эту последнюю функцию save для другой функции set_sku. В этом:

    $product = wc_get_product( $post_id );
    $product->set_sku( '30445' );
    $product->save();

Если и это не сработает, значит проблема с вашим крючком woocommerce_process_product_meta или он не работает в то время, которое вам нужно.

РЕДАКТИРОВАТЬ

Или это я предполагаю. Возможно, вы используете хук слишком рано, чтобы сохранить мету. Итак, вы что-то сохраняете, но снова _sku снова сохраняется сразу после вашей функции. Поэтому вам следует попробовать другой хук, чтобы убедиться, что он сработает в нужное время. Было бы неплохо, если бы вы могли предоставить более подробную информацию, чтобы я мог вам помочь.

РЕДАКТИРОВАТЬ 2

Я пересмотрел его еще раз, может быть, крючок должен работать. Можете ли вы задержать время выполнения, попробовав это?

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields', 50);

Отлично, это работает: добавьте эту строку [$ product->save();] И установите приоритет 50 на крючке. Бут нужен! Спасибо чувак!

Daniel Weber 29.10.2022 14:18
add_action('woocommerce_before_product_object_save', 'before_product_save', 10, 2);

function before_product_save($product, $datastore) {

    $product->set_sku('thesku');
}

Этот хук запускается непосредственно перед сохранением продукта в базе данных. Этот хук предназначен для изменения любых данных о продукте непосредственно перед сохранением.

Спасибо, но я не пробовал это, потому что я предпочитаю сначала тестировать другие возможности на woocommerce_process_product_meta и работать там...

Daniel Weber 29.10.2022 14:45

Спасибо @Akin и @mujuonly...

Сначала я попытался установить приоритет на 50 и использовать $product->set_sku(), но, значит, нам нужно использовать $product->save вместе... только сохранить не получилось.

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields', 50);
function save_leadlovers_custom_fields( $post_id ){  
    $product = wc_get_product( $post_id );
    $product->set_sku( '12345' ) ;
    $product->save();
}

Их, я попытался использовать update_post_meta с приоритетом 50 и просто работает...

add_action( 'woocommerce_process_product_meta', 'save_leadlovers_custom_fields', 50);
function save_leadlovers_custom_fields( $post_id )
{
    // now updating the sku with my select...
    update_post_meta( $post_id, '_sku', esc_attr( $_POST['_leadlovers_integration_product'] ) );
}

Спасибо

Другие вопросы по теме