2017-10-11 1 views
0

Ich habe einen Filter erstellt, um zu aktualisieren, wie die Bestellung auf woocommerce angezeigt wird. Grundsätzlich muss der Shop-Betreiber in der Lage sein, auf den Namen jedes Produkts (verknüpft mit dem vorgestellten Bild) und auch auf ihn zu klicken, um die URL sehen zu können (da der Name der Image-Datei nützlich ist, um das Produkt zu verfolgen)Hinzufügen der vorgestellten Bild-URL in den Produkttiteln für WooCommerce "Neue Bestellung" Benachrichtigung

Ich brauche dies, um nur die neue Bestellung E-Mail an den Ladenbesitzer zu beeinflussen.

Mein Code in functions.php wird aktualisiert, aber in allen E-Mails und auch Auftragsbestätigung Tabelle auf der Website.

Frage? Wie kann ich NUR die neue Bestell-E-Mail beeinflussen? Ich denke, ich verpasse hier etwas.

// item name link to product 

add_filter('woocommerce_order_item_name', 'display_product_title_as_link', 10, 2); 
function display_product_title_as_link($item_name, $item) { 

    $_product = get_product($item['variation_id'] ? $item['variation_id'] : $item['product_id']); 

    $image = wp_get_attachment_image_src(get_post_thumbnail_id($_product->post->ID), 'full'); 

    return '<a href="'. $image[0] .'" rel="nofollow">'. $item_name .'</a> 
    <div style="color:blue;display:inline-block;clear:both;">'.$image[0].'</div>'; 

} 

Antwort

0

Zuerst gibt es einige Fehler in Ihrem Code wie:

  • Die Funktion get_product() eindeutig veraltet und wurde von wc_get_product()
  • Da WooCommerce 3+ WC_Product Eigenschaften können direkt ersetzt zugegriffen werden Verwenden Sie stattdessen verfügbare Methoden. Hier

ist der richtige Weg zu bekommen, was Sie erwarten (in "New Order" admin Benachrichtigung nur):

// Your custom function revisited 
function display_product_title_as_link($item_name, $item) { 
    $product = wc_get_product($item['variation_id'] ? $item['variation_id'] : $item['product_id']); 
    $image = wp_get_attachment_image_src($product->get_image_id(), 'full'); 
    $product_name = $product->get_name(); 
    return '<a href="'. $image[0] .'" rel="nofollow">'. $product_name .'</a> 
    <div style="color:blue;display:inline-block;clear:both;">'.$image[0].'</div>'; 
} 

// The hooked function that will enable your custom product title links for "New Order" notification only 
add_action('woocommerce_email_order_details', 'custom_email_order_details', 1, 4); 
function custom_email_order_details($order, $sent_to_admin, $plain_text, $email){ 
    // Only for "New Order" and admin email notification 
    if ('new_order' != $email->id && ! $sent_to_admin) return; 
    // Here we enable the hooked function 
    add_filter('woocommerce_order_item_name', 'display_product_title_as_link', 10, 3); 
} 

-Code geht in function.php Datei Ihrer aktiven Kind Thema (aktives Thema oder in einer Plugin-Datei).

geprüft und Arbeiten in WooCommerce 3+

+0

Vielen Dank für Ihre schnelle Antwort und Korrektur, ich wirklich zu schätzen. Ich habe getestet und funktioniert, zeigt aber immer noch die Änderung der E-Mails an, die der Client empfängt. Die Benachrichtigung über neue Bestellungen für Admin- und Client-E-Mails enthält den geänderten Titel mit Link zum Bild. Ich muss dies nur in der E-Mail an den Ladenbesitzer gesendet haben. – GauchoCode

+0

@GauchoCode ... Für mich auf meinem Testserver funktioniert es einwandfrei (unter WooCommerce Version 3.1.2). Ich veröffentliche nie eine Antwort, bevor ich sie teste ... Wichtig: Hast du deinen alten Code entfernt, bevor du ihn hinzufügst? – LoicTheAztec

+0

Ich habe überprüft, und es gibt keine Spuren von meinem alten Code. Genau die, die Sie erstellt haben, beide E-Mails (Client und Admin) sehen identisch aus, beide haben den modifizierten Titel und zeigen die Bild-URL an. Testen mit Woo neueste Version. Ich habe mehrere Tests gemacht und alle zeigen das gleiche in beiden E-Mails ... http://i63.tinypic.com/6hoo4l.png – GauchoCode

Verwandte Themen