2017-02-24 5 views
0

save_postフックで商品重量を設定する方法はありますか?Woocommerce - save_postに商品重量を設定するフック

私は、コードを以下ましたが、私は体重を上書きする方法がわからない:

add_action('save_post', 'change_weight'); 
function change_weight($post_id) { 
    $WC_Product = wc_get_product($post_id); 
} 

してください、助けて!

答えて

3

あなたがwoocommerce_process_product_meta_$product_typeを使用する場合は、あなたはWooCommerceの健全性チェックをやり直すことができるので、ナンスを心配する必要はありません。

// This will work in both WC 2.6 and WC 2.7 
add_action('woocommerce_process_product_meta_simple', 'so_42445796_process_meta'); 
function so_42445796_process_meta($post_id) { 
    $weight = 100; 
    update_post_meta($post_id, '_weight', $weight); 
} 

WC 2.7では、データの保存方法を抽象化するCRUDメソッドが導入されます。私は彼らが最終的にデフォルトのWordPressテーブルから製品や製品メタを移動すると思うが、私は確かに分からない。 2.7では、​​3210フックを使用して、保存する前に$productオブジェクトを変更できます。

// Coming in WC2.7 you can use the CRUD methods instead 
add_action('woocommerce_admin_process_product_object', 'so_42445796_process_product_object'); 
function so_42445796_process_product_object($product) { 
    $weight = 100; 
    $product->set_weight($weight); 
} 
1

重量を設定するには、ポストメタを更新する必要があります。これは次のようにすることができます:

update_post_meta($post_id, '_weight', $weight); 

$ weightは、上記のコードでは、重み付けする値を含む変数です。ただし、save_postフックは、投稿が保存されるたびにトリガされるので、投稿、ページ、製品などをブログに投稿することができます。投稿が製品であることを確認することをお勧めします。あなたは、あなたがそれを変更する前に、製品の現在の体重を取得したい場合

if (get_post_type ($post_id) == 'shop_order') { 
    update_post_meta($post_id, '_weight', $weight); 
} 

また、あなたはこのようにそれを行うことができます:あなたはこのようなことを行うことができます

$product = wc_get_product($post_id); 
$weight = $product->get_weight(); 
関連する問題