基于产品的WooCommerce订单处理电子邮件中的自定义文本

时间:2019-05-01 作者:Nick Taylor

我需要在订单处理电子邮件的底部添加一些文本,如果客户购买了“注册”类别的产品,则在下订单时发送给客户。但我不希望文本显示是否也购买了其他类别的产品。当使用以下代码成功购买“注册”类别的产品时,我能够显示所需的文本:

$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”是数组中的唯一类别时才为真。

非常感谢您的帮助!

1 个回复
最合适的回答,由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_validtrue, 添加消息。

相关推荐

无法成功执行AJAX脚本以调用函数.php特定的函数。使用XAMPP本地主机进行测试

在过去的12个小时里,我一直在努力掌握AJAX,但我正在慢慢失去它。如何通过表单或任何其他方式传递两个基本输入日期,而不是刷新页面,并让它执行包含JS脚本的PHP函数?在我将值传递给脚本之前,我只想回显我传递的数据数组,看看是否。。。ajax正在发挥作用。表单按钮只会刷新页面,所以我认为AJAX根本没有发挥作用。我正在试穿https://localhost 对于xampp。我不知道停止刷新并在按钮上插入ajax脚本缺少了什么。欣赏任何见解。功能。php<?php add_action(\'w