最近,我問了,并收到了兩種解決方案的答案:
- 添加元資料
- 更改元資料
一些訂單專案。僅適用于在已完成訂單上發送的 WooCommerce 電子郵件通知的解決方案。
收到的解決方案的問題在于,為了將它們僅限于電子郵件通知,使用了該is_wc_endpoint_url()功能,在我的特殊情況下(我不知道為什么!),使它們僅適用于發送給管理員的通知,但不適用于客戶,他們實際上是相關元資料的主要接收者。
有什么辦法可以解決這個is_wc_endpoint_url()函式的問題嗎?
第一個答案,添加元資料:
function action_woocommerce_order_item_meta_start( $item_id, $item, $order, $plain_text ) {
// On email notifications
if ( ! is_wc_endpoint_url() && $item->is_type('line_item') ) {
echo '<ul ><li><strong >Label</strong><p>Value order id = ' . $order->get_id() . '</p></li></ul>';
}
}
add_action( 'woocommerce_order_item_meta_start', 'action_woocommerce_order_item_meta_start', 10, 4 );
第二個答案(選項之一),更改元資料:
function filter_woocommerce_order_item_get_formatted_meta_data( $formatted_meta, $item ) {
// Only on emails notifications
if ( is_admin() || is_wc_endpoint_url() )
return $formatted_meta;
foreach ( $formatted_meta as $key => $meta ) {
$formatted_meta[$key]->display_key = 'new key';
$formatted_meta[$key]->display_value = 'new value';
}
return $formatted_meta;
}
add_filter( 'woocommerce_order_item_get_formatted_meta_data', 'filter_woocommerce_order_item_get_formatted_meta_data', 10, 2 );
uj5u.com熱心網友回復:
is_wc_endpoint_url()可以通過應用全域變數來替代用于 WooCommerce 電子郵件通知
要確定它是否是 WooCommerce 電子郵件通知,我們可以通過woocommerce_email_before_order_table僅適用于 WooCommerce 電子郵件通知的鉤子 ( )創建一個全域變數
// Setting global variable
function action_woocommerce_email_before_order_table( $order, $sent_to_admin, $plain_text, $email ) {
$GLOBALS['email_data'] = array(
'email_id' => $email->id, // The email ID (to target specific email notification)
'is_email' => true // When it concerns a WooCommerce email notification
);
}
add_action('woocommerce_email_before_order_table', 'action_woocommerce_email_before_order_table', 1, 4 );
這可以根據需要進一步擴展
然后我們可以檢查其他鉤子,在這種特定情況下是woocommerce_order_item_meta_start鉤子(但它可以應用于任何 WooCommerce 電子郵件通知相關的鉤子)以查看該全域變數是否可用,如果可用,我們可以基于該變數執行一些操作.
- 示例 1:它是電子郵件通知嗎?
- 示例 2:
$email->id如果默認情況下電子郵件 ID 尚未傳遞給所需的鉤子,則使用來定位特定的電子郵件通知
function action_woocommerce_order_item_meta_start( $item_id, $item, $order, $plain_text ) {
// Getting the custom 'email_data' global variable
$ref_name_globals_var = $GLOBALS;
// Isset & NOT empty
if ( isset ( $ref_name_globals_var ) && ! empty( $ref_name_globals_var ) ) {
// Isset
$email_data = isset( $ref_name_globals_var['email_data'] ) ? $ref_name_globals_var['email_data'] : '';
// NOT empty
if ( ! empty( $email_data ) ) {
// Example 1
// When true
if ( $email_data['is_email'] ) {
echo '<p style="color: red; font-size: 30px;">This is a WooCommerce email notification</p>';
}
// Example 2
// Add the desired email IDs
$target_emails = array( 'customer_processing_order', 'customer_on_hold_order', 'customer_refunded_order' );
// Target specific WooCommerce email notifications
if ( in_array( $email_data['email_id'], $target_emails ) ) {
echo '<p style="color: red; font-size: 30px;">Email ID = ' . $email_data['email_id'] . '</p>';
}
}
}
}
add_action( 'woocommerce_order_item_meta_start', 'action_woocommerce_order_item_meta_start', 10, 4 );
在這個答案中使用:
僅確定 WooCommerce 管理員電子郵件通知
如何定位其他 WooCommerce 訂單電子郵件
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/370973.html
標籤:php WordPress的 求购 电子邮件通知
