Crear un nuevo método de pago similar a contra rembolso pero con campo de instrucciones

// Agregar el nuevo método de pago

function agregar_metodo_pago_personalizado($gateways) {

    $gateways[] = 'WC_Pago_Personalizado';

    return $gateways;

}

add_filter('woocommerce_payment_gateways', 'agregar_metodo_pago_personalizado');


// Clase del método de pago Personalizado

class WC_Pago_Personalizado extends WC_Payment_Gateway {

    public function __construct() {

        $this->id = 'personalizado';

        $this->method_title = 'Método de pago personalizado';

        $this->method_description = 'Realiza el pago en persona con el método de pago personalizado.';

        $this->has_fields = false;


        $this->init_form_fields();

        $this->init_settings();


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

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

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


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

        add_action('woocommerce_thankyou_' . $this->id, array($this, 'thankyou_page'));

    }


    public function init_form_fields() {

        $this->form_fields = array(

            'enabled' => array(

                'title' => 'Habilitar/Desabilitar',

                'type' => 'checkbox',

                'label' => 'Habilitar Método de pago personalizado',

                'default' => 'yes'

            ),

            'title' => array(

                'title' => 'Título',

                'type' => 'text',

                'description' => 'Título que se mostrará durante el proceso de pago.',

                'default' => 'Método de pago personalizado'

            ),

            'description' => array(

                'title' => 'Descripción',

                'type' => 'textarea',

                'description' => 'Descripción adicional que se mostrará durante el proceso de pago.',

                'default' => 'Realiza el pago en persona con el método de pago personalizado.'

            ),

            'instructions' => array(

                'title' => 'Instrucciones',

                'type' => 'textarea',

                'description' => 'Instrucciones que se mostrarán en la página de finalizar compra.',

                'default' => 'Por favor, siga las instrucciones para realizar el pago en persona con el método de pago personalizado.'

            )

        );

    }


    public function process_payment($order_id) {

        $order = wc_get_order($order_id);


        // Marcar la orden como completada

        $order->payment_complete();


        // Vaciar el carro de compras

        WC()->cart->empty_cart();


        // Redireccionar a la página de gracias

        return array(

            'result' => 'success',

            'redirect' => $this->get_return_url($order)

        );

    }


    public function thankyou_page() {

        if ($this->instructions) {

            echo wpautop(wptexturize($this->instructions));

        }

    }

}