gpt4 book ai didi

php - WooCommerce:以编程方式更改默认送货方式

转载 作者:搜寻专家 更新时间:2023-10-31 21:03:41 25 4
gpt4 key购买 nike

WooCommerce 无法优先考虑表费率的运输方式,所以我尝试自己做,但失败得很惨。

我曾尝试在我认为已设置的位置添加一个操作,但它不起作用。这是我尝试过的方法(我只想使用可用送货方式数组中的第一种送货方式):

function reset_default_shipping_method() {

$available_methods = WC()->shipping->packages[0]['rates'];
$chosen_method = key($available_methods);
WC()->session->set( 'chosen_shipping_methods', $chosen_method );

}
add_action('woocommerce_shipping_method_chosen', 'reset_default_shipping_method');

我已经测试了 $available_methods$chosen_method 并且都按预期呈现(在页面中运行时)但是,一旦我将它添加到操作 woocommerce_shipping_method_chosen 好像没有更新。

例如如果我通过不同的钩子(Hook)运行它:

function output_to_footer() {
if ( current_user_can( 'administrator' ) ) :

$current_method = WC()->session->get( 'chosen_shipping_methods');
$available_methods = WC()->shipping->packages[0]['rates'];
$chosen_method = key($available_methods);
WC()->session->set( 'chosen_shipping_methods', $chosen_method );

print "\n".'-----'."\n";
print_r($current_method);
print "\n".'-----'."\n";
print_r($available_methods);
print "\n".'-----'."\n";
print_r($chosen_method);
print "\n".'-----'."\n";

endif;
}
add_action('print_footer_messages', 'output_to_footer');

看起来一切都在做它应该做的事情,但是当我从操作运行它时:woocommerce_shipping_method_chosen 它“似乎”做了所有事情,但运输 radio 仍然设置为旧的运输方式?

-----Array(    [0] => table_rate-5 : 70)-----Array(    [table_rate-7 : 72] => WC_Shipping_Rate Object        (            [id] => table_rate-7 : 72            [label] => Registered Australian Post (2 to 8 Business Days)            [cost] => 4.0909            [taxes] => Array                (                    [1] => 0.40909                )            [method_id] => table_rate        )    [table_rate-8 : 90] => WC_Shipping_Rate Object        (            [id] => table_rate-8 : 90            [label] => Tracking and Freight Insurance            [cost] => 20.055881818182            [taxes] => Array                (                    [1] => 2.0055881818182                )            [method_id] => table_rate        )    [table_rate-5 : 70] => WC_Shipping_Rate Object        (            [id] => table_rate-5 : 70            [label] => Nation-Wide Delivery (5 to 12 Business Days)            [cost] => 0            [taxes] => Array                (                )            [method_id] => table_rate        )    [local_pickup] => WC_Shipping_Rate Object        (            [id] => local_pickup            [label] => Local Pickup            [cost] => 0            [taxes] => Array                (                )            [method_id] => local_pickup        ))-----table_rate-7 : 72-----

我一整天都在研究这个问题,感觉离解决方案还差得很远。希望这里有人能帮忙。

最佳答案

woocommerce_shipping_chosen_method 是过滤器 Hook 而不是 Action Hook 。试试下面的代码

function reset_default_shipping_method( $method, $available_methods ) {

// If the shipping method has been chosen don't do anything
if ( ! empty( $method ) ) {
return $method;
}

// add code to set 'Table Rate' as the default shipping method

$method = 'table_rate-5';

return $method;
}

add_filter('woocommerce_shipping_chosen_method', 'reset_default_shipping_method', 10, 2);

P.S:我已将 table_rate-5 硬编码为默认方法来为您提供要点,因此请将其更改为所需的方法。理想情况下,您需要编写代码以查看您想要设置为默认的方法是否在 $available_methods 中可用,然后相应地工作。

关于php - WooCommerce:以编程方式更改默认送货方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36300773/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com