2017-07-09 8 views
2

目標は、商品がGoogleの支払いゲートウェイに渡されるときに商品の名前を変更することですが、そのまま商品ページに表示することができます。WooCommerceカートの商品名を変更する

私は私のfunctions.phpでこれを試してみた:

function change_item_name($item_name, $item) { 
    $item_name = 'mydesiredproductname'; 
    return $item_name; 
} 
add_filter('woocommerce_order_item_name', 'change_item_name', 10, 1); 

しかし、それは私のために動作していないようです。私は実際の商品IDか何かを渡すべきであるように感じる...私は少し失われている。

私がここで間違っていることに関するすべての情報は非常に高く評価されます。

答えて

3

woocommerce_order_item_nameフィルタフックは、フロントエンドのフックとに配置されている:

1)WooCommerceテンプレート:

  • メール/無地/電子メールオーダーitems.php
  • テンプレート/オーダー/オーダー詳細 - item.php
  • テンプレート/ checkout/form-pay.php
  • のテンプレート/電子メール/メールオーダー-items.php

2)WooCommerceコアファイル:

  • が含ま /クラス-WC-構造化data.php

それぞれには、$ item_name共通の最初の引数があり、他の引数とは異なります。
あなたの機能で設定した2つの引数を持っている(第2 1は、すべてのテンプレートのために正しくない)、あなたは一つだけ、あなたのフックで宣言されている詳細はHere ...

を参照してください。>シングル注文の詳細を

add_filter('woocommerce_order_item_name', 'change_orders_items_names', 10, 1); 
function change_orders_items_names($item_name) { 
    $item_name = 'mydesiredproductname'; 
    return $item_name; 
} 

そして、それは

  • オーダー受け取る(ありがとうございます)ページ、
  • メール通知
  • とマイアカウントオーダーで動作します:私は以下のコードをテストしています

ただし、カート、チェックアウト、バックエンドの注文編集ページではありません。

あなたはそれがカートやチェックアウトに動作させるために必要であれば、あなたはwoocommerce_before_calculate_totalsのような他のフックを使用する必要があります。
次に、WC_Product methods(セッターとゲッター)を使用できます。

はここ

add_filter('woocommerce_before_calculate_totals', 'custom_cart_items_prices', 10, 1); 
function custom_cart_items_prices($cart_object) { 

    if (is_admin() && ! defined('DOING_AJAX')) 
     return; 

    // Iterating through cart items 
    foreach ($cart_object->get_cart() as $cart_item) { 

     // Get an instance of the WC_Product object 
     $wc_product = $cart_item['data']; 

     // Get the product name (WooCommerce versions 2.5.x to 3+) 
     $original_name = method_exists($wc_product, 'get_name') ? $wc_product->get_name() : $wc_product->post->post_title; 

     // SET THE NEW NAME 
     $new_name = 'mydesiredproductname'; 

     // Set the new name (WooCommerce versions 2.5.x to 3+) 
     if(method_exists($wc_product, 'set_name')) 
      $wc_product->set_name($new_name); 
     else 
      $wc_product->post->post_title = $new_name; 
    } 
} 

コードは、あなたのアクティブな子テーマ(またはテーマ)の任意のPHPファイルに行くか、また、どのプラグインのPHPファイルに新しいコードです。

今、あなたはこのコードをテストし、必要な場合は2.5.Xから3.1+

にWooCommerceのバージョンで動作している...ショップアーカイブおよび製品ページを除いてどこでも

を名前を変更していますあなたが関数内でこのconditional WooCommerce tagを追加する必要がありますだけカートに元のアイテム名を維持する

if(! is_cart()){ 
    // The code 
} 

この回答は、以前のバージョンのwoocommerce互換性を得るために、2017年8月1日に更新されました...

関連する問題