我对php和woocommerce相当新。我正在使用wordpress和woocommerce的电子商务网站。公司使用和API根据购物车中商品的面积和尺寸以及商品数量计算运费。我已设法将所有需要的值解析为API,我确实收到了回复。我为所提供的3个测试率创建了一个自定义的运输插件。 在我的脚本中,我创建会话,其中包含每个运送方法的总数,如下所示:
$_SESSION['overnight']= $quoteResponse->results[0]->rates[2]->total;
然后在我的自定义送货插件中,我启动会话并将成本设置为会话内的值:
<?php
session_start();
* Check if WooCommerce is active
*/
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
function WC_Overnight_Express_init() {
if ( ! class_exists( 'WC_Overnight_Express' ) ) {
class WC_Overnight_Express extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct() {
$this->id = 'overnight express'; // Id for your shipping method. Should be uunique.
$this->method_title = __( 'Overnight Express' ); // Title shown in admin
$this->method_description = __( 'Overnight Express Shipping method' );
$this->enabled = "yes"; // This can be added as an setting but for this example its forced enabled
$this->title = "Overnight Express"; // This can be added as an setting but for this example its forced.
$this->init();
}
/**
* Init your settings
*
* @access public
* @return void
*/
function init() {
// Load the settings API
$this->init_form_fields(); // This is part of the settings API. Override the method to add your own settings
$this->init_settings(); // This is part of the settings API. Loads settings you previously init.
// Save settings in admin if you have any defined
add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );
}
/**
* calculate_shipping function.
*
* @access public
* @param mixed $package
* @return void
*/
public function calculate_shipping() {
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' =>$_SESSION['overnight'],
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate( $rate );
}
}
}
}
add_action( 'woocommerce_shipping_init', 'WC_Overnight_Express_init' );
function add_overnight_method( $methods ) {
$methods[] = 'WC_Overnight_Express';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_overnight_method' );
}
?>
我的问题是我的API从API返回后他们不更新他们显示的运费总额&#34;免费&#34;如果我打开购物车并返回结帐页面,则只能使用udpate。我想要做的是在从API返回总数时在运行时更新它们。这是我在stackoverlow上的第一篇文章,任何帮助将不胜感激。感谢
答案 0 :(得分:2)
首先,我认为您应该在WC_Overnight_Express_init
函数中实现该类,因为原样,无法运行contruct方法。
然后,在woocommerce系统工具中有一个选项可以调试运输方法,在开发过程中激活它确实是一个好主意(抱歉屏幕截图是法语,但是你明白了,对吧?) :
答案 1 :(得分:0)
尝试在if子句之外放置add_action和add_filter代码。我知道这听起来很疯狂但通常会有所帮助。
经过一番思考后,我很确定问题存在于$_SESSION
中。请遵循我的建议,并在calculate_shipping方法中进行所有计算。当然,你可以为测试perpouse设置任何静态值。或者制作var_dump($_SESSION)
在calculate_shipping中确保一切都符合预期(在ajax上我经常使用file_put_contents或 flip / whoops )。
接下来在calculate_shipping metod中你可以获得购物车内容并制作你的魔法:
function calculate_shipping() {
$cart = WC_Cart::get_cart()
foreach($cart as $item){
//magic
}
}
您应该将运输逻辑挂钩到:
add_action( 'woocommerce_shipping_init', 'tutsplus_shipping_method' );
function add_tutsplus_shipping_method( $methods ) {
$methods[] = 'WC_Overnight_Express';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_tutsplus_shipping_method' );
接下来在calculate_shipping metod中你可以获得购物车内容并制作你的魔法:
function calculate_shipping(){
$cart = WC_Cart::get_cart()
foreach($cart as $item){
//magic
}
}
对于实时更新购物车评论,这可能会有所帮助:
https://stackoverflow.com/a/47133456/8888443
看看这个tuturial: https://code.tutsplus.com/tutorials/create-a-custom-shipping-method-for-woocommerce--cms-26098
如果您是wordpress开发的新手,我强烈建议您熟悉动作/钩子。 woocommerce和wordpress都有很好的参考。