エンドユーザーが都市、日時を選択できるカスタムコードがあります。配達率は都市によって変わるはずです。都市選択ボックスはチェックアウトページにあります。WooCommerceサイトのチェックアウトページで送料を更新する
都市を変更すると、オーダーレビューセクションに表示された配達の料金が正常に変更されます。ここまでは順調ですね。 残念ながら、注文後に価格が注文に達しません。それはどこかで失われる。
ヒントは、同じ都市選択ボックスも商品ページに表示されている可能性があります。ユーザーがカートに追加するときに選択してチェックアウトに行くと、配信レートが表示され、注文を提出するときに失われていません。
出荷レートを更新するためにリフレッシュする必要がありますか?
(成功した)レートを更新機能
function adjust_shipping_rate($rates){
global $woocommerce;
foreach ($rates as $rate) {
$cost = $rate->cost;
$rate->cost = $_COOKIE['shipping_city_cost'];
}
return $rates;
}
add_filter('woocommerce_package_rates', 'adjust_shipping_rate', 50, 1);
UPDATE 21-05-2017
これはクッキーが更新される方法です:選択ボックスが変更されると、非同期ajaxコールが起動され、次のPHPコードが実行されます。ここで
function get_and_set_shipping_rate(){
$shipping_city = $_POST['city'];
$shipping_cost = get_shipping_cost_by_city($shipping_city);
setcookie('shipping_city_cost', $shipping_cost, time() + (86400 * 30), '/');
$_COOKIE['shipping_city_cost'] = $shipping_cost;
echo 'Shipping cost updated: '.$shipping_city.' : '.$shipping_cost;
}
add_action('wp_ajax_get_and_set_shipping_rate', 'get_and_set_shipping_rate');
add_action('wp_ajax_nopriv_get_and_set_shipping_rate', 'get_and_set_shipping_rate');
は、AJAX呼び出しです:これにより
jQuery(document).on('change', '#shipping_delivery_city', function(){
var requested_city = jQuery(this).val();
var data = {
'action': 'get_and_set_shipping_rate',
'city': requested_city
};
jQuery.ajax({
type: "POST",
url: shipping_dates.ajax_url,
data: data,
async: false,
success: function (response) {
console.log(response);
}
});
});
はどのように '$の_COOKIE [ 'shipping_city_costを']'に設定されていますか? – Reigel
@Reigelここでお手伝いしてくれてありがとう。上記のアップデートをご覧ください。 –
これらのコードはチェックアウトページでのみ必要ですか? – Reigel