Php 带有$email变量参数的自定义通知问题

Php 带有$email变量参数的自定义通知问题,php,wordpress,object,woocommerce,email-notifications,Php,Wordpress,Object,Woocommerce,Email Notifications,我有两个自定义电子邮件收发设置为wc\u shipped\u order和wc\u received\u order,效果非常好。我设置了触发器,所以当订单的状态更改为“shipped”时,它会触发shipped order电子邮件邮件 我正试图通过另一个自定义插件通过action hookwoocommerce\u email\u before\u order\u表添加跟踪发货代码,如下所示: add_action( 'woocommerce_email_before_order_table'

我有两个自定义电子邮件收发设置为
wc\u shipped\u order
wc\u received\u order
,效果非常好。我设置了触发器,所以当订单的状态更改为“shipped”时,它会触发shipped order电子邮件邮件

我正试图通过另一个自定义插件通过action hook
woocommerce\u email\u before\u order\u表添加跟踪发货代码,如下所示:

add_action( 'woocommerce_email_before_order_table', 'tracking_number_email', 10, 4 );
function tracking_number_email( $order, $sent_to_admin, $plain_text, $email ) {
    if( 'wc_shipped_order_email' == $email->id ){
        echo '<p><strong>'.__('Australia Post Tracking Number').': </strong>' . get_post_meta( $order->get_id(), 'tracking_number', true ) . '</p>';
    }
}
它不知道
$email->id
是什么,我尝试过为
$email
转储这些变量,但没有任何结果


有人能帮我吗?

在WooCommerce
中,$email
变量参数应该是一个对象,您可以在其中获取一些属性(例如代码中的
id
)。抛出的错误表明它不是一个对象,因此不可能从中获取任何属性(因此
id
属性也不可能)

为了避免此问题,可以使用PHP条件函数
is\u object()
如下:

add_action( 'woocommerce_email_before_order_table', 'tracking_number_email', 10, 4 );
function tracking_number_email( $order, $sent_to_admin, $plain_text, $email ) {
    if( is_object($email) && 'wc_shipped_order_email' == $email->id ){
        $tracking_number = get_post_meta( $order->get_id(), 'tracking_number', true );

        if ( ! empty($tracking_number) ) {
            echo '<p><strong>'.__('Australia Post Tracking Number').': </strong>' . $tracking_number . '</p>';
        }
    }
}
add_action('woocommerce_-email_-before_-order_-table','tracking_-number_-email',10,4);
功能跟踪\u编号\u电子邮件($order、$sent\u to\u admin、$plain\u text、$email){
如果(是对象($email)&“wc\u已发货”\u订单\u email'==$email->id){
$tracking\u number=get\u post\u meta($order->get\u id(),'tracking\u number',true);
如果(!空($tracking_number)){
回显“”.uuu(“澳大利亚邮政跟踪编号”):“.$Tracking_u编号”。

”; } } }
现在应该可以正常工作了

现在,这个问题可能与插件、主题或其他自定义代码有关。根据提供的信息,没有人能猜出为什么会发生这种情况

add_action( 'woocommerce_email_before_order_table', 'tracking_number_email', 10, 4 );
function tracking_number_email( $order, $sent_to_admin, $plain_text, $email ) {
    if( is_object($email) && 'wc_shipped_order_email' == $email->id ){
        $tracking_number = get_post_meta( $order->get_id(), 'tracking_number', true );

        if ( ! empty($tracking_number) ) {
            echo '<p><strong>'.__('Australia Post Tracking Number').': </strong>' . $tracking_number . '</p>';
        }
    }
}