微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

仅在WooCommerce中允许访客结帐特定产品

如何解决仅在WooCommerce中允许访客结帐特定产品

以下代码自定义字段添加到管理产品设置中,以在产品级别管理来宾结帐:

// display Guest Checkout Field

add_action( 'woocommerce_product_options_general_product_data','woo_add_custom_general_fields' );
function woo_add_custom_general_fields() {
    global $woocommerce,$post;
  
    echo '<div class="options_group">';
  
    // CheckBox
    woocommerce_wp_checkBox( array( 
        'id'            => '_allow_guest_checkout','wrapper_class' => 'show_if_simple','label'         => __('Checkout','woocommerce' ),'description'   => __('Allow Guest Checkout','woocommerce' ) 
    ) );

  
    echo '</div>';
}

// Save Guest Checkout Field
add_action( 'woocommerce_process_product_Meta','woo_add_custom_general_fields_save' );
function woo_add_custom_general_fields_save( $post_id ){
    $woocommerce_checkBox = isset( $_POST['_allow_guest_checkout'] ) ? 'yes' : 'no';
    update_post_Meta( $post_id,'_allow_guest_checkout',$woocommerce_checkBox );
}

// Enable Guest Checkout on Certain products
add_filter( 'pre_option_woocommerce_enable_guest_checkout','enable_guest_checkout_based_on_product' );
function enable_guest_checkout_based_on_product( $value ) {
    if ( WC()->cart ) {
        $cart = WC()->cart->get_cart();
        foreach ( $cart as $item ) {
            if ( get_post_meta( $item['product_id'],true ) == 'yes' ) {
                $value = "yes";
            } else {
                $value = "no";
                break;
            }
        }
    }
    return $value;
}

但是实际上不起作用。我做错了什么?我该如何解决

我正在尝试允许客人购买特定产品。管理员自定义字段显示和保存的自定义字段值在(前两个功能中有效,但是即使购物车中有不允许访客使用的产品,也不会在结帐页面显示登录/注册信息结帐。

解决方法

过滤器挂钩enable_guest_checkout_based_on_product不再存在,并已由另一个稍有不同的挂钩取代。

因此您的代码将是:

add_filter( 'woocommerce_checkout_registration_required','change_tax_class_user_role',900 );
function change_tax_class_user_role( $registration_required ) {
    if ( ! WC()->cart->is_empty() ) {
        $registration_required = false; // Initializing (allowing guest checkout by default)
        
        // Loop through cart items
        foreach ( WC()->cart->get_cart() as $item ) {
            // Check if there is any item in cart that has not the option "Guest checkout allowed"
            if ( get_post_meta( $item['product_id'],'_allow_guest_checkout',true ) !== 'yes' ) {
                return true; // Found: Force checkout user registration and exit
            }
        }
    }
    return $registration_required;
}

代码进入活动子主题(或活动主题)的functions.php文件中。应该可以。

相关延续: Redirection for non checkout guest allowed in WooCommerce

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?