在WooCommerce中阻止不使用送货方式就结帐的权限

问题描述 投票:1回答:1

我正在尝试删除继续进行结帐的按钮,并限制对结帐页面的访问,直到客户在购物篮页面上填写“计算运费”选项为止。

我创建了一种本地送货方式,该方式仅限于多个邮编。然后,我将其添加到我的functions.php文件中。

function disable_checkout_button_no_shipping() {
  $package_counts = array();

  // get shipping packages and their rate counts
  $packages = WC()->shipping->get_packages();
  foreach( $packages as $key => $pkg )
      $package_counts[ $key ] = count( $pkg[ 'rates' ] );

  // remove button if any packages are missing shipping options
  if( in_array( 0, $package_counts ) )
      remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
}
add_action( 'woocommerce_proceed_to_checkout', 'disable_checkout_button_no_shipping', 1 );

但是,当我在不同的浏览器中以隐身模式测试网站时,会出现“继续付款”按钮。

如果我单击“计算运费”链接,但未填写表格但进行了更新,则按钮消失。我基本上希望在客户填写购物车页面上的“计算运费”表格(并在我的运送方式中包含邮政编码之一)时出现该按钮,然后才能继续进入结帐页面。

php wordpress woocommerce checkout shipping-method
1个回答
0
投票

您最好尝试使用WooCommerce会话中的“选择的送货方式”:

function disable_checkout_button_no_shipping() {

    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );

    // remove button if there is no chosen shipping method
    if( empty( $chosen_shipping_methods ) ) {
        remove_action( 'woocommerce_proceed_to_checkout', 'woocommerce_button_proceed_to_checkout', 20 );
    }
}
add_action( 'woocommerce_proceed_to_checkout', 'disable_checkout_button_no_shipping', 1 );

或使用woocommerce_check_cart_items动作钩子以不同的方式:

add_action( 'woocommerce_check_cart_items', 'required_chosen_shipping_methods' );
function required_chosen_shipping_methods() {
    $chosen_shipping_methods = WC()->session->get( 'chosen_shipping_methods' );

    if( is_array( $chosen_shipping_methods ) && count( $chosen_shipping_methods ) > 0 ) {
        // Display an error message
        wc_add_notice( __("A shipping method is required in order to proceed to checkout."), 'error' );
    }
}

应该更好地工作。

© www.soinside.com 2019 - 2024. All rights reserved.