以编程方式获取WooCommerce发货方法

时间:2020-02-15 作者:FooBar

如何在我的WooCommerce商店中检索配送方式?我的结账页面上有:

my checkout page

在我的管理系统中,它是这样的:

shipping methods in wp admin

我尝试过:

WC()->shipping->load_shipping_methods()
但它不会返回GLS或单击并收集文本/价格。它返回以下数据:https://paste.laravel.io/0c1aff96-dbed-452c-856f-6d62b6f1f47e

1 个回复
SO网友:LoicTheAztec

您需要使用不同的内容,如下所示:

// Loop through shipping packages from WC_Session (They can be multiple in some cases)
foreach ( WC()->cart->get_shipping_packages() as $package_id => $package ) {
    // Check if a shipping for the current package exist
    if ( WC()->session->__isset( \'shipping_for_package_\'.$package_id ) ) {
        // Loop through shipping rates for the current package
        foreach ( WC()->session->get( \'shipping_for_package_\'.$package_id )[\'rates\'] as $shipping_rate_id => $shipping_rate ) {
            $rate_id     = $shipping_rate->get_id(); // same thing that $shipping_rate_id variable (combination of the shipping method and instance ID)
            $method_id   = $shipping_rate->get_method_id(); // The shipping method slug
            $instance_id = $shipping_rate->get_instance_id(); // The instance ID
            $label_name  = $shipping_rate->get_label(); // The label name of the method
            $cost        = $shipping_rate->get_cost(); // The cost without tax
            $tax_cost    = $shipping_rate->get_shipping_tax(); // The tax cost
            $taxes       = $shipping_rate->get_taxes(); // The taxes details (array)
        }
    }
}
现在if customer session is not yet enabled (客户尚未向购物车添加任何产品),您需要force WooCommerce customer session activation 使用以下各项:

// Enable customer WC_Session
add_action( \'init\', \'wc_session_enabler\' );
function wc_session_enabler() {
    if ( is_user_logged_in() || is_admin() )
        return;

    if ( isset(WC()->session) && ! WC()->session->has_session() ) {
        WC()->session->set_customer_session_cookie( true );
    }
}
代码进入函数。活动子主题(或活动主题)的php文件。

如果需要,您还可以get the customer chosen shipping method(s) 具有以下功能:

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

相关推荐

如何对开机自检输出进程进行phpunit测试?

我想知道如何测试帖子的html输出。像WP一样,在现实中会在前端输出它。此时,我的具体情况是测试oembed缓存,因为我想测试重新缓存。AFAIK WP只缓存与post关联的oembed结果。所以我不能只运行一些文本the_content 滤器我喜欢为此测试真正的后处理,通常也会测试可能出现的其他情况。到目前为止,在我的搜索中,我只找到了如何在单元测试中创建帖子的教程,而没有找到如何在上面实际运行测试的教程。