2017-11-14 1 views
1

wp-adminで製品が更新されたときに、整数または文字列でメタキー_regular_priceを使用して製品の通常価格を更新しようとしています。製品regular_priceをwoocommerce_process_product_metaフックで更新する

私の希望するユーザー・フローは次のとおりです。

  1. を開き、製品の編集ページ
  2. 更新ボタン
  3. をクリックしてページをリロードした後_regular_priceが20に設定されていることを参照してください。

add_action('woocommerce_process_product_meta', 'update_test'); 
function update_test($post_id) { 
    update_post_meta($post_id, '_regular_price', 20); 
} 

私は上記の関数で私が間違ってやっているものを見つけると、私はこれを達成する任意の他の方法を知ってみましょう助けてください。

答えて

0

更新と機能

あなたのコードは正しいですが、フックがMetaboxesカスタムフィールドのメイドです。

代わりにsave_postを使用してください。Wordpressフック商品の投稿タイプはです。

また、製品の一時キャッシュをwc_delete_product_transients()でリフレッシュするには、アクティブな価格とを更新する必要があります。

だからあなたのコードは次のようになります。

add_action('save_post', 'update_test', 10, 1); 
function update_test($post_id) { 
    global $post; 

    if ($post->post_type != 'product') return; // Only products 

    $price = 50; // Set your price 

    $product = wc_get_product($post_id); // The WC_Product object 

    // if product is not on sale 
    if(! $product->is_on_sale()){ 
     update_post_meta($post_id, '_price', $price); // Update active price 
    } 
    update_post_meta($post_id, '_regular_price', $price); // Update regular price 
    wc_delete_product_transients($post_id); // Update product cache 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)のfunction.phpファイルやも任意のプラグインファイルになります。

テストおよび動作します...

+0

これは完璧です! –

0

woocommerce_process_product_metaを処理するには、パラメータがありません。以下のコードがあなたの必要性に合っていることを願っています。

add_action('woocommerce_process_product_meta', $wc_meta_box_product_data_save, $int, $int); 

パラメータ(3)

  • $ wc_meta_box_product_data_save(文字列)=> 'WC_Meta_Box_Product_Data ::救う' WCメタボックスの製品データが保存 を。
  • $ int(int)=> 10 int。
  • $ int(int)=> 2 int。

詳細はin this linkです。

+0

私は整数として2'、 '10を追加し、それが望ましい結果を作成していません。 他のもの、 '_stock'や私のカスタムメタのように、私の上記の関数でうまく更新されます。この問題を引き起こすのは '_regular_price'だけです。 –

関連する問題