Мне нужно обновить 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...
}
Ну, у кого-то есть идея, что происходит или... не происходит??
Спасибо,






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);
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 и работать там...
Спасибо @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'] ) );
}
Спасибо
Отлично, это работает: добавьте эту строку [$ product->save();] И установите приоритет 50 на крючке. Бут нужен! Спасибо чувак!