【问题标题】:Woocommerce skip checkout for free productsWoocommerce 跳过结帐免费产品
【发布时间】:2016-10-10 14:43:42
【问题描述】:

我正在 WP 和 Woocommerce 上构建网页 - 我想跳过购物车以及免费产品(或我可以指定 ID-s 的产品)的结帐页面。这些产品是免费和虚拟的(无需付款,无需运输)。该网页仅供注册用户使用 - 因此所有客户信息都存在。

我想要的结果是,如果您在产品页面上按下 ORDER 按钮 - 订单完成并且客户被重定向到感谢页面。

BR, 卡斯帕

【问题讨论】:

  • 那么您为了实现这一目标做了什么尝试?
  • 老实说,我还没有想出任何可行的解决方案。理论上它会起作用,如果产品页面上有一个按钮可以将产品添加到购物车并同时确认结帐......
  • 如果有人可以帮助我进行一些编码。如果在结帐页面上有可以这样做的功能:检查购物车是否需要付款 - 如果没有(这意味着购物车是免费的),然后触发当客户按下下订单按钮时​​触发的操作。如果是,(购物车需要付款),则什么也不做。

标签: woocommerce


【解决方案1】:

我应用了相同的概念,但在结帐时处理订单时发现了一个主要问题;字段仍然是必需的。

主要问题是通过 AJAX 处理订单(使用 is_ajax()),即使它在结帐页面上,它也没有返回为真。可能最近发生了变化,也可能是网站的环境(主题)。

这里有一些条件标签:https://docs.woocommerce.com/document/conditional-tags/

看事情如何变化,答案可以在这里编辑,但原概念位于:https://www.skyverge.com/blog/how-to-simplify-free-woocommerce-checkout/

function wc_free_checkout_fields() {
    // Bail we're not at checkout, or if we're at checkout OR AJAX (payment process) but payment is needed.
    if ( function_exists( 'is_checkout' ) && ( ! ( is_checkout() || is_ajax() ) || ( ( is_checkout() || is_ajax() ) && WC()->cart->needs_payment() ) ) ) {
        return;
    }

    // Remove coupon forms since it's irrelevant with a free cart?
    remove_action( 'woocommerce_before_checkout_form', 'woocommerce_checkout_coupon_form', 10 );

    // Remove the "Additional Info" order notes.
    add_filter( 'woocommerce_enable_order_notes_field', '__return_false' );

    // Unset the fields we don't want in a free checkout.
    function wc_unset_unwanted_checkout_fields( $fields ) {
        // Add or remove billing fields you do not want.
        // @link http://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/#section-2
        $billing_keys = array(
            'billing_company',
            'billing_phone',
            'billing_address_1',
            'billing_address_2',
            'billing_city',
            'billing_postcode',
            'billing_country',
            'billing_state',
        );

        // For each unwanted billing key, unset.
        foreach( $billing_keys as $key ) {
            unset( $fields['billing'][$key] );
        }

        return $fields;
    }
    add_filter( 'woocommerce_checkout_fields', 'wc_unset_unwanted_checkout_fields' );

    // A tiny CSS tweak for the account fields; this is optional.
    function wc_print_custom_css() {
        ?>
        <style>
            .create-account {
                margin-top: 6em;
            }
        </style>
        <?php
    }
    add_action( 'wp_head', 'wc_print_custom_css' );
}
add_action( 'wp', 'wc_free_checkout_fields' );

【讨论】:

    【解决方案2】:

    使用 WC()->cart->needs_payment() 检查结账是否免费。 看到这个了解更多信息: https://www.skyverge.com/blog/how-to-simplify-free-woocommerce-checkout/

    【讨论】:

    • 谢谢!在研究解决方案期间,我也读过这篇文章,但我(实际上是我的客户)想跳过第二个按钮点击结帐......
    • 你看到这两个链接了吗:1. wordpress.org/plugins/woocommerce-direct-checkout 2. chrislema.com/woocommerce-no-products-page
    • 第一个跳过了我已经使用过的购物车 - 它不能帮助我跳过结帐。
    • 第二个教如何在没有产品页面的情况下使用 woocommerce - 您仍然需要使用结帐。就我而言 - 我在产品页面上有一些自定义字段,客户需要填写,所以我不能跳过产品页面。
    猜你喜欢
    • 1970-01-01
    • 2017-03-10
    • 2020-07-15
    • 1970-01-01
    • 1970-01-01
    • 2015-11-15
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多