作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
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/
我是一名优秀的程序员,十分优秀!