将产品标签名称添加到WooCommerce新订单电子邮件主题

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

我正在尝试将所订购产品的每个标签添加到管理新订单电子邮件中。我还需要添加产品的名称,我可以这样做,但似乎无法获得标签。以下是我的代码:

add_filter(\'woocommerce_email_subject_new_order\', \'change_admin_email_subject\', 10, 2);
function change_admin_email_subject( $subject, $order ) {
    $products_names = array();
    $product_id = array();
    $product_tag = array();

    foreach ( $order->get_items() as $item_id => $item ) {
        $products_names[] = $item->get_name();
        $product_id[] = $order->get_item_meta($item_id, \'_product_id\', true); // product ID
        $product_tag[] = get_the_terms($product_id, \'product_tag\');
    }

    return sprintf( \'[%s] New Order (#%s): Season: %s, Item: %s from %s %s\',
        wp_specialchars_decode(get_option(\'blogname\'), ENT_QUOTES),
        $order->get_id(),
        implode(\', \', $product_tag),
        implode(\', \', $products_names),
        $order->get_billing_first_name(),
        $order->get_billing_last_name()
    );
}
但这只会生成一个空白数组。任何帮助都会很棒。

1 个回复
最合适的回答,由SO网友:LoicTheAztec 整理而成

您将获得一个空白数组,因为您正在存储WP_Term product标记数组中的对象,然后在WP\\u Term对象的多维数组上使用inpolde(),这会在sprintf()函数上产生第一个错误,最后是第二个错误。

更好地使用wp_get_post_terms() 允许获取术语名称,而不是WP_Term 对象。

您还需要删除重复的产品名称或/和产品标签术语名称。

请尝试以下操作:

add_filter(\'woocommerce_email_subject_new_order\', \'change_admin_email_subject\', 10, 2);
function change_admin_email_subject( $subject, $order ) {
    $products_names = $products_tags = [];

    foreach ( $order->get_items() as $item ) {
        // Get the product tags term names in an array
        $term_names = wp_get_post_terms($item->get_product_id(), \'product_tag\', [\'fields\' => \'names\']);

        $products_tags    = array_merge($products_tags, $term_names);
        $products_names[] = $item->get_name();
    }

    return sprintf( \'[%s] New Order (#%s): Season: %s, Item: %s from %s %s\',
        wp_specialchars_decode(get_option(\'blogname\'), ENT_QUOTES),
        $order->get_order_number(),
        implode(\', \', array_unique($products_tags)), 
        implode(\', \', array_unique($products_names)),
        $order->get_billing_first_name(),
        $order->get_billing_last_name()
    );
}
代码进入功能。活动子主题(或活动主题)的php文件。已测试并正常工作。

相关推荐

致命错误:Required():无法打开所需的‘WP_DIRUP-BLOG-Header.php’

我是一名游戏开发人员,不太熟悉网络编程。我正在尝试将我的网站积分系统MyCred与我的游戏联系起来。Mycred有用于与其他站点的点进行交互的代码片段。我使用了他们的代码片段,但我一直收到以下错误:致命错误:require():无法打开required“WP\\u DIRwp-blog-header”。php“(include\\u path=”.:/usr/lib/php7.2“)位于http://homepages/24/d773619225/htdocs/clickandbuilds/SefronG