我已成功创建了新的配送方式,并为其提供了配送区域支持。但是,当我从下拉列表中选择配送方式并将其添加到配送区域时,该配送方式未出现在“选定配送方式列表”中。
我录制了一个screencast gif来演示:
我一辈子都弄不明白为什么它不工作。如果我选择一个标准方法(Screencast GIF),它工作正常。
有人知道这是怎么回事吗?怎么让它工作?
下面是from this official thread: Shipping Method API的代码:
if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) {
function request_a_shipping_quote_init() {
if ( ! class_exists( 'WC_Request_Shipping_Quote_Method' ) ) {
class WC_Request_Shipping_Quote_Method extends WC_Shipping_Method {
/**
* Constructor for your shipping class
*
* @access public
* @return void
*/
public function __construct() {
$this->id = 'request_a_shipping_quote'; // Id for your shipping method. Should be uunique.
$this->method_title = __( 'Request a Shipping Quote' ); // Title shown in admin
$this->method_description = __( 'Shipping method to be used where the exact shipping amount needs to be quoted' ); // Description shown in admin
$this->title = "Request a Shipping Quote"; // This can be added as an setting but for this example its forced.
$this->supports = array(
'shipping-zones'
);
$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' ) );
}
function init_form_fields() {
$this->form_fields = array(
'enabled' => array(
'title' => __( 'Enable', 'dc_raq' ),
'type' => 'checkbox',
'description' => __( 'Enable this shipping method.', 'dc_raq' ),
'default' => 'yes'
),
'title' => array(
'title' => __( 'Title', 'dc_raq' ),
'type' => 'text',
'description' => __( 'Title to be displayed on site', 'dc_raq' ),
'default' => __( 'Request a Quote', 'dc_raq' )
),
);
}
/**
* calculate_shipping function.
*
* @access public
*
* @param mixed $package
*
* @return void
*/
public function calculate_shipping( $packages = array() ) {
$rate = array(
'id' => $this->id,
'label' => $this->title,
'cost' => '0.00',
'calc_tax' => 'per_item'
);
// Register the rate
$this->add_rate( $rate );
}
}
}
}
add_action( 'woocommerce_shipping_init', 'request_a_shipping_quote_init' );
function request_shipping_quote_shipping_method( $methods ) {
$methods['request_shipping_quote_shipping_method'] = 'WC_Request_Shipping_Quote_Method';
return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'request_shipping_quote_shipping_method' );
}
6条答案
按热度按时间jslywgbw1#
“woocommerce_shipping_methods”上的方法键应与运输方法ID匹配
在您的情况下:你该换衣服了
收件人:
e4yzc0pl2#
更改此行
到这一行
wmtdaxz33#
在我尝试使用代码的问题,并修复所有的错误,我发现在评论这些职位,我仍然有一些问题。例如,我不能编辑航运方法后,即使我成功地将其添加到航运区。
最后,我得到了所需的代码,为我工作后,编辑标准的免费送货woocommerce方法。希望它会保存时间的人。
nbewdwxp4#
WC_Custom_Shipping_Method
是一个抽象类,您正在尝试更改抽象类不允许的继承方法calculate_shipping
。试着这样做。
(将shipping方法扩展到子类中,然后将子类扩展到孙类中,在孙类中可以修改calculate_shipping方法)。
希望这是有道理的。
问候
roqulrg35#
我遇到了这个问题,它让我疯狂了几天,直到,当通过Woocommerce代码来了解发生了什么,我发现,当设置woocommerce_shipping_methods的过滤器方法时,我需要使我添加到这个数组中的条目的索引与我的运输方法类中的ID属性相同。它很好地添加了shipping方法,并且正确地显示了zone。以前,我一直在没有索引的filter方法中向数组添加条目,就WC看到该方法而言,它工作得很好,这就是为什么它看起来还可以。然而,保存设置的代码,使用ID作为索引来标识运输方法。从其他评论来看,我会想象这个特定的索引是在WC版本3中添加的。希望这有帮助。
368yc8dk6#
如果您的运输方式仍然似乎不工作,你必须确保
1.不存在过时数据:删除临时数据和客户数据(WooCommerce设置〉状态〉工具)