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
,它似乎不是更新
e.g。如果我通过另一个钩子运行它:
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
它“出现”做一切但是发货收音机仍然设置为旧的送货方式?
----- 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 -----
我一整天都在努力,并且感觉不到任何解决方案。希望有人在这里帮忙。
答案 0 :(得分:1)
woocommerce_shipping_chosen_method
是一个过滤器钩子而不是一个动作钩子。请尝试以下代码
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
中可用,然后相应地工作。
答案 1 :(得分:1)
这是我最终使用的,根据需要工作:
/*=Use the shipping method filter to set the "selected" shipping method to
* the first (default) method in the list
**************************************************************************/
function oley_reset_default_shipping_method( $method, $available_methods ) {
$method = key($available_methods);
return $method;
}
add_filter('woocommerce_shipping_chosen_method', 'oley_reset_default_shipping_method', 10, 2);
(注意:这是有效的,因为我想要的运费实际上是列表中的第一个,但默认情况下没有被选中)