在 WooCommerce 中结帐时的付款选项之前从订单审核表中移动运输选项
Posted
技术标签:
【中文标题】在 WooCommerce 中结帐时的付款选项之前从订单审核表中移动运输选项【英文标题】:Move shipping options from order review table before payment options on checkout in WooCommerce 【发布时间】:2020-10-20 12:23:00 【问题描述】:我想将订单审核表中的送货选项移到结帐中的付款选项之前。
我看到,订单审核表有自己的模板文件review-order.php
。
在那里我找到了以下代码:
<?php if ( WC()->cart->needs_shipping() && WC()->cart->show_shipping() ) : ?>
<?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
<?php wc_cart_totals_shipping_html(); ?>
<?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
<?php endif; ?>
我知道我可以用钩子重新排序 woocommerce_review_order_before_shipping
和 woocommerce_review_order_after_shipping
的内容。
但是代码以 if 子句开头。
所以我不确定是否或如何将该部分移动到结帐中的另一个位置。
有什么我看不到的方法吗?
【问题讨论】:
【参考方案1】:您可以剪切整个代码块,然后将其粘贴到checkout
文件夹中的另一个模板文件中
所以从checkout/review-order.php
模板文件行L67-L75剪切
<?php if ( WC()->cart->needs_shipping() && WC()->cart->show_shipping() ) : ?>
<?php do_action( 'woocommerce_review_order_before_shipping' ); ?>
<?php wc_cart_totals_shipping_html(); ?>
<?php do_action( 'woocommerce_review_order_after_shipping' ); ?>
<?php endif; ?>
到checkout/form-checkout.php
模板文件中的51 行
...
<?php do_action( 'woocommerce_checkout_after_customer_details' ); ?>
<?php endif; ?>
<!-- PASTE HERE -->
<?php do_action( 'woocommerce_checkout_before_order_review_heading' ); ?>
<h3 id="order_review_heading"><?php esc_html_e( 'Your order', 'woocommerce' ); ?></h3>
...
【讨论】:
好的,我想没有办法用函数将它从review-order.php
中删除,对吧?但我可以在form-checkout.php
中添加一个钩子。问题是,我正在使用一个插件(德国市场),它带有自己的结帐模板,我想尽可能少地接触模板。
使用钩子确实不可能在不修改模板文件的情况下删除/移动
你有例子吗?我试图钩住它并将其从review-order.php
中删除。但我没有成功。
我看不到它的优势,使用钩子您还必须编辑模板文件,因此您将拥有一个钩子(自定义代码)+编辑的模板文件,此答案仅包含编辑的模板文件,所以最终是一个“更好”,最重要的是最简单的解决方案。【参考方案2】:
添加来自@7uc1f3r 的答案
您可以剪切整个代码块,然后将其粘贴到结帐文件夹中的另一个模板文件中
您可以将插件的模板文件夹添加到 WooCommerce 的模板搜索过滤器中,这样您就可以在插件目录中拥有 WooCommerce 模板,使用以下功能:
/**
* Add plugin's templates folder to WooCommerce template locations
*/
function af_plugin_templates($template, $template_name, $template_path)
global $woocommerce;
$_template = $template;
if (!$template_path)
$template_path = $woocommerce->template_url;
$plugin_path = plugin_dir_path( __FILE__ ) . 'templates/woocommerce/';
// First check if our plugin has the template
$file = file_exists($plugin_path . $template_name);
if ($file)
$template = $plugin_path . $template_name;
// Look within passed path within the theme
if (!$template)
$template = locate_template(
array(
$template_path . $template_name,
$template_name
)
);
if (!$template)
$template = $_template;
return $template;
add_filter('woocommerce_locate_template',af_plugin_templates', 1, 3);
现在您可以将模板添加到“your_plugin/templates/woocommerce/...”目录中,它们将被优先考虑。
【讨论】:
以上是关于在 WooCommerce 中结帐时的付款选项之前从订单审核表中移动运输选项的主要内容,如果未能解决你的问题,请参考以下文章
根据 Woocommerce 选择的付款方式更改结帐时的付款按钮