Woocommerce使用jQuery和ajax更改订单总数下降更改

时间:2016-04-20 14:08:44

标签: jquery ajax wordpress wordpress-plugin woocommerce

我在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;
    });

});

这是截图:

screenshot

(编辑)

这是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);
     }

     ?>

我在自定义字段教程中找到了这个。

http://phpwpinfo.com/how-to-update-shipping-cost-in-cart-dynamically-based-on-a-custom-field-in-woocommerce/

有一个链接显示如何制作自定义字段,但我使用的是纯PHP!

0 个答案:

没有答案