2016-10-28 19 views
4

私はWoocommerce Subscription専用のフォーラムを見つけることができないので、Stackが助けてくれることを願っています!Woocommerce Subscriptions - サブスクリプションIDの横に商品名を追加

[マイサブスクリプション]ページには、顧客のすべてのサブスクリプションを表示するテーブルがあります。サブスクリプションにはID番号が付けられます。 IDの横にサブスクリプション製品名を追加します。ここで

テーブルにIDを追加することに関連するプラグインからのコードは次のとおりです。

<?php foreach ($subscriptions as $subscription_id => $subscription) : ?> 
    <tr class="order"> 
     <td class="subscription-id order-number" data-title="<?php esc_attr_e('ID', 'ultimatewoo-pro'); ?>"> 
      <a href="<?php echo esc_url($subscription->get_view_order_url()); ?>"><?php echo esc_html(sprintf(_x('#%s', 'hash before order number', 'ultimatewoo-pro'), $subscription->get_order_number())); ?></a> 
      <?php do_action('woocommerce_my_subscriptions_after_subscription_id', $subscription); ?> 
     </td> 
    </tr> 
<?php endforeach; ?> 

あなたは、私がIDの後にコードを挿入するために使用できるフックがありますわかります、と私は考え出しましたこれを行う方法。問題は、手動でサブスクリプションIDを入力するだけで問題なく動作するということです。

ここに私のコードがあります.1341はサブスクリプションIDです。これが正常にテーブルにIDの後に1341年の製品名を注入:

function custom_add_subscription_name_to_table() { 

    $subscription = wcs_get_subscription(1341); 

    foreach ($subscription->get_items() as $item_id => $item) { 
     $_product = apply_filters('woocommerce_subscriptions_order_item_product', $subscription->get_product_from_item($item), $item); 

     if (apply_filters('woocommerce_order_item_visible', true, $item)) { 

      echo wp_kses_post(apply_filters('woocommerce_order_item_name', sprintf('<a href="%s">%s</a>', get_permalink($item['product_id']), $item['name']), $item)); 

     } 
    } 
} 
add_action('woocommerce_my_subscriptions_after_subscription_id', 'custom_add_subscription_name_to_table', 35); 

問題を、私は変数として動的にIDを取得する方法を見つけ出すことはできません。私は手動でIDを入力する必要がある場合は、私は明らかにそれを使用することはできません。これを行う方法はありますか?

私はとても近いと感じていますが、これまでのところです!

ありがとうございました!テンプレートファイルのソースを確認した場合

答えて

1

あなたは近くです。あなたは何をしているのかわからない。サブスクリプションはWordPressフックシステムによって関数に渡されます。あなたは単にそれを使用する必要があります。コードを次のように変更してください。

function custom_add_subscription_name_to_table($subscription) { 

    foreach ($subscription->get_items() as $item_id => $item) { 
     $_product = apply_filters('woocommerce_subscriptions_order_item_product', $subscription->get_product_from_item($item), $item); 

     if (apply_filters('woocommerce_order_item_visible', true, $item)) { 

      echo wp_kses_post(apply_filters('woocommerce_order_item_name', sprintf('<a href="%s">%s</a>', get_permalink($item['product_id']), $item['name']), $item)); 

     } 
    } 
} 
add_action('woocommerce_my_subscriptions_after_subscription_id', 'custom_add_subscription_name_to_table', 35); 
+0

ありがとうございました!この完全なコードが機能しました!私は説明を感謝します。 – LBF

2

、あなたはdo_actionコールはこのようになっていることがわかります:

do_action('woocommerce_my_subscriptions_after_subscription_id', $subscription)

は、アクションにあなたは、あなたがよ追加しているということを意味します渡された$ subscriptionオブジェクトにアクセスできます。あなたの関数に$サブスクリプションオブジェクトへのあなたのアクセスを取得します

function custom_add_subscription_name_to_table($subscription) {

したがって、このように見えるように、あなたの関数の宣言を変更!私はコードが出力する名前になります正確にわからないんだけど、簡単にあなたの関数の最初の行としてこれを行うことによって、それを把握することができます

var_dump($subscription)

これはで利用可能なすべてのものをプリントアウトしますあなたはサブスクリプションオブジェクト内にいます、そして、私はその名前がどこかにあると確信しています。おそらくちょうどecho $subscription->name;だが、もう一度チェックしたいと思うだろう!

+1

ありがとうございました。私はなぜ私の関数宣言に$ subscriptionを追加する必要があるのか​​を説明してくれてありがとう。それは将来私を助けるでしょう。 – LBF

関連する問題