php - requerido - tienda online wordpress ejemplo
Cómo agregar un método de envío personalizado que funcione en WooCommerce 3 (2)
Cambiar esta linea
public function calculate_shipping( $package ) {
a esta linea
función pública calculate_shipping ($ package = array ()) {
He creado con éxito un nuevo método de envío y le he dado soporte para zonas de envío. Sin embargo, cuando selecciono el método del menú desplegable para agregarlo a la zona, no aparece en la ''lista de métodos seleccionados''.
Grabé un screencast gif para demostrar:
No puedo entender por qué no funciona. Funciona bien si selecciono uno de los métodos estándar ( Screencast GIF )
¿Alguien sabe qué está pasando aquí y cómo hacer que funcione?
Aquí está el código que tengo de este hilo oficial: Método de envío 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'' );
}
La clave de método en "woocommerce_shipping_methods" debe coincidir con el ID del método de envío
En tu caso: debes cambiar
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'' );
A:
function request_shipping_quote_shipping_method( $methods ) {
$methods[''request_a_shipping_quote''] = ''WC_Request_Shipping_Quote_Method'';
return $methods;
}
add_filter( ''woocommerce_shipping_methods'', ''request_shipping_quote_shipping_method'' );