我需要在订单处理电子邮件的底部添加一些文本,如果客户购买了“注册”类别的产品,则在下订单时发送给客户。但我不希望文本显示是否也购买了其他类别的产品。当使用以下代码成功购买“注册”类别的产品时,我能够显示所需的文本:
$order_id = $order->get_id();
$order = wc_get_order( $order_id );
$items = $order->get_items();
foreach ( $items as $item_id => $item_data ) {
$product = $item_data->get_product();
$categories = array();
$terms = get_the_terms( $product->get_id(), \'product_cat\' );
if ( is_wp_error( $terms ) || empty( $terms ) ) {
continue;
}
foreach ( $terms as $term ) {
if(strtolower($term->name) === \'registration\'){
// Run any html code after this closing php tag -> ?>
<p>
Didn\'t get your gear yet? Click <a href="https://flexfootball.com/shop/">HERE</a> to order yours!
</p>
<?php } // Close "product is a registration form" condition
}
}
如果购买了其他类别的产品,则不会显示文本。这很好,但如果有人从“注册”类别和其他类别购买产品,则会显示代码。
因此,重申一下:
如果在“注册”类别中购买了物品,则会显示文本
如果购买的商品属于“注册”以外的类别,则不会显示文本
如果在“注册”类别和其他类别中购买了某个项目,则不会显示文本
我想我需要一个if
一条严格的语句,仅当“Registration”是数组中的唯一类别时才为真。
非常感谢您的帮助!
最合适的回答,由SO网友:phatskat 整理而成
尝试以下操作:
<?php
$order_id = $order->get_id();
$order = wc_get_order( $order_id );
$items = $order->get_items();
$is_valid = null;
foreach ( $items as $item_id => $item_data ) {
$product = $item_data->get_product();
$categories = array();
$terms = get_the_terms( $product->get_id(), \'product_cat\' );
if ( is_wp_error( $terms ) || empty( $terms ) ) {
continue;
}
foreach ( $terms as $term ) {
if( false !== $is_valid && strtolower($term->name) === \'registration\'){
$is_valid = true;
continue;
}
$is_valid = false;
}
}
if ( $is_valid ) {
// Run any html code after this closing php tag -> ?>
<p>
Didn\'t get your gear yet? Click <a href="https://flexfootball.com/shop/">HERE</a> to order yours!
</p>
<?php // Close "product is a registration form" condition
}
基本要点是您正在设置
$is_valid
作为
NULL
价值如果任何类别不是
registration
, 然后
$is_valid
变为布尔型
false
. 如果类别为
registration
以及
$is_valid
不是严格意义上的(
!==
)
false
, 设置
$is_valid
到布尔值
true
.
最后,循环完成后,如果$is_valid
是true
, 添加消息。