Rumah > Soal Jawab > teks badan
P粉7181655402023-08-14 11:18:03
Kod ini belum diuji dan mungkin memerlukan sedikit pengubahsuaian, tetapi ia boleh menjadi laluan yang betul untuk menjadikan panggilan API luaran anda berfungsi.
Kita boleh cuba menggunakan pembolehubah WC_Session untuk menetapkan yuran penghantaran yang ingin kita lalui:
function handle_api_response( $rates ) { // 在这里编写API调用代码..... if ($response_code === 200){ $response_data = json_decode($response, true); $cost = $response_data['shipments']; if ( $cost > 0 ) { // 将费用设置为WC Session变量 WC()->session->set('shipment_cost', floatval($cost)); // 尝试触发“更新结账”Ajax事件 ?><script>jQuery('body').trigger('update_checkout');</script><?php } } }
Kami kemudian boleh memanggil pembolehubah WC_Session dalam fungsi cangkuk anda:
add_filter('woocommerce_package_rates', 'update_shipping_costs', 10, 2); function update_shipping_costs( $rates, $package ) { foreach ( $rates as $rate_id => $rate ) { // 从Session变量中获取新的费用 $new_cost = WC()->session->get('shipment_cost'); if( isset($rate->cost) && $rate->cost > 0 && $new_cost > 0 ) { $rates[ $rate_id ]->cost = $new_cost; // 设置新的费用 } } return $rates; }
Walau bagaimanapun, kami memerlukan sesuatu yang lain untuk menyegarkan kaedah penghantaran cache agar ia berkuat kuasa:
add_action('woocommerce_checkout_update_order_review', 'refresh_shipping_methods'); function refresh_shipping_methods( $post_data ){ $bool = true; // 我们检查Session变量 if ( WC()->session->get('shipment_cost') > 0 ) { $bool = false; } // 与运输方法一起使用时是必需的 foreach ( WC()->cart->get_shipping_packages() as $package_key => $package ){ WC()->session->set( 'shipping_for_package_' . $package_key, $bool ); } WC()->cart->calculate_shipping(); }
Akhir sekali, kami menyahset pembolehubah Sesi WC (semasa pembayaran pertama dimuatkan dan halaman terima kasih) :
add_action('wp_footer', 'reset_wc_session_variable'); function reset_wc_session_variable() { if (is_checkout() && WC()->session->get('shipment_cost') > 0) { WC()->session->__unset('shipment_cost'); } }
Masukkan kod ke dalam fail functions.php tema anak anda (atau ke dalam pemalam). Ia mungkin berkesan.
Berkaitan: Alih keluar kos penghantaran selepas menyemak kotak pilihan tersuai dalam pembayaran WooCommerce