#php #wordpress #object #woocommerce #email-notifications
#php #wordpress #объект #woocommerce #email-уведомления
Вопрос:
У меня есть 2 пользовательских почтовых ящика, настроенных как wc_shipped_order
amp; wc_received_order
, и они отлично работают. У меня установлен триггер, поэтому, когда статус заказа изменяется на «отправлено», он запускает отправитель электронной почты отправленного заказа.
Я пытаюсь добавить код отслеживания доставки с помощью другого пользовательского плагина через хук действия woocommerce_email_before_order_table
со следующим:
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>';
}
}
Однако, когда я пытаюсь добавить оператор if, чтобы проверить, была ли почтовая wc_shipped_order
программа, я получаю сообщение об ошибке. Фактическая часть echo работает, но оператор IF терпит неудачу и выдает эту ошибку:
Notice: Trying to get property 'id' of non-object in /var/www/wp-content/plugins/my-custom-functions/inc/php/functional.php(103) : eval()'d code on line 239
Он понятия не имеет, что $email->id
это такое, и я пытался сбросить эти переменные $email
, но там ничего нет.
Кто-нибудь может мне помочь?
Ответ №1:
Ожидается, что в WooCommerce $email
переменный аргумент будет объектом, из которого вы можете получить некоторые свойства (например id
, в вашем коде). Выданная ошибка сообщает, что это не объект, поэтому невозможно получить от него какое-либо свойство (и, следовательно, не id
свойство).
Чтобы избежать этой проблемы, вы можете использовать условную функцию PHP is_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) amp;amp; '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>';
}
}
}
Теперь он должен работать без ошибок.
Теперь эта проблема может быть связана с плагином, вашей темой или каким-либо другим пользовательским кодом, созданным вами. С предоставленной информацией никто не может догадаться, почему это происходит.