Cara dinamik untuk mengemas kini harga kaedah penghantaran dalam WooCommerce
P粉605233764
2023-08-13 18:08:43
<p>Saya cuba mengemas kini harga penghantaran secara dinamik untuk kaedah penghantaran saya. Saya mendapat harga penghantaran daripada api dan ingin mengemas kini harga apabila saya berjaya mendapatkan harga daripada respons api. Saya menggunakan kod berikut: </p>
<pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) {
//Kod panggilan api ada di sini.....
jika ($kod_tindak balas === 200){
$data_tindak balas = json_decode($respon, benar);
$price = $response_data['shipments']
}
add_filter( 'kadar_pakej_woocommerce', 'tetapkan_harga_penghantaran', PHP_INT_MAX, 1 );
fungsi set_shipping_price( $rates ) {
foreach ( $kadar sebagai $kadar_id => $kadar ) {
$kadar[ $kadar_id ]->kos = $harga;
}
pulangan $kadar;
}
}</pre>
<p>Kod di atas tidak berfungsi, tetapi jika saya mengalihkan penapis keluar daripada fungsi handle_api_response dan menetapkan beberapa nilai statik kepada bayaran, ia nampaknya berfungsi. Seperti ini:</p>
<pre class="brush:php;toolbar:false;">function handle_api_response( $rates ) {
//Kod panggilan api ada di sini.....
jika ($kod_tindak balas === 200){
$data_tindak balas = json_decode($respon, benar);
$price = $response_data['shipments']
}
}
add_filter( 'kadar_pakej_woocommerce', 'tetapkan_harga_penghantaran', PHP_INT_MAX, 1 );
fungsi set_shipping_price( $rates ) {
foreach ( $kadar sebagai $kadar_id => $kadar ) {
$kadar[ $kadar_id ]->kos = 50;
}
pulangan $kadar;
}</pre>
<p>Masalah saya ialah memandangkan saya mendapat nilai harga daripada api, saya perlu menghantar harga daripada respons api kepada fungsi set_shipping_price yang berjalan apabila penapis dicetuskan. </p>
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:
Kami kemudian boleh memanggil pembolehubah WC_Session dalam fungsi cangkuk anda:
Walau bagaimanapun, kami memerlukan sesuatu yang lain untuk menyegarkan kaedah penghantaran cache agar ia berkuat kuasa:
Akhir sekali, kami menyahset pembolehubah Sesi WC (semasa pembayaran pertama dimuatkan dan halaman terima kasih) :
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