So laden Sie eine benutzerdefinierte Vorlage für den Woocommerce-Mini-Warenkorb in ein benutzerdefiniertes Widget

Lesezeit: 2 Minuten

Benutzer-Avatar
Vipin Kr. Singh

Ich möchte ein benutzerdefiniertes Widget für WooCommerce Mini Cart erstellen, aber auch das standardmäßige Mini Cart-Widget von WC beibehalten, also möchte ich nicht, dass eine Vorlage überschrieben wird, indem mini-cart.php in mein Design kopiert wird. Ich habe gerade die Widget-Klasse aus dem Widget-Verzeichnis des Plugins kopiert (plugins/woocommerce/includes/widgets/class-wc-widget-cart.php) und auch eine neue Vorlagendatei für den Mini-Warenkorb erstellt, indem ich den Standardcode von mini-cart.php kopiert habe in einer Datei unter dem Verzeichnis meines Themas, zB custom-mini-cart.php, die nur eine modifizierte Version der Kerndatei ist. Jetzt möchte ich diese Vorlagendatei für mein Widget laden. Die von mir verwendete Widget-Klasse ist, wie Sie sehen können, der Klasse des Kern-Widgets sehr ähnlich:

class WC_Dropdown_Cart extends WC_Widget {

    public function __construct() {
        $this->widget_cssclass="woocommerce widget_shopping_cart";
        $this->widget_description = __( "Custom Mini Cart", 'woocommerce' );
        $this->widget_name        = __( 'Custom Mini Cart', 'woocommerce' );
        $this->widget_id          = 'woocommerce_widget_custom_mini_cart';
        $this->settings           = array(
            'title'  => array(
                'type'  => 'text',
                'std'   => __( 'Cart', 'woocommerce' ),
                'label' => __( 'Title', 'woocommerce' )
            ),
            'hide_if_empty' => array(
                'type'  => 'checkbox',
                'std'   => 0,
                'label' => __( 'Hide if cart is empty', 'woocommerce' )
            )
        );
        parent::__construct();
    }

    function widget( $args, $instance ) {
    if ( is_cart() || is_checkout() ) {
        return;
    }

        $hide_if_empty = empty( $instance['hide_if_empty'] ) ? 0 : 1;

        $this->widget_start( $args, $instance );

        if ( $hide_if_empty ) {
            echo '<div class="hide_cart_widget_if_empty">';
        }

        // Insert cart widget placeholder - code in woocommerce.js will update this on page load
        echo '<div class="widget_shopping_cart_content"></div>';

        if ( $hide_if_empty ) {
            echo '</div>';
        }

        $this->widget_end( $args );
    }

}

Der Punkt, an dem WooCommerce diese Datei innerhalb der Widget-Funktion der Klasse aufruft, ist:

echo '<div class="widget_shopping_cart_content"></div>';

aber WooCommerce macht es auf eine Javascript-Weise, die ich nicht umgehen kann. Was sind die Schritte, um es hier zu tun?

Benutzer-Avatar
Sam K

Eine einfachere Lösung wäre die Verwendung von WooCommerce Hooks:

https://woocommerce.github.io/code-reference/namespaces/default.html

Mini-Wagenhaken:

https://woocommerce.github.io/code-reference/namespaces/default.html#function_woocommerce_mini_cart

Sie können in Ihrem Fall eine benutzerdefinierte Vorlage erstellen, den Code, den Sie aus dem WooCommerce-Originalcode kopiert und geändert haben, und dann den WooCommerce-Standard mithilfe dieser Aktion entfernen:

remove_action( 'woocommerce_after_mini_cart', 'action_woocommerce_after_mini_cart', 10, 0 );

und laden Sie dann Ihre template/file stattdessen mit der Aktion:

add_action( 'woocommerce_after_mini_cart', get_template_part('your-template-path'), 10, 0 );

WooCommerce hat sehr schöne Hooks, die Sie in Ihrer Themenentwicklung nutzen können. Bitte überprüfen Sie den ersten Link, um alle Hooks zu sehen.

Viel Spaß beim Codieren 🙂

1385550cookie-checkSo laden Sie eine benutzerdefinierte Vorlage für den Woocommerce-Mini-Warenkorb in ein benutzerdefiniertes Widget

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy