Creare un metodo di pagamento personalizzato in WooCommerce

← ritorno a WordPress / WooCommerce

Estratto da: https://www.mattepuffo.com/blog/articolo/2883-creare-un-custom-payment-in-woocommerce.html

WooCommerce è probabilmente il plugin per Wordpress più utilizzato per la creazione di ecommerce.

Ha tantissimi plugins, e può essere esteso con altri plugin custom.

Oggi vediamo come crearne uno per aggiungere un metodo di pagamento custom.

La struttura di base è la stessa dei plugin di Wordpress;

1. Cartella plugin

Per prima cosa create una cartella dentro a wp-content/plugins, nominandola seguendo le regole base di Wordpress: ad esempio my-custom-payment.

Qui dentro abbiamo bisogno almeno di due files:

  • readme.txt
  • un file PHP con lo stesso nome della cartella -> my-custom-payment.php

2. File informativo

Cominciamo dal readme.txt:

=== WooCommerce My Custom Payment ===
Contributors: 
Tags: 
Requires at least: 
Tested up to:
Stable tag:
License:
License URI:

== Description ==

La vostra descrizione

Come vedete ci sono alcune informazioni di base; non penso siano tutte obbligatorie.


3. File plugin

Passiamo al file PHP:

<?php
/**
 * Plugin Name: Custom for Woocommerce
 * Plugin URI: https://www.sito.it
 * Description: Custom Payment
 * Author: Nome Congome
 * Author URI: https://www.sito.it
 * Version: 0.1
 *
 * @package WC_Admin
 */

defined('ABSPATH') || exit;

// AGGIUNGO UN FILTRO PER VISUALIZZARE IL GATEWAY ALL'INTERNO DELLA LISTA DI WOOCOMMERCE
add_filter('woocommerce_payment_gateways', 'Custom_add_gateway_class');
function Custom_add_gateway_class($gateways) {
    $gateways[] = 'WC_Custom';
    return $gateways;
}

// AGGIUNGO L'AZIONE
add_action('plugins_loaded', 'init_wc_custom_payment_gateway');
function init_wc_custom_payment_gateway() {

    class WC_Custom extends WC_Payment_Gateway {

        public function __construct() {

            // CAMPI OBLIGATORI
            $this->id = 'wc_custom';
            $this->method_title = 'Custom';
            $this->title = 'Custom';
            $this->has_fields = true;
            $this->method_description = 'Custom payment gateway';

            // CARICO LE IMPOSTAZIONI
            $this->init_form_fields();
            $this->init_settings();
            $this->enabled = $this->get_option('enabled');
            $this->title = $this->get_option('title');
            $this->description = $this->get_option('description');

            // PROCESSO LE IMPOSTAZIONI
            add_action('woocommerce_update_options_payment_gateways_' . $this->id, array($this, 'process_admin_options'));
        }

        public function init_form_fields() {
            $this->form_fields = array(
                'enabled' => array(
                    'title' => 'Enable/Disable',
                    'type' => 'checkbox',
                    'label' => 'Enable Custom',
                    'default' => 'yes'
                ),
                'title' => array(
                    'title' => 'Custom',
                    'type' => 'text',
                    'description' => 'This controls the payment Custom',
                    'default' => 'Custom Payment Gateway',
                    'desc_tip' => true,
                ),
                'description' => array(
                    'title' => 'Customer Message',
                    'type' => 'textarea',
                    'css' => 'width:500px;',
                    'default' => 'Weld Payment Gateway',
                    'description' => 'Paga con Custom.',
                )
            );
        }

        // PROCESSO DI PAGAMENTO
        function process_payment($order_id) {
            global $woocommerce;

            $order = new WC_Order($order_id);

            // QUI DOVETE METTERE IL VOSTRO CODICE
            $res = $this->CustomPayment();
			// FINE VOSTRO CODICE

            $order->update_status('processing', 'Additional data like transaction id or reference number');
            $woocommerce->cart->empty_cart();
            $order->reduce_order_stock();

            return array(
                'result' => 'success',
                'redirect' => $this->get_return_url($order)
            );
        }
    }
}

Le prime righe, quelle commentate, le dovete tenere; sennò il plugin non verrà visualizzato nella lista di quelli installati.

Poi usiamo add_filter per visualizzare il metodo di pagamento nelle opzioni di WooCommerce; senza quelle righe, anche a plugin attivato, il nostro gateway non apparirà tra quelli disponibili.

Con add_action carichiamo il plugin; nella nostra funzione c'è una classe che deve estendere WC_Payment_Gateway.

Qui dentro ci sta tutto il blocco più o meno obbligatorio; vi ho segnalato dove dovete inserire il vostro codice.

Ovviamente il comportamento generale dipende anche dal tipo di gateway che dovete creare, e a qali eventuali API dovete agganciarvi.

4. Attivazione

Una volta attivato il plugin, andate nelle impostazioni di pagamento di WooCommerce per vederlo nella lista.