在includes子文件夹上的 Woocommerce 插件中,有一个文件wc-cart-functions.php.
我想更改函数wc_cart_totals_shipping_method_label(),但不允许将函数复制到我的主题的functions.php。我相信我必须使用自定义操作/过滤器来更改此核心功能,但不知道该怎么做。
原函数:
function wc_cart_totals_shipping_method_label( $method ) {
$label = $method->get_label();
$has_cost = 0 < $method->cost;
$hide_cost = ! $has_cost && in_array( $method->get_method_id(), array( 'free_shipping', 'local_pickup' ), true );
if ( $has_cost && ! $hide_cost ) {
if ( WC()->cart->display_prices_including_tax() ) {
$label .= ': ' . wc_price( $method->cost + $method->get_shipping_tax() );
if ( $method->get_shipping_tax() > 0 && ! wc_prices_include_tax() ) {
$label .= ' <small class="tax_label">' . WC()->countries->inc_tax_or_vat() . '</small>';
} …Run Code Online (Sandbox Code Playgroud) 无论在结账时选择哪种送货方式,WooCommerce 过去都会显示送货地址,如果您必须在电子邮件中隐藏送货地址,则必须执行自定义工作,例如“/sf/ask/2725539841/送货地址在本地取货在 woocommerce-email-notifications/38937106#38937106”回答线程。
新更新后,如果在结账时选择了本地取货,WooCommerce 会在订单电子邮件中隐藏送货地址。即使选择了本地取货,我也想在订单电子邮件中显示送货地址,如果未提供送货地址,则应默认为帐单地址(如果选择任何其他送货方式进行结帐,则会发生这种情况)。不知道从哪里开始。
编辑#1:
与 Woocommerce 支持人员讨论后,更改没有记录在案,但他们能够指导我这是从哪里来的。根据他们的说法,我应该能够使用woocommerce_order_needs_shipping_address过滤器钩子,即使使用本地取货来结账,它也会开始在订单电子邮件中显示送货地址。
任何帮助,将不胜感激。
我的产品上有多种可变产品。https://alcocovers.com/shop/我面临的问题是:添加到购物车后,垃圾箱防水布在购物车页面上列出了项目数据,但产品Lugger Cover没有。这是一个屏幕截图:
我认为我在网站上使用的购物车项目数据模板存在一些问题,但我检查后发现没有任何问题(作为参考,这里是模板代码https://pastebin.com/fswKRZ8a)。我禁用了所有自定义模板,结果是相同的。我还仔细检查了这两种产品的设置方式是否完全相同,所以我不知道这背后的原因是什么。任何人都知道这会是什么原因造成的?
更新 #1:一位朋友建议,也许是因为 Lugger Cover 页面只有一个属性,这就是为什么它没有列出购物车上的商品数据。但我创建了一个测试页面,该页面也没有在购物车上列出商品数据...
更新 #2:我向测试页面添加了第三个属性,现在商品数据显示在购物车页面上。不知道为什么对于在产品页面上使用一个/两个属性的产品,项目数据不会显示在购物车上。我重新检查了模板文件,没有问题。
我试图找到一种方法从 WooCommerce 结帐页面的“州”下拉列表中删除一些美国州。
状态列表:
到目前为止我一直在做什么:
我一直在手动删除它们,如本链接中所述。但这不是一个好方法,因为每次更新 WooCommerce 时更改都会被覆盖。
我发现的替代方法: 在此链接上WooCommerce 根据类别限制运输到状态,如果满足特定条件,则可以设置运输状态。我想知道是否可以取消设置五个状态。这听起来比设置50 个状态更合乎逻辑。但不幸的是,我找不到任何有用的东西。
任何想法可能是一个可能的解决方案?
我通过更改模板在运输方式部分添加了两个自定义输入字段,/genesis-sample/woocommerce/checkout/review-order.php
我还设法使它们有条件地需要。只有当特定的单选按钮被选中时,输入字段才会出现并成为必需的。我正在使用 jQuery 代码使字段出现和消失。所有这些都运行良好。代码在这里:
if ( isset($_POST['shipping_method_0_legacy_local_pickup']) && $_POST['shipping_method_0_legacy_local_pickup'] == 1 ) {
$cheq = 'true';
}
else {
$cheq = 'false';
}
woocommerce_form_field( 'fieldtester1' , array(
'type' => 'text',
'class' => array('wccs-field-class wccs-form-row-wide blahblah1'),
'label' => 'Enter Your Carrier Name',
'required' => $cheq,
'placeholder' => 'Carrier Name',
), $checkout->get_value( 'fieldtester1' ));
woocommerce_form_field( 'fieldtester2' , array(
'type' => 'text',
'class' => array('wccs-field-class wccs-form-row-wide blahblah2'),
'label' => 'Enter Your Carrier Account #',
'required' => $cheq,
'placeholder' => 'Carrier Number',
), …Run Code Online (Sandbox Code Playgroud) 在订单电子邮件模板中(例如email-order-items.php),WooCommerce使用此功能wc_display_item_meta在订单表中显示产品详细信息。wc-template-functions.php文件中存在功能代码(行号3011)。我正在复制下面的功能代码以供参考
function wc_display_item_meta( $item, $args = array() ) {
$strings = array();
$html = '';
$args = wp_parse_args( $args, array(
'before' => '<ul class="wc-item-meta"><li>',
'after' => '</li></ul>',
'separator' => '</li><li>',
'echo' => true,
'autop' => false,
) );
foreach ( $item->get_formatted_meta_data() as $meta_id => $meta ) {
$value = $args['autop'] ? wp_kses_post( $meta->display_value ) : wp_kses_post( make_clickable( trim( $meta->display_value ) ) );
$strings[] = '<strong class="wc-item-meta-label">' . wp_kses_post( $meta->display_key ) . ':</strong> ' . …Run Code Online (Sandbox Code Playgroud) 这就是我想要做的:
如果客户选择加拿大作为发货国家/地区,并且购物车中有特定产品,则不应进行结账,并且应生成一条错误消息,通知客户为何未进行结账。
我的研究:
添加或删除 woocommerce 错误消息包含生成 WooCommerce 错误消息的代码。我昨天问了一个问题,它给了我代码来检查某些产品是否在购物车中,以及运送国家/地区是否设置为加拿大当特定产品在 Woocommerce 上的购物车中时,从国家/地区列表中删除加拿大我不确定我必须挂钩哪个过滤器/操作代码,以便每当在结帐页面上单击“下订单”时它都会运行。
更新:所以我尝试结合我在研究
中列出的两个代码,但它不起作用。如果我需要以不同的方式处理此问题,任何帮助都将非常感激
产品 ID 是 15631 和 12616