在 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_shippingwoocommerce_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 选择的付款方式更改结帐时的付款按钮

结帐页面中的 Woocommerce 付款方式检测

php 在WooCommerce结帐付款之前添加自定义通知

在 Woocommerce 中的订单详细信息表之前更改付款方式位置

WooCommerce 在输入邮政编码之前阻止结帐

Woocommerce,当用户在结帐时选择一个选项时添加费用