Cómo agregar un método de envío personalizado en WooCommerce
Publicado: 2020-09-01Si está familiarizado con WooCommerce, sabe que es una excelente solución gratuita de comercio electrónico, con un conjunto de características increíblemente útiles. Lo que destaca es que WooCommerce está desarrollado teniendo en cuenta la extensibilidad, similar a la modularidad de WordPress.
Sin embargo, si necesita algo adicional de WooCommerce, a menudo encontrará que WooCommerce no le brinda todo lo que necesita, por ejemplo, si desea agregar un método de envío personalizado. Sin embargo, no te preocupes, ya que en este breve tutorial aprenderás a crear un método de envío simple para WooCommerce, que calculará el costo del envío.
Además, aprenderá cómo agregar algunas restricciones a nuestro complemento para que el método de envío esté disponible para algunos países.
Reglas de envío personalizadas para los métodos de envío
En esta sección, crearemos reglas de envío personalizadas para los métodos de envío que usaremos para crear el código. Definiremos cómo el método de envío calculará el costo y dónde se puede enviar. Esto significa que el costo estará determinado por el peso y la zona a la que debemos enviar.
Para este ejemplo, enviaremos a EE. UU., Canadá, Alemania, Reino Unido, Italia, España y Kenia. Kenia será nuestra Zona 0 por $10, Italia Zona 1 por $30, España Zona 2 por $50, Reino Unido Zona 2 por $50, EE. UU. y Canadá Zona 3 por $70.
Para el peso, los cotizaremos de la siguiente manera: 0 a 10 kg gratis, 11 a 30 kg por $ 5, 31 a 50 kg por $ 10 y 51 a 100 kg por $ 20.
Es posible que esté listo para comenzar a codificar, ¡pero no todavía! Primero, debe aprender sobre la API de envío de WooCommerce . Cuando desee crear un método de envío personalizado, debe ampliar la clase de la clase abstracta de WooCommerce WC_Shipping_Method. Tiene unos atributos definidos, que son:
-
$id
: ID (slug, palabra clave) de nuestro envío que se requiere. -
$number
: Este es un ID entero. -
$method_title
: El nombre de nuestro envío que se muestra en el administrador. -
$method_description
: una breve descripción de nuestro envío que se muestra en el administrador (opcional). -
$enabled
: String booleano, “sí” o “no”, que da la información si nuestro envío está habilitado y si se puede utilizar o no. -
$title
: se utiliza para mostrar nuestro nombre de envío en nuestro sitio. -
$availability
: Esto define si el envío está disponible o no. -
$countries
: una serie de países para los que está habilitado este método. El valor predeterminado es una matriz vacía. -
$tax_status
: el valor predeterminado está sujeto a impuestos. Si un artículo está sujeto a impuestos, se cobrará el impuesto. -
$fee
: el valor predeterminado es 0 -
$minimum_fee
: la tarifa mínima para el método y el valor predeterminado es nulo. -
$has_settings
: Esto define si este método tiene alguna configuración. El valor por defecto es verdadero. -
$supports
: una matriz que contiene características compatibles con este método. El valor predeterminado es una matriz vacía. -
$rates
: una matriz de tarifas que debe completarse para registrar los costos de envío. El valor predeterminado es una matriz vacía.
Los métodos definidos en WC_Shipping_Method son:
-
is_taxable()
: Esto devuelve si necesitamos o no calcular el impuesto además de la tarifa de envío. -
add_rate( $args = array() )
: Esto empuja una tarifa de envío definida en el parámetro $args al atributo $rates. -
has_settings()
: Esto devuelve el valor del atributo $has_settings. -
is_available()
: Esto devuelve si el envío está disponible y si hay países establecidos en el atributo $países y el atributo $disponibilidad está establecido en valores incluidos, específicos o excluyentes, devolverá verdadero o falso si el país está disponible para el envío . -
get_title()
: Esto devuelve el título de este envío. -
get_fee( $fee, $total )
: Esto devuelve el valor de la tarifa para este envío en función de la $tarifa y el $total analizados. -
supports( $feature )
: Esto devuelve si este método de envío es compatible con una función o no.
Debido a que la clase WC_Shipping_Method amplía la clase WC_Settings_API, hay más atributos y métodos, que no explicaré aquí por motivos de simplicidad.
Además, es necesario definir otros métodos para que el envío pueda obtener o establecer configuraciones y calcular el costo real del envío. Estos métodos se enumeran aquí:
-
init()
: Esto crea los campos de formulario y la configuración. Sin embargo, puede tener un nombre diferente, siempre que usemos los métodos dentro de él y lo llamemos en el método __constructor. -
calculate_shipping( $package )
: este método se usa para calcular el costo de este envío y el paquete es una matriz con los productos que se enviarán.
Me gustaría centrarme un poco en el método de cálculo_envío. Para nuestro ejemplo, usaremos este método y lo agregaremos al método add_rate. Este método aceptará una matriz con varias opciones como:
-
id
: Este es el ID de la tarifa. -
label
: Esta es la etiqueta de la tarifa. -
cost
: El monto del envío. -
taxes
: acepta una serie de impuestos o nada, por lo que WooCommerce calcula el impuesto. Si no desea que acepte impuestos, puede aceptar falsos. -
calc_tax
: Esto acepta por_pedido o por_artículo. Si usa per_item, deberá proporcionar una serie de costos.
Usaremos un filtro de WordPress para obtener la matriz que agrega nuestro método de envío en la matriz del método registrado pasando el nombre de nuestra clase, usando un filtro de WordPress que se define dentro del complemento WooCommerce. El filtro se llama woocommerce_shipping_methods.
Con eso sobre la mesa, pasemos ahora a la sección de codificación de este breve tutorial para que pueda comprender todo el concepto en los fragmentos de PHP que voy a compartir.
a) Pasos para Crear la Nueva Clase de Envío
En esta sección, crearemos nuestro método de envío como un nuevo complemento que amplía WooCommerce.
- Primero, debe abrir wp-content> complementos y crear una nueva carpeta. Para esto, usaré el nombre njengah -shipping
- Luego, debe crear un archivo con el mismo nombre njengah –shipping.php
- En este archivo agregue el siguiente código:
<?php /** * Nombre del complemento: Njengah Shipping * URI del complemento: https://njengah.com/plugins/ * Descripción: * Versión: 1.0.0 * Autor: Joe Njenga * Autor URI: https://njengah.com s */ si (! definido ('WPINC')) { morir; } /* * Comprobar si WooCommerce está activo */ if ( in_array( 'woocommerce/woocommerce.php', apply_filters( 'active_plugins', get_option( 'active_plugins' ) ) ) ) { función njengahplus_shipping_method() { if ( ! class_exists( 'NjengahPlus_Shipping_Method' ) ) { clase NjengahPlus_Shipping_Method extiende WC_Shipping_Method { /** * Constructor para su clase de envío * * @acceso público * @retorno nulo */ función pública __construct() { $esto->id = 'njengahplus'; $this->method_title = __( 'NjengahPlus Shipping', 'njengahplus' ); $this->method_description = __( 'Método de envío personalizado para NjengahPlus', 'njengahplus' ); $esto->init(); $esto->habilitado = isset( $esto->configuraciones['habilitado'] ) ? $this->settings['habilitado'] : 'sí'; $this->title = isset( $this->settings['title'] ) ? $this->settings['title'] : __( 'NjengahShipping', 'njengahplus' ); } /** * Inicie su configuración * * @acceso público * @retorno nulo */ función inicializar() { // Cargar la API de configuración $esto->init_form_fields(); $esto->init_settings(); // Guarda la configuración en admin si tienes alguna definida add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) ); } /** * Definir campo de configuración para este envío * @retorno nulo */ función init_form_fields() { // Agregaremos nuestra configuración aquí } /** * Esta función se utiliza para calcular el costo de envío. Dentro de esta función, podemos verificar pesos, dimensiones y otros parámetros. * * @acceso público * @param $paquete mixto @devolver vacío */ función pública calcular_envío ($ paquete) { // Agregaremos el costo, la tasa y la lógica aquí } } } } add_action('woocommerce_shipping_init', 'njengahplus_shipping_method'); función add_njengahplus_shipping_method ($ métodos) { $métodos[] = 'NjengahPlus_Shipping_Method'; devolver $métodos; } add_filter('woocommerce_shipping_methods', 'add_njengahplus_shipping_method'); }
Cómo funciona
- Primero verificamos si la constante WPINC está definida. Si no está definido, significa que alguien está intentando acceder a este archivo directamente o desde una ubicación que no es WordPress.
- Luego, debemos verificar si WooCommerce está activo. Aquí estamos comprobando si woocommerce.php está en la matriz de complementos activos que se guardan en la base de datos bajo la opción active_plugins.
- woocommerce_shipping_init es la acción principal de WooCommerce Shipping, que incluye todas las clases de envío antes de que se creen instancias. El uso de esta acción asegurará que nuestro método de envío se incluya después de que WooCommerce se haya inicializado y en el lugar correcto para que WooCommerce lo use.
- El método __construct establece algunos atributos generales y algunos de ellos se pueden sobrescribir fácilmente después de cargar la configuración desde la base de datos en el método init.
- Los otros métodos se dejan vacíos porque los definiremos más adelante en el tutorial.
Luego, debe dirigirse para activar el complemento siguiendo los pasos que se muestran a continuación:
- Inicie sesión en su sitio de WordPress y acceda al Panel como usuario administrador.
- En el menú Panel, haga clic en Complementos y active el envío de Njengah como se muestra a continuación:
- Después de activar el complemento, diríjase a WooCommerce> Configuración . Haga clic en la pestaña WooCommerce y luego haga clic en el envío de NjengahPlus . Deberías poder ver esto:
b) Configuración de la disponibilidad del país
El método de envío que creamos está disponible solo en la lista de países determinada previamente.
- Agrega esto en el método __construct :
<?php //... $this->method_description = __( 'Método de envío personalizado para NjengahPlus', 'njengahplus' ); // Disponibilidad y países $esto->disponibilidad = 'incluido'; $esto->paises = array( 'US', // Estados Unidos de América 'CA', // Canadá 'DE', // Alemania 'GB', // Reino Unido 'IT', // Italia 'ES', // España 'HR' // Kenia ); $esto->init(); //...
Cómo funciona el código
El atributo de disponibilidad se establece en "incluido" para que este envío solo esté disponible para los países en el atributo de países.
WooCommerce verificará si el país de envío está incluido en los países de atributos.
Crear la configuración
Simplemente debe copiar este código y completar nuestro método init_form_fields:
<?php función init_form_fields() { $this->form_fields = array( 'habilitado' => matriz( 'título' => __( 'Habilitar', 'njengahplus' ), 'tipo' => 'casilla de verificación', 'descripción' => __( 'Habilitar este envío.', 'njengahplus' ), 'predeterminado' => 'sí' ), 'título' => matriz( 'título' => __( 'Título', 'njengahplus' ), 'tipo' => 'texto', 'descripción' => __( 'Título que se mostrará en el sitio', 'njengahplus' ), 'predeterminado' => __( 'NjengahPlus Envío', 'njengahplus' ) ), ); }
Para comprobar el resultado, siga estos pasos:
- Inicie sesión en su sitio de WordPress y acceda al Tablero como usuario administrador Desde el menú del Tablero, haga clic en WooCommerce > Configuración
- Haga clic en la pestaña Envío y haga clic en NjengahPlus Envío como se muestra a continuación:
- Active la casilla de verificación y guarde los cambios.
Podemos configurar el método de envío para enviar hasta 100 kg. Entonces permitiremos que se edite en la configuración si esa regla cambia pronto. Después de configurar esto, el código de configuración se verá así:
<?php función init_form_fields() { $this->form_fields = array( 'habilitado' => matriz( 'título' => __( 'Habilitar', 'njengahplus' ), 'tipo' => 'casilla de verificación', 'descripción' => __( 'Habilitar este envío.', 'njengahplus' ), 'predeterminado' => 'sí' ), 'título' => matriz( 'título' => __( 'Título', 'njengahplus' ), 'tipo' => 'texto', 'descripción' => __( 'Título que se mostrará en el sitio', 'njengahplus' ), 'predeterminado' => __( 'NjengahPlus Envío', 'njengahplus' ) ), 'peso' => matriz( 'título' => __( 'Peso (kg)', 'njengahplus' ), 'tipo' => 'número', 'descripción' => __( 'Peso máximo permitido', 'njengahplus' ), 'predeterminado' => 100 ), ); }
En el código anterior, ahora hemos establecido el peso máximo en la configuración. Aquí está el resultado:
c) Cálculo del costo de envío
Para calcular el costo de envío, actualizaremos el método de calcular_envío paso a paso para que pueda comprender cada paso.
- Primero, necesitamos obtener el costo por peso . Para hacer esto, simplemente agregue este código al método de calcular_envío:
<?php //... función pública calcular_envío ($ paquete) { $peso = 0; $coste = 0; $país = $paquete["destino"]["país"]; foreach ($paquete['contenido'] as $item_id => $valores) { $_producto = $valores['datos']; $peso = $peso + $_producto->get_peso() * $valores['cantidad']; } $peso = wc_get_weight( $peso, 'kg' ); si ($peso <= 10) { $coste = 0; } elseif( $peso <= 30 ) { $coste = 5; } elseif( $peso <= 50 ) { $coste = 10; } demás { $costo = 20; } }
- Del código anterior, tenemos el costo basado en el peso del carrito, tenemos que calcular el costo para el país de envío seleccionado. Para ello añade este código:
<?php función pública calcular_envío ($ paquete) { $paísZonas = array( 'HR' => 0, 'EE. UU.' => 3, 'GB' => 2, 'CA' => 3, 'ES' => 2, 'DE' => 1, 'ES' => 1 ); $precioszona = array( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zonaDesdePaís = $paísZonas[ $país ]; $priceFromZone = $zonePrices[ $zoneFromCountry ]; $costo += $precioDesdeZona; }
- Hemos calculado el costo por el peso total y también hemos agregado el costo por país de envío. El último paso es añadir este código para registrar la tarifa.
Cómo funciona el código
En el primer fragmento de esta sección, hemos definido algunas variables iniciales: $weight
, $cost
y $country
. Para obtener el total, obtenemos el peso total al iterar el carrito y agregar el peso de cada producto en el carrito a la variable $weight
.
Después de tener el peso total, estamos usando la function wc_get_weight
para convertir el peso en kilogramos, ya que esta es la unidad en la que nuestro método de envío ha establecido el límite. Luego, lo último fue establecer el límite en 100 kg.
En el segundo fragmento, la matriz $countryZones
contiene las zonas de cada país y la segunda matriz $zonePrices
contiene los precios de cada zona.
Este será el resultado para Italia Zona 1:
Este será el resultado para España Zona 2:
Este será el resultado para Zona Canadá:
Si ha tenido dificultades para implementar este código, aquí está el código completo:
<?php función pública calcular_envío ($ paquete) { $peso = 0; $coste = 0; $país = $paquete["destino"]["país"]; foreach ($paquete['contenido'] as $item_id => $valores) { $_producto = $valores['datos']; $peso = $peso + $_producto->get_peso() * $valores['cantidad']; } $peso = wc_get_weight( $peso, 'kg' ); si ($peso <= 10) { $coste = 0; } elseif( $peso <= 30 ) { $coste = 5; } elseif( $peso <= 50 ) { $coste = 10; } demás { $costo = 20; } $paísZonas = array( 'HR' => 0, 'EE. UU.' => 3, 'GB' => 2, 'CA' => 3, 'ES' => 2, 'DE' => 1, 'ES' => 1 ); $precioszona = array( 0 => 10, 1 => 30, 2 => 50, 3 => 70 ); $zonaDesdePaís = $paísZonas[ $país ]; $priceFromZone = $zonePrices[ $zoneFromCountry ]; $costo += $precioDesdeZona; $tasa = matriz( 'id' => $esto->id, 'etiqueta' => $este->título, 'costo' => $costo ); $this->add_rate( $tarifa ); }
Conclusión
En esta publicación, creamos un complemento personalizado para agregar un método de envío personalizado en WooCommerce. Además, he compartido con usted la API de envío de WooCommerce que le permite crear su método de envío con pasos simples. Además, las limitaciones y la disponibilidad se pueden establecer dentro del método de envío al calcular la disponibilidad o el costo del método de envío. Sin embargo, se pueden configurar fuera del método de envío mediante acciones de WooCommerce. Espero que este tutorial haya proporcionado una solución para agregar un método de envío personalizado en WooCommerce.
Artículos similares
- Cómo agregar números GTIN en productos en WooCommerce
- Cómo eliminar Ha sido agregado a su carrito Mensaje WooCommerce
- Cómo agregar un logotipo de confianza o seguro en la página de pago de WooCommerce
- Cierre de sesión de WooCommerce sin confirmación: cómo eliminar "¿Está seguro de que desea cerrar sesión?"
- ¿Cómo redirigir una página de WordPress sin complementos?
- Cómo agregar una imagen de producto en la página de pago de WooCommerce
- Cómo configurar productos destacados en WooCommerce
- Cómo ocultar el campo de código de cupón de WooCommerce
- Cómo mostrar productos de WooCommerce por categoría
- Cómo ocultar todos los productos de la página de la tienda en WooCommerce
- Cómo ordenar las categorías de WooCommerce para una mejor experiencia de usuario
- Cómo vender productos digitales con WooCommerce
- Cómo cambiar el aviso 'Agregado al carrito' de WooCommerce
- Cómo deshabilitar el método de pago para una categoría específica
- Más de 30 mejores complementos de WooCommerce para su tienda (la mayoría son GRATIS)
- Cómo cambiar el nombre de los mensajes de estado del pedido en WooCommerce
- Los 23 mejores complementos de WooCommerce para la personalización de la página de pago
- Cómo eliminar la clasificación de productos predeterminada de WooCommerce
- Cómo verificar si el complemento está activo en WordPress [3 MANERAS]