Woocommerce跳过免费产品的结帐

Woocommerce跳过免费产品的结帐,woocommerce,Woocommerce,我正在建立关于WP和Woocommerce的网页-我想跳过购物车,也可以跳过免费产品(或我可以指定ID-s的产品)的结帐页面。这些产品是免费和虚拟的(无需付款,无需运输)。该网页仅由注册用户使用-因此所有客户信息均存在 我想要的结果是,如果您按下产品页面上的订单按钮,订单就完成了,客户会被重定向到感谢页面 比尔, Kaspar使用WC()->购物车->需要付款()检查结账是否没有费用。 有关更多信息,请参见此: 我应用了相同的概念,但在结帐时处理订单时发现了一个主要问题;字段仍然是必需的 主要问

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

我想要的结果是,如果您按下产品页面上的订单按钮,订单就完成了,客户会被重定向到感谢页面

比尔,
Kaspar

使用WC()->购物车->需要付款()检查结账是否没有费用。 有关更多信息,请参见此:

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

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

以下是一些条件标记:

看到事物如何变化,答案可以在此处编辑,但原始概念位于:

函数wc\u free\u checkout\u fields(){
//我们不是在结帐,或者如果我们在结帐或AJAX(支付过程),但需要付款。
如果(函数_存在('is_checkout')&&(!(is_checkout()| is_ajax())|((is_checkout()| is_ajax())&&WC()->购物车->需要支付()){
回来
}
//删除优惠券表单,因为它与免费购物车无关?
删除操作(“woocommerce结账前表格”、“woocommerce结账优惠券表格”,10);
//删除“附加信息”订单注释。
添加过滤器('woocommerce'u enable'u order'u notes'u field','u return'u false');
//取消设置我们不希望在免费签出中使用的字段。
函数wc\u unset\u不需要的\u签出\u字段($fields){
//添加或删除不需要的帐单字段。
//@linkhttp://docs.woothemes.com/document/tutorial-customising-checkout-fields-using-actions-and-filters/#section-2
$billing\u keys=数组(
“账单公司”,
“计费电话”,
“账单地址1”,
“账单地址2”,
"发单城市",,
“账单邮政编码”,
“计费国家”,
“账单州”,
);
//对于每个不需要的计费密钥,取消设置。
foreach($key作为$key计费){
未设置($fields['billing'][$key]);
}
返回$fields;
}
添加_过滤器(“woocommerce_签出_字段”、“wc_取消设置_不需要的_签出_字段”);
//帐户字段的CSS微调;这是可选的。
函数wc\u print\u custom\u css(){
?>
.创建帐户{
边缘顶端:6em;
}

有无数的WooCommerce插件可供您使用。其中一个(免费)插件是:


你也可以建立一个会员网站,在那里你可以对个人用户或产品进行更多的控制。

那么你为了实现这一点做了哪些尝试呢?老实说,我还没有想出任何可行的解决方案。理论上,如果产品页面上有一个按钮,可以将产品添加到购物车中,同时确认结账,那么它就会起作用时间…如果有人能帮我做一些编码。如果在结账页面上有这样做的功能:检查购物车是否需要付款-如果否(这意味着购物车是免费的),然后在客户按下下订单按钮时启动操作。如果是,(购物车需要付款),然后什么也不做。谢谢!在解决方案研究期间,我也读了这篇文章,但我(实际上是我的客户)想跳过第二个按钮点击结帐…你看到这两个链接了吗:1.wordpress.org/plugins/woocommerce-direct-checkout 2.chrislema.com/woocommerce-no-products-page第一个跳过购物车,我已经用过了,这对我跳过结帐没有帮助。第二个教我如何在没有产品页面的情况下使用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' );