2016-10-28 4 views
4

Ich kann kein Forum speziell für Woocommerce-Abonnements finden, also hoffe ich, dass Stack mir helfen kann!Woocommerce Subscriptions - Produktname neben Subskriptions-ID hinzufügen

Auf der Seite "Meine Abonnements" befindet sich eine Tabelle, in der alle Abonnements des Kunden angezeigt werden. Die Abonnements sind mit der ID-Nummer benannt. Ich möchte den Namen des Abonnementprodukts neben der ID hinzufügen. Hier

ist der Code aus dem Plugin, das dem Hinzufügen der ID in der Tabelle bezieht:

<?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; ?> 

Sie werden bemerken, ein Haken, die ich verwenden kann Code nach der ID zu injizieren, und ich heraus Wie macht man das. Das Problem ist, ich kann es nur funktionieren, wenn ich die Abonnement-ID manuell eintippe.

Hier ist mein Code, wobei 1341 die Abonnement-ID ist. Dies spritzt erfolgreich die Produktnamen für 1341 nach der ID in der Tabelle:

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); 

Das Problem, ich kann nicht herausfinden, wie die ID dynamisch als eine Variable zu erhalten. Ich kann es natürlich nicht verwenden, wenn ich die ID manuell eingeben muss. Gibt es eine Möglichkeit, dies zu tun?

Ich fühle mich wie ich bin so nah, noch so weit!

Vielen Dank!

Antwort

1

Sie sind in der Nähe. Sie brauchen die ID nicht für das, was Sie tun. Das Abonnement wird vom WordPress Hooks System in die Funktion übernommen. Sie müssen es einfach benutzen. Ändern Sie Ihren Code in den folgenden:

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

Vielen Dank! Dieser vollständige Code hat funktioniert! Ich schätze die Erklärung. – LBF

2

Wenn Sie die Quelle der Vorlagendatei überprüfen, sehen Sie, dass die do_action Aufruf wie folgt aussieht:

do_action('woocommerce_my_subscriptions_after_subscription_id', $subscription)

Das bedeutet, dass in der Aktion, die Sie hinzufügen, werden Sie Zugriff auf das übergebene $ Subskriptionsobjekt haben.

Daher Ihre Funktionsdeklaration wie folgt aussehen ändern:

function custom_add_subscription_name_to_table($subscription) {

die Sie Zugriff auf das $ Abonnement-Objekt in Ihrer Funktion erhalten! Ich bin nicht sicher genau das, was der Code zur Ausgabe der Name sein, aber man kann es sich leicht ausrechnen, indem dies als die erste Zeile Ihrer Funktion zu tun:

var_dump($subscription)

Dies wird auszudrucken alles zur Verfügung Sie in das Abonnement-Objekt, und ich bin sicher, der Name ist irgendwo dort. Es ist wahrscheinlich nur echo $subscription->name;, aber Sie werden es überprüfen wollen!

+1

Danke Greg. Ich schätze die Erklärung, warum ich meiner Funktionsdeklaration ein $ -Abonnement hinzufügen musste. Das wird mir in Zukunft helfen. – LBF

Verwandte Themen