当前位置: 首页 > 知识库问答 >
问题:

在WooCommerce电子邮件通知中添加基于产品ID的自定义链接文本

商焕
2023-03-14

在我的WooCommerce网上商店里,我出售洗发水和肥皂等天然产品。目前我只有2个产品。

我想添加一个特定的文本字符串,其中包含一个超链接,指向购买产品的一些背景信息,以防止人们感到困惑:

  • 如果他们购买棕榈油洗发水,我想发送一个超链接,其中包含我们如何制作洗发水等的背景信息。
  • 如果他们买肥皂,我也想买肥皂。

产品A等于超链接A,产品B等于超链接B。

到目前为止,我得到的是:

$order = wc_get_order( $order_id ); // optional (to test without it)

foreach ($order->get_items() as $item_id => $item) {
    $product_name = $item['Palm Oil Shampoo']; // product name
    $product_id = $order->get_item_meta($item_id, '_POShamp_05', true); // product ID
    $product_description = get_post($product_id)->post_content; // Product description
}

但它不起作用。

如何在客户电子邮件通知中添加一些基于购买的产品的带有特定链接的自定义文本?

共有1个答案

柯瀚海
2023-03-14

关于WooCommerce 3,你的代码有点过时了,应该是这样的:

    foreach ( $order->get_items() as $item_id => $item ) {
        $product_name = $item->get_name(); // The product name
        $product_id = $item->get_product_id(); // The product ID
        $product = $item->get_product(); // The WC_Product Object
        $product_description = $product->get_description(); // The Product description
    }

现在,您可以根据产品ID在一些客户电子邮件通知中显示链接文本,在这个自定义挂钩函数中定义您的产品ID、链接、文本、标题……还请记住,您可以在一个订单中拥有许多不同的产品。

代码如下:

// Add custom text hyperlinks to Order items
add_action( 'woocommerce_email_after_order_table', 'add_product_custom_link', 9, 4 );
function add_product_custom_link( $order, $sent_to_admin, $plain_text, $email )
{
    // Only for customer "Processing" and "Completed" Order email notifications
    if( ! ($email->id == 'customer_processing_order' || $email->id == 'customer_completed_order') ) return;

    // HERE (Below) define your product IDs, links, texts, title …
    $product_id1 = 37;
    $product_id2 = 53;
    $link1 = home_url( '/some-path/product-info1/' );
    $link2 = home_url( '/some-path/product-info1/' );
    $text1 = __( 'Your linked text1' );
    $text2 = __( 'Your linked text1' );
    $title = __("Product Documentation Link");
    $instroduction = __("Some introduction text paragraph here, blabla bla blabla blablabla bla blabla. …");


    // Iterating through order "line items"
    foreach ( $order->get_items() as $item_id => $item ) {
        $product_id = $item->get_product_id(); // The product ID

        // Set all the product IDs in this order in an array
        $product_ids[$product_id] = $product_id;
    }

    $has_product = false;

    // CSS style
    $styles = '<style>
        table.product-info{width: 100%; font-family: \'Helvetica Neue\', Helvetica, Roboto, Arial, sans-serif;
            color: #737373; border: 1px solid #e4e4e4; margin-bottom:8px;}
        table.product-info th, table.product-info td{text-align: left; border-top-width: 4px;
            color: #737373; border: 1px solid #e4e4e4; padding: 12px;}
        table.product-info td{text-align: left; border-top-width: 4px; color: #737373; border: 1px solid #e4e4e4; padding: 12px;}
        </style>
        ';

    // HTML (start)
    $html_output = '<h2>'.$title.'</h2>
        <p>'.$instroduction.'</p>
        <table class="product-info" cellspacing="0" cellpadding="6">';

    // Iterating through the product ids (when multiple products are in  the order)
    foreach ( $product_ids as $value_id ) {
        // ==> HERE Replace links path and linked text by yours (for each product)
        if ( $product_id == $product_id1 ) {
            // PRODUCT 1
            $html_output .= '<tr><td><a href="' . $link1 . '">' . $text1 . '</a></td></tr>'; // HTML
            $has_product = true;
        } elseif ( $product_id == $product_id2 ) {
            // PRODUCT 2
            $html_output .= '<tr><td><a href="' . $link2 . '">' . $text2 . '</a></td></tr>'; // HTML
            $has_product = true;
        }
    }

    if( $has_product ){
        $html_output .= '</table><br>'; // HTML (end)

        // Output CSS and HTML
        echo $styles . $html_output;
    }
}

在WooCommerce 3和works上测试。您将得到如下结果:

 类似资料:
  • 因此,当我在mytheme/functions.php文件中编写这段代码时,这里有一个交易 它只在后端工作(产品编辑页面),它保存了变量,但没有显示在meta或add to card按钮之前或之后,我找不到解决方案 我尝试了echo,但仍然没有结果 所以我以为我是我的主题?不,我在其他vps上安装了wordpress,但我仍然没有显示文本字段text nothing 如果你知道这个问题,请友好地告

  • 我有一个插件管理我的货件与两个自定义状态:等待-装运和装运。 我尝试添加一个电子邮件发送时,订单传递到发货。 我在Stack Overflow:Woocommerce退款电子邮件中发现了这一点,但我可以知道它是如何工作的 下面是我的插件文件代码: 我用下面的helgatheviking和Adrien Leber的建议更新了我的代码 和我的班级: 当我改变我的订单状态时,什么也没有发生!我的触发函数

  • 如何将产品说明/单个产品页面的内容(而非简短说明)添加到WooCommerce新订单电子邮件通知中? 我需要知道我的产品的具体书面描述,因为大多数产品几乎都是一样的。

  • 我正在尝试将产品类别添加到电子邮件通知中。自定义字段(时间和日期)起作用,但产品类别显示为“数组”。

  • 我正在尝试修改自动生成的WooCommerce订单电子邮件中的产品图像。请注意,我尝试使用钩子来实现这一点,而不是创建一个修改过的电子邮件模板。 首先,我在单一产品页面上有一个隐藏的输入。我有一些JS设置图像的ID,它基于产品的颜色(我用ACF制作的自定义属性)。 为了便于参考,我在购物车页面上做了以下工作: 这很好,但我很难按顺序复制电子邮件。到目前为止,我遇到了以下几点。这会在电子邮件中显示图

  • 如果客户下了一个订单,我想添加相应的电子邮件通知每个订单项目到新的订单电子邮件通知。 如何将产品自定义域中的收件人添加到Woocommerce新订单电子邮件通知中?