it-swarm.com.de

Benutzerdefinierte Versandmethode wird in der Kaufabwicklung nicht angezeigt

Ich erstelle eine benutzerdefinierte Versandmethode für Woocommerce - und mein Problem ist, dass ich sie einer bestimmten Zone im Admin-Bereich hinzufügen und die Einstellungen gut anpassen kann. Aber aus irgendeinem Grund erscheint es nicht auf der Checkout-Seite - und ich habe keine Ahnung warum.

es sollte sehr einfach sein, und ich habe dies tatsächlich ein paar Mal zuvor getan (vor 3.0) - aber ich kann es jetzt einfach nicht zum Laufen bringen.

Hauptklasse

abstract class Main_Shipping extends WC_Shipping_Method
{
abstract protected function register_shipping($methods);
abstract protected function addActions();
abstract protected function addFilters();

function init() 
{
    $this->instance_form_fields                     = include('setting/shipping-settings.php' );
    $this->title                                    = $this->get_option('title' );
    $this->tax_status                               = $this->get_option('tax_status');
    $this->shipping_price                           = $this->get_option('shipping_price');
    $this->enable_free_shipping                     = $this->get_option('enable_free_shipping');
    $this->free_shipping_total                      = $this->get_option('free_shipping_total');

    $this->init_settings(); 

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

public function calculate_shipping($package = array())
{
    global $woocommerce;
    $return_price = $this->shipping_price;
    if(!isset($return_price))
    {
       $return_price = 0;
    }
    $rate = array(
        'id'      => $this->id .'_'. $this->instance_id,
        'label'   => $this->title,
        'cost'    => $return_price,
       );
    $this->add_rate( $rate );
}

public function oaship_pickuppoint()
{ 
    ob_start();
    ?>
        <div>
            test
        </div>

    <?php
    $sContent = ob_get_clean();
    echo $sContent;
}
}

Spezifische GLS-Trägerklasse:

 require_once('main-shipping.php');
 class GLS_Shipping_Pickuppoint extends Main_Shipping
{
public function __construct( $instance_id = 0 ) 
{
    $this->id                    = 'gls_shipping_pickuppoint';
    $this->instance_id           = absint( $instance_id );
    $this->method_title          = __('GLS Pickup Point OA', '');
    $this->method_description    = __('Adds the option to ship with the GLS pickup point to the checkout', '');
    $this->supports              = array(
        'shipping-zones',
        'instance-settings',
    );
    $this->init(); 
}

function addActions()
{     
    add_action('woocommerce_after_shipping_rate', array($this, 'check_choosen_shipping_method') );
}

function addFilters()
{
    add_filter('woocommerce_shipping_methods', array($this, 'register_shipping_method'));
}

function register_shipping($methods) 
{

    $methods['gls_shipping_pickuppoint'] = 'GLS_Shipping_Pickuppoint';

    return $methods;
}

function check_choosen_shipping_method($rate)
{

    $chosen_methods = WC()->session->get( 'chosen_shipping_methods' );
    $chosen_shipping = preg_replace('/[0-9]+/', '', $chosen_methods[0]);;
    if($chosen_shipping === 'gls_shipping_pickuppoint')
    {
        if ($rate->method_id == 'gls_shipping_pickuppoint') {
            $this->oaship_pickuppoint();
        }
    }
}
}

$oOAGlsPickupPoint = new GLS_Shipping_Pickuppoint();
$oOAGlsPickupPoint->addActions();
 $oOAGlsPickupPoint->addFilters();
2
Mac

Ich entwickle im Moment die gleiche Funktionalität und so etwas passiert mir (ich konnte die Einstellungen im Admin-Dashboard sehen, aber nicht auf der Checkout-Seite) ...

Was ich getan habe, war die Option Debug-Modus aktivieren in WooCommerce/Settings/Shipping/Shipping options und dann konnte ich meinen benutzerdefinierten Versand auf der Checkout-Seite sehen. Danach deaktiviere ich die Option wieder und mein Versand ist immer noch auf der Checkout-Seite sichtbar (ich kenne den Grund nicht, aber es funktioniert)

Ich habe Ihren Code überprüft und festgestellt, dass Ihnen eine wichtige Aktion zum Hinzufügen eines benutzerdefinierten Versands fehlt:

add_action( 'woocommerce_shipping_init', 'tutsplus_shipping_method' );

dabei ist der tutsplus_shipping_method eine Funktion, die die Klasse definiert, die die Methode WC_Shipping_Method erweitert.

Die Aktion woocommerce_shipping_init ist die Hauptaktion für WooCommerce Shippings, die alle Versandklassen umfasst, bevor sie instanziiert werden. Mit dieser Aktion können wir sicher sein, dass unsere Versandmethode nach der Initialisierung von WooCommerce an der richtigen Stelle für WooCommerce verfügbar ist.

Ich stelle auch fest, dass Ihr Filter add_filter('woocommerce_shipping_methods', array($this, 'register_shipping_method')); auf eine Funktion verweist, die nicht existiert. Vielleicht handelt es sich um einen Tippfehler, und Sie wollten auf Ihre register_shipping -Funktion verweisen.

Ich folgte diesem Tutorial und alles war großartig: https://code.tutsplus.com/tutorials/create-a-custom-shipping-method-for-woocommerce--cms-26098