我正在运行一个 WordPress / WooCommerce 网站,我想编辑管理员在收到新订单时收到的电子邮件,以显示产品的缩略图。 我将模板复制到我的主题目录 -
/themes/mytheme/woocommerce/emails/admin-new-order.php
:
<?php echo $order->email_order_items_table( true, false, true, true, array( 150, 150 ) ); ?>
这是来自
woocommerce/classes/class-wc-order.php
文件的代码:
/**
* Output items for display in html emails.
*
* @access public
* @param bool $show_download_links (default: false)
* @param bool $show_sku (default: false)
* @param bool $show_purchase_note (default: false)
* @param bool $show_image (default: false)
* @param array $image_size (default: array( 32, 32 )
* @param bool plain text
* @return string
*/
public function email_order_items_table( $show_download_links = false, $show_sku = false, $show_purchase_note = false, $show_image = false, $image_size = array( 32, 32), $plain_text = false ) {
ob_start();
$template = $plain_text ? 'emails/plain/email-order-items.php' : 'emails/email-order-items.php';
woocommerce_get_template( $template, array(
'order' => $this,
'items' => $this->get_items(),
'show_download_links' => $show_download_links,
'show_sku' => $show_sku,
'show_purchase_note' => $show_purchase_note,
'show_image' => $show_image,
'image_size' => $image_size
) );
$return = apply_filters( 'woocommerce_email_order_items_table', ob_get_clean() );
return $return;
}
这是来自
/plugins/woocommerce/templates/emails
的代码
<?php
/**
* Email Order Items
*
* @author WooThemes
* @package WooCommerce/Templates/Emails
* @version 2.0.3
*/
if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
global $woocommerce;
foreach ($items as $item) :
// Get/prep product data
$_product = $order->get_product_from_item( $item );
$item_meta = new WC_Order_Item_Meta( $item['item_meta'] );
$image = ($show_image) ? '<img src="/wp/'. current(wp_get_attachment_image_src( get_post_thumbnail_id( $_product->id ), 'thumbnail')) .'" alt="img" height="'.$image_size[1].'" width="'.$image_size[0].'" style="vertical-align:middle; margin-right: 10px;" />' : '';
?>
<tr>
<td style="text-align:left; vertical-align:middle; border: 1px solid #eee; word-wrap:break-word;"><?php
// Show title/image etc
echo apply_filters( 'woocommerce_order_product_image', $image, $_product, $show_image);
// Product name
echo apply_filters( 'woocommerce_order_product_title', $item['name'], $_product );
// SKU
echo ($show_sku && $_product->get_sku()) ? ' (#' . $_product->get_sku() . ')' : '';
// File URLs
if ( $show_download_links && $_product->exists() && $_product->is_downloadable() ) {
$download_file_urls = $order->get_downloadable_file_urls( $item['product_id'], $item['variation_id'], $item );
$i = 0;
foreach ( $download_file_urls as $file_url => $download_file_url ) {
echo '<br/><small>';
$filename = woocommerce_get_filename_from_url( $file_url );
if ( count( $download_file_urls ) > 1 ) {
echo sprintf( __('Download %d:', 'woocommerce' ), $i + 1 );
} elseif ( $i == 0 )
echo __( 'Download:', 'woocommerce' );
echo ' <a href="' . $download_file_url . '" target="_blank">' . $filename . '</a></small>';
$i++;
}
}
// Variation
echo ($item_meta->meta) ? '<br/><small>' . nl2br( $item_meta->display( true, true ) ) . '</small>' : '';
?></td>
<td style="text-align:left; vertical-align:middle; border: 1px solid #eee;"><?php echo $item['qty'] ;?></td>
<td style="text-align:left; vertical-align:middle; border: 1px solid #eee;"><?php echo $order->get_formatted_line_subtotal( $item ); ?></td>
</tr>
<?php if ($show_purchase_note && $purchase_note = get_post_meta( $_product->id, '_purchase_note', true)) : ?>
<tr>
<td colspan="3" style="text-align:left; vertical-align:middle; border: 1px solid #eee;"><?php echo apply_filters('the_content', $purchase_note); ?></td>
</tr>
<?php endif; ?>
这就是结果,一封没有缩略图的电子邮件。我已经多次更改了
alt
属性和图像大小,效果很好,但是,img src 仍然丢失。
<td style="text-align:left;vertical-align:middle;border:1px solid #eee;word-wrap:break- word">
<img alt="img" height="150" width="150" style="vertical-align:middle;margin-right:10px">prueba test<br><small></small>
</td>
我做错了什么? 感谢您的帮助!
WC 代码中已包含此功能,您只需从模板文件中启用它即可。将 WooCommerce 目录放入您的主题中并转到:
/wp-content/themes/YOUR THEME NAME/woocommerce/emails
从文件
email-order-details.php
找到此代码:
<?php echo $order->email_order_items_table( array(
'show_sku' => $sent_to_admin,
'show_image' => false,
'image_size' => array( 50, 50 ),
'plain_text' => $plain_text,
'sent_to_admin' => $sent_to_admin
) ); ?>
并将其替换为:
<?php echo $order->email_order_items_table( array(
'show_sku' => $sent_to_admin,
'show_image' => true,
'image_size' => array( 50, 50 ),
'plain_text' => $plain_text,
'sent_to_admin' => $sent_to_admin
) ); ?>
全部完成。
我知道,老问题,但我只是想指出(以防有人想知道)该问题很可能是由于传递到文件内的
img
标签的 URL 格式错误造成的 woocommerce/templates/emails/email-order-items.php
:
$image = ($show_image) ? '<img src="/wp/'. current(wp_get_attachment_image_src( get_post_thumbnail_id( $_product->id ), 'thumbnail')) .'" alt="img" height="'.$image_size[1].'" width="'.$image_size[0].'" style="vertical-align:middle; margin-right: 10px;" />' : '';
在
src
属性中,一开始就错误地添加了 /wp/
,这会导致如下 URL:
'/wp/http://www.website.com/path/to/the/image.jpg'