我有这个代码来创建一个自定义标签,用于以 cf7 形式显示 woocommerce 购物车项目,并在电子邮件通知中发送购物车项目。但在电子邮件中,我无法弄清楚如何以以下形式显示购物车项目:带有图像产品、名称产品、价格等。 在电子邮件中,我只能以一种无聊且不可接受的方式显示产品列表。 另外,我还创建了一个自定义标签来显示不含税且不含运费的总购物车(因为是报价请求)。 这是我的工作代码。
// add "cart" tag in Contact Form 7
add_action('wpcf7_init', 'cartTag');
function cartTag() {
wpcf7_add_form_tag('cart', 'cartItems', true);
}
// loop for cart items in "cart" tag Contact Form 7
function cartItems($tag) {
if (is_null(WC()->cart)) {
wc_load_cart();
}
$name = $tag['name'];
if (empty($name)) {
return '';
}
$items = WC()->cart->get_cart();
$output = '<div class="my-cf7-cart">';
$inputValue = "";
$cart = [
'total' => WC()->cart->total,
'products' => []
];
foreach ($items as $item => $values) {
$_product = wc_get_product($values['data']->get_id());
$item_image = $values['data']->get_image(array(0, 30));
$price = wc_get_price_excluding_tax($_product);
$price = $values['line_total'];
$price = number_format($price, 2, ",", ".");
$output .= '<div class="my-acf-cart-item"><a href="' . $_product->get_permalink() . '" target="_blank" rel="nofollow">' . $item_image;
$output .= ' <p class="prev-product-title">' . $_product->get_title() . '</p></a>';
$output .= '<p>Quantity: ';
$output .= $values['quantity'] . '</p>';
$output .= '<p>Price: € ' . $price . ' exc. tax</p></div>';
// for email (CF7)
$inputValue .= 'Product: ' . $_product->get_title() . ' • Quantity: ' . $values['quantity'] . ' • Price: € ' . $price . ' exc. tax 
';
$cart['products'][] = [
'name' => $_product->get_title(),
'qty' => $values['quantity'],
'price' => $price,
'link' => $_product->get_permalink()
];
}
// set total cart without shipping amount - by Krikdesign
$total = WC()->cart->subtotal_ex_tax;
$shipping = WC()->cart->shipping_total;
$total = number_format($total, 2, ",", ".");
$output .= '<p class="prev-total"><b>Products total:</b> € ' . $total . ' exc. tax</p>';
$output .= '<input type="hidden" name="' . $name . '" value="' . $inputValue . '" />';
$output .= '<input type="hidden" name="products" value="' . htmlspecialchars(json_encode($cart)) . '" />';
$output .= '<input type="hidden" name="shipping" value="' . $_GET['shipping_method'] . '" />';
$output .= '</div>';
return $output;
}
// add "total" tag in Contact Form 7
add_action('wpcf7_init', 'totalTag');
function totalTag() {
wpcf7_add_form_tag('total', 'totalItem', true);
}
// Total exc. tax in "total" tag Contact Form 7
function totalItem($tag) {
if (is_null(WC()->cart)) {
wc_load_cart();
}
$name = $tag['name'];
if (empty($name)) {
return '';
}
$output = '<div class="total-cart-excTax">';
$total = WC()->cart->subtotal_ex_tax;
$total = number_format($total, 2, ",", ".");
$inputValue = '€ ' . $total . ' exc. tax';
$output .= '<input type="hidden" name="' . $name . '" value="' . $inputValue . '" />';
$output .= '</div>';
return $output;
}
感谢您的帮助
按照Snuffy的建议,我替换了这行代码:
$item_image = $values['data']->get_image(array(0, 30));
在:
$item_image = $_product->get_image();
我只是删除了“缩略图”,因为我不喜欢裁剪产品图像。 这是编写干净代码的更好方法,尽管结果没有改变并且不能回答我的问题。 我想更改的代码部分如下(我的问题中的完整代码):
// for email (CF7)
$inputValue .= 'Product: ' . $_product->get_title() . ' • Quantity: ' . $values['quantity'] . ' • Price: € ' . $price . ' exc. tax 
';
$cart['products'][] = [
'name' => $_product->get_title(),
'qty' => $values['quantity'],
'price' => $price,
'link' => $_product->get_permalink()
];
要从这部分代码中获取表格中的结果(我的问题中的完整代码):
// loop for cart items in "cart" tag Contact Form 7
function cartItems($tag) {
if (is_null(WC()->cart)) {
wc_load_cart();
}
$name = $tag['name'];
if (empty($name)) {
return '';
}
$items = WC()->cart->get_cart();
$output = '<div class="my-cf7-cart">';
$inputValue = "";
$cart = [
'total' => WC()->cart->total,
'products' => []
];
foreach ($items as $item => $values) {
$_product = wc_get_product($values['data']->get_id());
$item_image = $values['data']->get_image(array(0, 30));
$price = wc_get_price_excluding_tax($_product);
$price = $values['line_total'];
$price = number_format($price, 2, ",", ".");
$output .= '<div class="my-acf-cart-item"><a href="' . $_product->get_permalink() . '" target="_blank" rel="nofollow">' . $item_image;
$output .= ' <p class="prev-product-title">' . $_product->get_title() . '</p></a>';
$output .= '<p>Quantity: ';
$output .= $values['quantity'] . '</p>';
$output .= '<p>Price: € ' . $price . ' exc. tax</p></div>';
//...
}
我对代码没有深入的了解,对于更严重的错误我深表歉意。任何帮助是极大的赞赏。谢谢