2017-10-11 6 views
0

J'ai fait un filtre pour mettre à jour comment l'ordre est affiché sur woocommerce. Fondamentalement, j'ai besoin du propriétaire du magasin pour pouvoir cliquer sur le nom de chaque produit (lié maintenant à l'image sélectionnée) et aussi pour pouvoir voir l'URL (parce que le nom du fichier image est utile pour suivre le produit)Ajouter l'URL de l'image sélectionnée dans les titres de produits pour la notification "Nouvelle Commande" de WooCommerce

J'ai besoin de ceci pour affecter SEULEMENT l'email de NOUVEL ORDRE envoyé au propriétaire du magasin.

Mon code placé dans functions.php met à jour MAIS dans TOUS les emails et aussi le tableau de confirmation de commande sur le site web.

Question? Comment puis-je affecter SEULEMENT l'email de nouvelle commande? Je pense qu'il me manque quelque chose ici.

// 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>'; 

} 

Répondre

0

Tout d'abord il y a des erreurs dans votre code comme:

  • La fonction get_product() est clairement obsolète et a été remplacé par wc_get_product()
  • Depuis WooCommerce 3+ WC_Product propriétés sont accessibles directement , utilisez plutôt les méthodes disponibles.

Voici la bonne façon d'obtenir ce que vous attendez (dans la notification « nouvel ordre » admin uniquement):

// 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 va dans le fichier function.php de votre thème enfant actif (Thème actif ou dans un fichier plugin).

testé et fonctionne dans WooCommerce 3+

+0

Merci pour votre réponse rapide et la correction, j'apprécie vraiment. J'ai testé et fonctionne, mais montre toujours le changement sur les courriels que le client reçoit. Les deux, nouvelle notification de commande pour les courriels admin et client ont le titre modifié avec lien vers l'image. Je dois seulement avoir ceci dans l'email envoyé au propriétaire du magasin. – GauchoCode

+0

@GauchoCode ... Pour moi sur mon serveur de test il fonctionne parfaitement (Sous WooCommerce Version 3.1.2). Je ne publie jamais une réponse avant de la tester ... Important: Avez-vous supprimé votre ancien code avant d'ajouter celui-ci? – LoicTheAztec

+0

J'ai vérifié et il n'y a aucune trace de mon ancien code. Juste celui que vous avez conçu, les deux courriels (client et administrateur) semblent identiques, les deux ont le titre modifié et affichent l'URL de l'image. tester avec Woo dernière version. J'ai fait plusieurs tests et tous montrent la même chose dans les deux e-mails ... http://i63.tinypic.com/6hoo4l.png – GauchoCode