php WooCommerce -针对经常性订单的不同送货方式

hujrc8aj  于 2023-09-29  发布在  PHP
关注(0)|答案(1)|浏览(103)

我正在使用以下插件开发一个网站:

  • WooCommerce
  • WooCommerce订阅
  • Pakkelabels.dk for WooCommerce

“Pakkelabels.dk”是丹麦运营商的 Package 标签插件。这个插件使用标准的WooCommerce过滤器和钩子来添加额外的运输方法。
我使用的是混合结账。购物车总数目前看起来像这样:

这是我不想做的

对于经常性的订单,我不想将运输方式限制为“DAO Pakkeshop”和“本地提货”(对不起图像中的丹麦语)。
我已经将此添加到functions.php中,当特定的产品ID(订阅产品)在购物车中时,它会取消我不想使用的运输方法:

add_filter( 'woocommerce_package_rates', 'hide_shipping_methods_woo_sg', 10, 2 );
function hide_shipping_methods_woo_sg( $rates, $package ) {

    $product_id = get_field('product_auto_cart', 'option');

    if($product_id){
        $product_cart_id = WC()->cart->generate_cart_id( $product_id );
        $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

        if($in_cart) {
            unset( $rates['pakkelabels_shipping_dao_direct'] );
            unset( $rates['pakkelabels_shipping_gls_private'] );
            unset( $rates['pakkelabels_shipping_gls_business'] );
            unset( $rates['pakkelabels_shipping_gls'] );
            unset( $rates['pakkelabels_shipping_pdk'] );
            unset( $rates['pakkelabels_shipping_postnord_private'] );
            unset( $rates['pakkelabels_shipping_postnord_business'] );
            // unset( $rates['local_pickup:19'] );
        }
        return $rates;
    }
}

我的问题是,这删除了订单和定期订单的运输方法,正如您在图像上看到的那样。
我需要某种条件,这样我就可以只针对经常性的订单运输方法和取消设置。
我如何才能做到这一点?

cngwdvgl

cngwdvgl1#

好吧-这是个简单的方法。WC()->cart->recurring_carts是我需要的条件。我的代码现在看起来像这样:

add_filter( 'woocommerce_package_rates', 'hide_shipping_methods_woo_sg', 10, 2 );
function hide_shipping_methods_woo_sg( $rates, $package ) {

    $product_id = get_field('product_auto_cart', 'option');

    if($product_id){
        $product_cart_id = WC()->cart->generate_cart_id( $product_id );
        $in_cart = WC()->cart->find_product_in_cart( $product_cart_id );

        if($in_cart && WC()->cart->recurring_carts) {
            unset( $rates['pakkelabels_shipping_dao_direct'] );
            unset( $rates['pakkelabels_shipping_gls_private'] );
            unset( $rates['pakkelabels_shipping_gls_business'] );
            unset( $rates['pakkelabels_shipping_gls'] );
            unset( $rates['pakkelabels_shipping_pdk'] );
            unset( $rates['pakkelabels_shipping_postnord_private'] );
            unset( $rates['pakkelabels_shipping_postnord_business'] );
            // unset( $rates['local_pickup:19'] );
        }
        return $rates;
    }
}

以上运输方法现在被删除用于循环购物车。
我的购物车总数现在看起来像这样:

相关问题