我在woocommerce中使用插件添加了信用卡付款方式。
我已经定制了插件,我添加了一个下拉列表作为支付字段,客户可以在其中选择istallments。分期付款具有利率,因此我希望每次客户选择他想要的分期付款数量时,它将相应地更新订单总额。
我使用了一段带有 jquery 和 ajax 的代码来发布下拉列表的值......
虽然结帐字段稍后会更新,但价格并未发生变化,因为$_POST
参数似乎没有获得任何值。
如何解决此问题并获得更新价格。
ajax和php函数在同一个文件中,不知道是否必须做任何事情。 这是jquery:
jQuery(document).ready(function () {
jQuery('#installments').change(function () {
var billing_district = jQuery('#installments').val();
console.log(installments);
var data = {
action: 'woocommerce_apply_district',
security: wc_checkout_params.apply_district_nonce,
district: billing_district
};
jQuery.ajax({
type: 'POST',
url: wc_checkout_params.ajax_url,
data: data,
success: function (code) {
console.log(code);
if (code === '0') {
//$form.before(code);
jQuery('body').trigger('update_checkout');
}
},
dataType: 'html'
});
return false;
});
});
这是截图:
(编辑)
这是php代码
<?php
// reproduce/modify this function in your class
$price = $woocommerce->cart->total;
if ($price > 15) {
$installments = static::getInstallments($price);
$table = "";
$table ='<label for="installments">Δόσεις</label>';
$table.='<select class="francotecnologia_wc_parcpagseg_table" id="installments" class="update_totals_on_change">';
$table.='<option value="0">Χωρίς Δόσεις</option>';
/* $table .= 'francotecnologia_wc_parcpagseg_table_with_variation_id_' . ($variationId > 0 ? $variationId : '0') . '" ';
$table .= ($variationDisplay === false ? 'style="display:none"' : '');
$table .= '>';
// $tableColspan = (2 + (static::$showColumnTotal?1:0)) *static::$numberOfTableColumns;
// if (static::$tableHeaderMessage != '') {
// $table .= '<tr><th class="francotecnologia_wc_parcpagseg_table_header_message_tr_th" colspan="'
//. $tableColspan . '">' . static::$tableHeaderMessage . '</th> </tr>';
// }
// $table .= '<tr class="francotecnologia_wc_parcpagseg_table_header_tr">';
// $table .= str_repeat('<th>' . static::$language['Installments'] . '</th><th>' . static::$language['Amount'] . '</th>'
// . (static::$showColumnTotal ? '<th>' . static::$language['Total'] . '</th>':''), static::$numberOfTableColumns);
// $table .= '</tr>';
// $table .= '</thead><tbody>'; */
$tdCounter = 0;
foreach (range(1, $installments) as $parcel) {
$calc = static::calculateInstallment($price, $parcel);
$tdCounter = 1 + $tdCounter % static::$numberOfTableColumns;
// if ($tdCounter == 1) {
// $table .= '<tr>';
//}.$parcel.' x '.wc_price($calc->price).' = '. wc_price($calc->total).
$table.= '<option value="'.$parcel.'">'.$parcel.'</options>';
//$table .= '<th>' . $parcel . '</th><td>' . wc_price($calc->price) . '</td>' . (static::$showColumnTotal ? '<td>' . wc_price($calc->total) . '</td>' : '');
// if ($tdCounter == static::$numberOfTableColumns) {
// $table .= '</tr>';
//}
}
// if (substr( $table, -5 ) != '</tr>') {
// $table .= '</tr>';
// }
// $table .= '</tbody>';
//if (static::$tableFooterMessage != '') {
// $table .= '<tfoot><tr><th class="francotecnologia_wc_parcpagseg_table_footer_message_tr_th" colspan="'
// . $tableColspan . '">' . static::$tableFooterMessage . '</th></tr></tfoot>';
// }
$table .= '</select>';
echo $table;
} else {
return '';
}
}
add_action('wp_ajax_woocommerce_apply_district', 'calculate', 10);
add_action('wp_ajax_nopriv_woocommerce_apply_district', 'calculate', 10);
wp_enqueue_script('district', get_template_directory_uri() . '/js/district.js', array('jquery'));
wp_localize_script('district', 'wc_checkout_params', array('ajaxurl' => admin_url('admin-ajax.php')));
function calculate() {
if (isset($_POST['installments'])){
global $woocommerce;
$district = $_POST['installments'];
if ($district == 1) {
$val = 100;
} elseif ($district == 2){
$val = 200;
}
session_start();
$_SESSION['val'] = $val;
}
}
add_action('woocommerce_cart_calculate_fees', 'wpi_add_ship_fee');
function wpi_add_ship_fee() {
@session_start();
$customshipcost = $_SESSION['val'];
WC()->cart->add_fee('Υποσύνολο με τόκους ', $customshipcost);
}
?>
我在自定义字段教程中找到了这个。
有一个链接显示如何制作自定义字段,但我使用的是纯PHP!