获取Woocommerce自定义电子邮件内容的自定义电子邮件占位符值 [英] Get custom email placeholder value on Woocommerce custom email content

查看:84
本文介绍了获取Woocommerce自定义电子邮件内容的自定义电子邮件占位符值的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经在WooCommerce中创建了自己的电子邮件课程.因为我在电子邮件内容中需要一个自定义参数,所以我在wc电子邮件触发函数中添加了一个带有此自定义参数的占位符:

I've created my own email class in WooCommerce. Because I need a custom parameter in my email content, I've added a placeholder with this custom parameter to the wc email trigger function:

public function trigger( $order_id, $firstname, $lastname, $order = false ) {
        $this->setup_locale();

        if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
            $order = wc_get_order( $order_id );
        }

        if ( is_a( $order, 'WC_Order' ) ) {
            $this->object                                = $order;
            $this->recipient                             = $this->object->get_billing_email();
            $this->placeholders['{order_date}']          = wc_format_datetime( $this->object->get_date_created() );
            $this->placeholders['{order_number}']        = $this->object->get_order_number();
            $this->placeholders['{full_name}'] = $firstname . ' ' . $lastname;
        }

        if ( $this->is_enabled() && $this->get_recipient() ) {
            $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
        }

    $this->restore_locale();
}


在他完成之后,我在内容PHP文件中完成了此操作:


After his I've did this in the content PHP file:

<?php printf( __( get_option( 'wc_custom_email_info' ) ), '{full_name}' ); ?>

在选项中,我写了%s,以便可以将全名添加到内容中.但可悲的是,我得到的是占位符的名称,而不是内容:

In the option I've wrote %s so that I can add the full name into to content. But sadly I'm getting the name of the placeholder and not the content:

Blaaaaaaa {full_name} blaaaa

Blaaaaaaa {full_name} blaaaa

但是我在这里需要这个

Blaaaaaaa乔·马丁blaaaa

Blaaaaaaa Joe Martin blaaaa

更新

这里的名称不是订单中的客户名称.这是我通过按钮触发的do_action传递的名称.因此,当页面上的某人单击此按钮时,我正在获取其用户ID并从单击该按钮的用户那里获取名称.这是我使用的自定义电子邮件触发器:

Update

The name here is not the customer name from the order. This is a name which I pass through a do_action which I trigger from a button. So when someone on my page clicks this button, I'm fetching his user id and get the name from the user who clicked the button. This is the custom email trigger I use:

$user      = get_userdata( get_current_user_id() );
$firstname = $user->user_firstname;
$lastname  = $user->last_name;

//Trigger email sending
do_action( 'trigger_email', $order_id, $firstname, $lastname );

然后我在电子邮件课程中这样做:

Then I do this in the email class:

//Trigger for this email.
add_action( 'trigger_email', array( $this, 'trigger' ), 10, 10 );

此后,您可以返回顶部触发功能.

After this you can go back to the top trigger function.

推荐答案

已更新

电子邮件中的占位符仅适用于Woocommerce中的电子邮件主题

Placeholders in email are only for the email subject in Woocommerce

因此,您尝试执行的操作无法通过这种方式进行.

So what you are trying to do can't work this way.

相反,您需要对trigger()函数进行一些更改,并在类中添加另一个方法:

Instead you will need to make a little change in your trigger() function and adding another method in your class:

/**
 * Trigger the sending of this email.
*/
public function trigger( $order_id, $firstname, $lastname, $order = false ) {
    $this->setup_locale();

    if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
        $order = wc_get_order( $order_id );
    }

    if ( is_a( $order, 'WC_Order' ) ) {
        $this->object                                = $order;
        $this->recipient                             = $this->object->get_billing_email();
        $this->placeholders['{order_date}']          = wc_format_datetime( $this->object->get_date_created() );
        $this->placeholders['{order_number}']        = $this->object->get_order_number();
        $this->formatted_name                        = $firstname . ' ' . $lastname;
    }

    if ( $this->is_enabled() && $this->get_recipient() ) {
        $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
    }

    $this->restore_locale();
}

/**
 * Get email content.
 *
 * @return string
 */
public function get_content() {
    $this->sending = true;

    if ( 'plain' === $this->get_email_type() ) {
        $email_content = preg_replace( $this->plain_search, $this->plain_replace, strip_tags( $this->get_content_plain() ) );
    } else {
        $email_content = str_replace( '{full_name}', $this->formatted_name, $this->get_content_html() );
    }

    return wordwrap( $email_content, 70 );
}

这一次,在模板(内容)中使用时,应将您的占位符替换为动态$firstname . ' ' . $lastname;:

This time your placeholder should be replaced with your dynamic $firstname . ' ' . $lastname; when using in your template (content):

<?php printf( get_option( 'wc_custom_email_info' ), '{full_name}' ); ?>


原始答案

请尝试使用WC_Order方法 get_formatted_billing_full_name() :

Try the following instead that use WC_Order method get_formatted_billing_full_name():

public function trigger( $order_id, $firstname, $lastname, $order = false ) {
    $this->setup_locale();

    if ( $order_id && ! is_a( $order, 'WC_Order' ) ) {
        $order = wc_get_order( $order_id );
    }

    if ( is_a( $order, 'WC_Order' ) ) {
        $this->object                                = $order;
        $this->recipient                             = $this->object->get_billing_email();
        $this->placeholders['{order_date}']          = wc_format_datetime( $this->object->get_date_created() );
        $this->placeholders['{order_number}']        = $this->object->get_order_number();
        $this->placeholders['{full_name}']           = $this->object->get_formatted_billing_full_name();
    }

    if ( $this->is_enabled() && $this->get_recipient() ) {
        $this->send( $this->get_recipient(), $this->get_subject(), $this->get_content(), $this->get_headers(), $this->get_attachments() );
    }

    $this->restore_locale();
}

应该可以.在代码之前,未定义$firstname$lastname

It should works. Before on your code $firstname and $lastname were not defined;

这篇关于获取Woocommerce自定义电子邮件内容的自定义电子邮件占位符值的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆