Jak vytvořit vlastní dopravní metodu ve WooCommerce - Affinite.io CZ

Výchozí dopravní metody, které jsou ve WooCommerce k dispozici, nejsou vždy využitelné, pro konkrétní požadavky na dopravu zboží. Někdy si proto musíte vytvořit vlastní dopravní metodu.

Původně jsem sem chtěl jenom „plácnout“ hotovu třídu a hotovo. Lepší to ale bude vzít bod po bodu.

Vlastní dopravu vytvoříte tak, že si uděláte plugin, který bude obsahovat třídu dopravy.

Nejprve si musíte vytvořit soubor pluginu, můžete jej nazvat třeba custom-shipping.php a uložit jej do složky plugins.

Na začátek pluginu přidáte hlavičku, aby WordPress poznal, že jde o plugin:

/**
 * @wordpress-plugin
 * Plugin Name:       Custom shipping
 * Plugin URI:
 * Description:
 * Version:           1.0
 * Author:
 * Author URI:
 * Text Domain:       custom-shipping
 * License:           GPL-2.0+
 * License URI:       http://www.gnu.org/licenses/gpl-2.0.txt
 * Domain Path:       /languages
 */

V druhém kroku přidáte funkci woocommerce_custom_shipping_init, která se bude přes hook plugin_loaded provádět po načtení pluginu a která obsahuje třídu custom dopravy. Na konec souboru přidáme funkci, pomocí které přidáme do pole dostupných doprav dopravní metodu. Klíč položky pole je id dopravy, hodnotou je název třídy.

function woocommerce_custom_shipping_init(){

	if ( !class_exists( 'WC_Shipping_Method' ) ) {
      	return;
	}

	if ( ! class_exists( 'WC_Custom_Shipping_Method' ) ) {

		class WC_Custom_Shipping_Method extends WC_Shipping_Method {

		}

	}

}
add_action('plugins_loaded', 'woocommerce_custom_shipping_init');

function add_woo_custom_shipping_method( $methods ) {
	$methods['custom'] = 'WC_Custom_Shipping_Method';
	return $methods;
}
add_filter( 'woocommerce_shipping_methods', 'add_woo_custom_shipping_method' );

Třetí krok je vytvoření konstruktoru.

V něm musíme definovat

  • id dopravy – musí odpovídat hodnotě ve funkci add_woo_custom_shipping_method
  • instance id – nastaví se automaticky při vytvoření objektu
  • název dopravy – zobrazeno v administraci
  • popis dopravy – zobrazeno v administraci
  • co doprava podporuje
  • vygenerujeme si formulář nastavení
  • povoleno nastavíme na ano
  • z option si načteme název dopravy – zobrazuje se na pokladně
  • popis dopravy- zobrazuje se na pokladně
  • dostupnost dopravy
  • na závěr akce pro uložení formuláře nastavení
/**
 * Constructor for your shipping class
 *
 * @access public
 * @return void
 */
public function __construct( $instance_id = 0 ) {

	$this->id                 = 'custom';
	$this->instance_id        = absint( $instance_id );
	$this->method_title       = __( 'Custom shipping', 'custom-shipping' );
	$this->method_description = __( 'Custom shipping for WooCommerce', 'custom-shipping' );

	$this->supports           = array(
              'shipping-zones',
              'instance-settings',
              'instance-settings-modal',
	);

	$this->init_form_fields();

	$this->enabled            = "yes";
	$this->title              = $this->get_option( 'title' );
	$this->description        = $this->get_option( 'description' );
	$this->availability       = $this->get_option( 'availability' );

	add_action( 'woocommerce_update_options_shipping_' . $this->id, array( $this, 'process_admin_options' ) );

}

Přidáme formulář nastavení:

/**
 * Init form fields
 *
 * @access public
 */
public function init_form_fields() {

	$this->instance_form_fields = array(
		'enabled'     => array(
			'title'       => __( 'Enable', 'custom-shipping' ),
			'type' 	      => 'checkbox',
			'label'       => __( 'Enable custom shippng', 'custom-shipping' ),
			'default'     => 'yes',
		),
		'title'       => array(
			'title'       => __( 'Title', 'custom-shipping' ),
			'type'        => 'text',
			'description' => __( 'Method title', 'custom-shipping' ),
			'default'     => __( 'Custom shipping', 'custom-shipping' ),
		),
		'description' => array(
			'title'       => __( 'Description', 'custom-shipping' ),
			'type'        => 'text',
			'description' => __( 'Shipping description', 'custom-shipping' ),
			'default'     => __( 'Custom shipping for WooCommerce', 'custom-shipping' ),
		),
		'cost'        => array(
			'title'       => __( 'Price', 'custom-shipping' ),
			'type'        => 'text'
		),
	);

}

Tato metoda je jen jedno velké pole, kde každá položka je jedno formulářové políčko v administraci:

Takže, pokud budete chtít přidávat další nastavení, s kterým budete chtít v dopravě pracovat, stačí jen rozšířit toto pole.

K hodnotám se pak přistupuje přes $this->get_option( id_pole );

A nakonec vytvoříme dvě metody, které jsou velmi důležité, protože v nich budeme určovat, kolik doprava stojí a zda se může aktivně zobrazovat:

/**
 * Calculate_shipping function.
 *
 * @access public
 */
public function calculate_shipping( $package = array() ) {

	$cost = $this->get_option( 'cost' );

	$rate = array(
		'id' 		=> $this->id,
		'label' 	=> $this->title,
		'calc_tax'	=> 'per_order',
		'cost' 		=> $cost
	);

	$this->add_rate( $rate );

}
	
/**
 * Is available shipping
 *
 * @access public
 */
public function is_available( $package ) {

	if ( 'no' == $this->enabled ) {
		return false;
	}

	return apply_filters( 'woocommerce_shipping_' . $this->id . '_is_available', true, $package );

}

V těchto dvou metodách pak můžete udělat podmínky, kdy se má doprava zobrazovat, zda se bude měnit její cena, na základě hmotnosti a podobně.

Jakmile to celé poskládáme – kompletní kód nejdete zde https://github.com/Musilda/woocommerce-custom-shipping/blob/main/custom-shipping.php a nahrajete soubor do složky plugins, zobrazí se vám v plugine pro aktivaci.

Nastavíte stejně jako každou jinou dopravu a máte ji k dispozici na pokladně:

A to je vše. Nyní máte vytvořenou vlastní dopravu, kterou můžete upravovat jak budete chtít. Pro vytvoření další dopravy, stačí vzít třídu, zduplikovat ji a změnit její název a id.

V případě, že budete potřebovat pomoci s implementací vlastní custom dopravy, napište mi na musilda@musilda.cz.

Jak přesunout popis kategorie produktu za výpis produktů
Jak přesunout popis kategorie produktu za výpis produktů
08 Čvc, 2021
WooCommerce 5.5.0
WooCommerce 5.5.0
13 Čvc, 2021

Komentáře nejsou povoleny.

Looking for something?