gpt4 book ai didi

php - 根据送货方式 id 在 WooCommerce 新订单电子邮件通知中隐藏送货地址

转载 作者:行者123 更新时间:2023-12-04 14:49:26 26 4
gpt4 key购买 nike

如果运输标签名为“在洛克菲勒商店取货”,我想隐藏送货地址(但要显示其他取货方式)。

ID 太多,例如“local_pickup:3”,我无法过滤。我启用了送货地址显示在 emails/email-addresses.php 中尽管这是一种本地取货方式。

我的代码尝试:

<?php
/**
* Email Addresses
*
* This template can be overridden by copying it to yourtheme/woocommerce/emails/email-addresses.php.
*
* HOWEVER, on occasion WooCommerce will need to update template files and you
* (the theme developer) will need to copy the new files to your theme to
* maintain compatibility. We try to do this as little as possible, but it does
* happen. When this occurs the version of the template file will be bumped and
* the readme will list any important changes.
*
* @see https://docs.woocommerce.com/document/template-structure/
* @package WooCommerce\Templates\Emails
* @version 3.9.0
*/

if ( ! defined( 'ABSPATH' ) ) {
exit;
}

$text_align = is_rtl() ? 'right' : 'left';
$address = $order->get_formatted_billing_address();
$shipping = $order->get_formatted_shipping_address();


?><table id="addresses" cellspacing="0" cellpadding="0" style="width: 100%; vertical-align: top; margin-bottom: 40px; padding:0;" border="0">
<tr>
<td style="text-align:<?php echo esc_attr( $text_align ); ?>; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; border:0; padding:0;" valign="top" width="50%">
<h2><?php esc_html_e( 'Billing address', 'woocommerce' ); ?></h2>

<address class="address">
<?php echo wp_kses_post( $address ? $address : esc_html__( 'N/A', 'woocommerce' ) ); ?>
<?php if ( $order->get_billing_phone() ) : ?>
<br/><?php echo wc_make_phone_clickable( $order->get_billing_phone() ); ?>
<?php endif; ?>
<?php if ( $order->get_billing_email() ) : ?>
<br/><?php echo esc_html( $order->get_billing_email() ); ?>
<?php endif; ?>
</address>
</td>
<?php if ( $shipping ) : ?>
<td style="text-align:<?php echo esc_attr( $text_align ); ?>; font-family: 'Helvetica Neue', Helvetica, Roboto, Arial, sans-serif; padding:0;" valign="top" width="50%">
<h2><?php esc_html_e( 'Shipping address', 'woocommerce' ); ?></h2>

<address class="address"><?php echo wp_kses_post( $shipping ); ?></address>
</td>
<?php endif; ?>
</tr>
</table>

我需要启用它,因为我们的一些其他取件方法需要它。我正在尝试拥有它,以便如果它只是“在洛克菲勒商店取货”,那么它应该在新订单 WooCommerce 电子邮件中隐藏送货地址。

我如何根据图片中显示的文本标签对其进行过滤?

enter image description here

最佳答案

无需编辑模板文件,因为它可以通过 Hook 实现。这个答案由两部分组成:

1) 第一部分只需要执行一次,作为调试信息后面的文字会出现在新订单邮件中

DEBUG INFORMATION, shipping method id = THE_SHIPPING_METHOD_ID

第 1 部分:

// DEBUG information
function action_woocommerce_email_before_order_table( $order, $sent_to_admin, $plain_text, $email ) {
// Only for 'new order'
if ( $email->id == 'new_order' ) {
// Get shipping methods
foreach ( $order->get_shipping_methods() as $shipping_method ) {
// Get method ID
$shipping_method_id = $shipping_method->get_method_id();

// Output
echo '<p>DEBUG INFORMATION, shipping method id = ' . $shipping_method_id . '</p>';
}
}
}
add_action( 'woocommerce_email_before_order_table', 'action_woocommerce_email_before_order_table', 10, 4 );

注意:了解正确信息后,您不应再使用第 1 部分


2) 然后你可以使用我回答的第二部分,您需要将 REPLACE_THIS_WITH_THE_SHIPPING_METHOD_ID 替换为 THE_SHIPPING_METHOD_ID该信息来 self 回答的第一部分

第 2 部分:

// Setting the email_is as a global variable
function action_woocommerce_email_before_order_table( $order, $sent_to_admin, $plain_text, $email ) {
$GLOBALS['email_id_str'] = $email->id;
}
add_action( 'woocommerce_email_before_order_table', 'action_woocommerce_email_before_order_table', 10, 4 );

function filter_woocommerce_order_hide_shipping_address( $shipping_method_id, $order ) {
// Getting the email ID global variable
$refNameGlobalsVar = $GLOBALS;
$email_id = isset( $refNameGlobalsVar['email_id_str'] ) ? $refNameGlobalsVar['email_id_str'] : '';

// Only for 'new order'
if ( $email_id == 'new_order' ) {
// Replace the 2nd part in the array with the 'shipping_method_id' from the DEBUG INFORMATION
$shipping_method_id = array( 'local_pickup', 'REPLACE_THIS_WITH_THE_SHIPPING_METHOD_ID' );
} else {
// Default
$shipping_method_id = array( 'local_pickup' );
}

return $shipping_method_id;
}
add_filter( 'woocommerce_order_hide_shipping_address', 'filter_woocommerce_order_hide_shipping_address', 10, 2 );

注意: 由于在我的回答的第二部分中不知道电子邮件 ID,因此使用了一种解决方法,请参阅:https://stackoverflow.com/a/43574008/11987538

关于php - 根据送货方式 id 在 WooCommerce 新订单电子邮件通知中隐藏送货地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69296720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com