我需要更新 WooCommerce 產品的 SKU,但我沒有嘗試過。
我正在嘗試更新產品的 SKU。我使用我通過 API 從另一個平臺匯入的選項在庫存設定上構建了一個新的選擇自定義欄位('′id=>'_leadloves_integration_product'′′ 在下面的代碼中)。這作業正常。我可以保存代碼,列印它。但我不能簡單地使用此代碼更新 SKU。
我已經嘗試了很多snipets,但沒有任何效果......
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...
}
好吧,有人知道會發生什么,或者......沒有發生?
謝謝,
uj5u.com熱心網友回復:
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);
uj5u.com熱心網友回復:
add_action('woocommerce_before_product_object_save', 'before_product_save', 10, 2);
function before_product_save($product, $datastore) {
$product->set_sku('thesku');
}
該掛鉤在將產品保存到資料庫之前運行。這個鉤子專門用于在保存之前更改任何產品資料。
uj5u.com熱心網友回復:
謝謝@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();
}
他們,我嘗試使用優先級設定為 50 的 update_post_meta 并且可以正常作業......
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'] ) );
}
謝謝
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/524405.html
標籤:phpWordPresswoocommerce钩woocommerce库存单位
上一篇:如何從資料庫中獲取資料
