it-swarm.com.de

Woocommerce-Widget für Produktkategorien - Kategorien ausblenden, die keine Produkte auf Lager haben

Ich verwende WooCommerce auf meiner Wordpress-Site und habe ein Widget in der Seitenleiste, das alle Produktkategorien anzeigt. Es ist so eingestellt, dass leere Kategorien ausgeblendet werden, und das funktioniert gut. Es werden jedoch weiterhin Kategorien angezeigt, die nur Produkte enthalten, die nicht vorrätig sind - die ich ändern möchte.

Technische Erklärung: Bei WooCommerce-Produkten handelt es sich um einen benutzerdefinierten Post-Typ (product), bei den Produktkategorien handelt es sich um eine benutzerdefinierte Taxonomie (product_cat) und bei der Bestandszählung handelt es sich um ein benutzerdefiniertes Feld für die Produkte (_stock). Das Widget "WooCommerce-Produktkategorien" zeigt sie mit wp_list_categories() an. Ich habe versucht, in einem Code nach einem Filteraufruf zu suchen, an den ich mich anschließen konnte, konnte aber keinen finden.

Gibt es eine gute Möglichkeit, dies zu tun, ohne den Core- oder WooCommerce-Code zu ändern? Vielleicht ein Hook/Filter irgendwo, den ich verpasst habe, um den benutzerdefinierten Feldwert zu überprüfen?

3
olex

Verwenden Sie die Filter woocommerce_product_categories_widget_args und woocommerce_get_availability in einer benutzerdefinierten Funktion, um das Widget für Produktkategorien nach nicht vorrätigen Produkten zu filtern.

Sehen Sie, was Sie mit diesen Filtern finden können, und posten Sie den Code hierher zurück, wenn Sie nicht weiterkommen.

Hier ist ein Code von meiner Website, der Ihnen den Einstieg erleichtern kann.

add_filter( 'woocommerce_product_categories_widget_args', 'wpsites_exclude_product_cat_widget' );

function wpsites_exclude_product_cat_widget( $args ) {

$args['exclude'] = array('16','46');

return $args;
}

Hier sind alle Hooks für WooCommerce

4
Brad Dalton

Ich bin mir nicht sicher, ob dies möglich ist, da ich nicht glaube, dass es in wp_list_categories() einen Platz gibt, der jemals den Status der Posts/Produkte in der Kategorie überprüfen würde. Selbst wenn dies der Fall wäre, müssten Sie viele Produkte in ALLEN Kategorien abfragen, was sehr ineffizient wäre.

Sie könnten vielleicht den WC_Product_Cat_Dropdown_Walker ersetzen und Ihre Überprüfung dort durchführen.

Die verantwortliche Funktion sieht so aus, als würde sie einen anderen Walker akzeptieren:

/**
 * Walk the Product Categories.
 *
 * @return mixed
 */
function wc_walk_category_dropdown_tree() {
    global $woocommerce;

    if ( ! class_exists( 'WC_Product_Cat_Dropdown_Walker' ) )
        include_once( WC()->plugin_path() . '/includes/walkers/class-product-cat-dropdown-walker.php' );

    $args = func_get_args();

    // the user's options are the third parameter
    if ( empty( $args[2]['walker']) || !is_a($args[2]['walker'], 'Walker' ) )
        $walker = new WC_Product_Cat_Dropdown_Walker;
    else
        $walker = $args[2]['walker'];

    return call_user_func_array(array( &$walker, 'walk' ), $args );
}

Wenn Sie also das Widget duplizieren, könnten Sie es scheinbar ändern

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                'show_counts'        => $c,
                'hierarchical'       => $h,
                'show_uncategorized' => 0,
                'orderby'            => $o
            ) );

zu

// Stuck with this until a fix for http://core.trac.wordpress.org/ticket/13258
            wc_product_dropdown_categories( array(
                'show_counts'        => $c,
                'hierarchical'       => $h,
                'show_uncategorized' => 0,
                'orderby'            => $o,
                                'walker'             => 'InStock_Categories'
            ) );

Und dann sind Sie dafür verantwortlich, eine InStock_Categories Walker-Klasse zu erstellen und einzuschließen. Völlig ungetestet, aber nur ein paar Ideen rauswerfen.

2
helgatheviking

Wenn Sie zu WooCommerce => Einstellungen gehen und die Registerkarte "Inventar" auswählen, wird die Option "Nicht vorrätige Artikel aus dem Katalog ausblenden" angezeigt. Wenn Sie diese Option aktivieren, werden nicht auf Lager befindliche Artikel nicht angezeigt, und wenn eine Kategorie keine verkaufbaren (nicht auf Lager oder ohne Preis) Artikel enthält, werden diese ebenfalls ausgeblendet.

Update

Ok, ich habe 'Widget' gelesen und es in meiner Antwort total ignoriert.

Das Widget "WooCommerce-Produktkategorien" unterstützt meines Wissens nicht das Filtern der Produkte/Kategorien. Also kein Haken oder Filter, den ich kenne.

Sie können die einzelne Datei jedoch problemlos kopieren und als eigenständiges Widget ändern, das von einem WooCommerce-Upgrade nicht überschrieben wird.

Hoffentlich hilft das.

0
Steve