Erhalten Sie alle Versandklassen in Woocommerce 3

Lesezeit: 2 Minuten

Benutzer-Avatar
mike.bronner

Ich konnte diese Nuss nicht knacken, aber ich werde das Gefühl nicht los, dass mir etwas Einfaches fehlt.

Ich entwickle ein WooCommerce-Plugin, das auf seiner Seite mit den Admin-Einstellungen eine Liste der Versandklassen bereitstellen soll. Der folgende Code, wie er in der Antwort einer anderen Frage vorgeschlagen wurde, zeigte an, dass Folgendes funktionieren sollte:

$shipping           = new \WC_Shipping();
$shipping_classes   = $shipping->get_shipping_classes();
var_dump($shipping_classes);
die();

Leider ist die Ausgabe ein leeres Array.

Ich verwende WordPress 4.9.5 und WooCommerce 3.3.5. Danke für jede Hilfe!

AKTUALISIEREN
Ich habe genau das gleiche Problem wie hier beschrieben: get_terms() gibt eine ungültige Taxonomie zurück und habe eine Problemumgehung bereitgestellt. Allerdings halte ich das nicht für eine Lösung.

  • Versuchen Sie, alle Versandklassen oder Versandmethoden zu erhalten? Haben Sie auch versucht, den Schrägstrich davor zu entfernen? WC_Shipping();?

    – Fritten

    15. April 2018 um 17:42 Uhr

Benutzer-Avatar
LoicTheAztec

Um alle Versandklassen zu erhalten, benötigen Sie lediglich Folgendes:

$shipping_classes = get_terms( array('taxonomy' => 'product_shipping_class', 'hide_empty' => false ) );

Getestet und funktioniert. Dadurch erhalten Sie ein Array der WP_Term Objekte aller Versandklassen.

Bei Woocommerce sind die Versandklassen unter product_shipping_class benutzerdefinierte Taxonomie.


Oder Sie können diese benutzerdefinierte Funktion mit einer einfachen SQL-Abfrage verwenden:

function wc_get_shipping_classes(){
    global $wpdb;
    $return $wpdb->get_results( "
        SELECT * FROM {$wpdb->prefix}terms as t
        INNER JOIN {$wpdb->prefix}term_taxonomy as tt ON t.term_id = tt.term_id
        WHERE tt.taxonomy LIKE 'product_shipping_class'
    " );
}

Der Code wird in die function.php-Datei Ihres aktiven untergeordneten Designs (oder aktiven Designs) eingefügt.

VERWENDUNG (Testbeispiel):

$shipping_classes = wc_get_shipping_classes(); // Get Shipping Classes
echo '<pre>'; print_r($shipping_classes); echo '</pre>'; // Test raw output   

  • Das funktioniert in meinem Fall nicht wirklich. Ich habe das versucht, und es gibt aus irgendeinem Grund nur eine einzige Versandklasse zurück, nicht alle. Ich habe in der ursprünglichen Frage einen Link zu einer anderen Frage hinzugefügt, die ich gefunden habe und die das genaue Problem genauer aufwirft. Ich habe dort auch einen Workaround bereitgestellt, aber ich denke nicht, dass das eine richtige Lösung war.

    – mike.bronner

    16. April 2018 um 16:25 Uhr


  • @mike.bronner Sehr seltsam, weil alle Versandklassen Begriffe aus der benutzerdefinierten Taxonomie „product_shipping_class“ in Woocommerce sind. So Ich habe meine Antwort aktualisiert und einen zweiten Weg hinzugefügt… Versuch es.

    – LoicTheAztec

    16. April 2018 um 16:46 Uhr


  • Danke für die Mühe. 🙂 Ich freue mich, die Ergebnisse durchzuschleifen get_terms() (ohne Argumente) und meine Ergebnisse herausfiltern. Ich bin mir ziemlich sicher, dass es irgendwo einen Fehler oder Konflikt gibt, der Chaos anrichtet. 😐

    – mike.bronner

    17. April 2018 um 0:09 Uhr


Vielleicht sucht noch jemand nach einer Lösung 🙂

$WC_Shipping = new WC_Shipping();
$shipping_classes = $WC_Shipping->get_shipping_classes();
var_dump($shipping_classes);

Benutzer-Avatar
Daniel Morel

Das ist eigentlich ganz einfach…

/** 
 * @var WP_Terms[] $shipping_classes
 */
$shipping_classes = WC()->shipping()->get_shipping_classes();

1371670cookie-checkErhalten Sie alle Versandklassen in Woocommerce 3

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

Privacy policy