Woocommerce benutzerdefinierte Felder für den Versandrechner

Lesezeit: 3 Minuten

Benutzer-Avatar
HeruRaHa

Ich baue eine benutzerdefinierte Versandmethode für Woocommerce auf, und das einzige, was mich total beschäftigt, ist, wie benutzerdefinierte Werte an die Funktion compute_shipping() übergeben werden, entweder wenn sie auf der Warenkorbseite oder der Checkout-Seite verwendet wird.

Ich muss eine Handvoll benutzerdefinierter Variablen übergeben, die sich auf das Angebot auswirken, z. B. “Ist Wohnadresse”, “Ist Messe” usw. usw.

compute_shipping empfängt das $package-Array, das ein ‘destination’-Array enthält, aber dieses enthält nur die Standardinformationen add1, add2, Stadt, Staat, Postleitzahl, Land. Ich habe der Checkout-Seite sowohl unter Rechnungsstellung als auch unter Versand benutzerdefinierte Felder hinzugefügt, aber ich kann immer noch nicht herausfinden, wie ich diese Werte für die Funktion compute_shipping zugänglich machen kann.

Ich habe ein benutzerdefiniertes Feld wie folgt hinzugefügt:

add_filter( 'woocommerce_checkout_fields' , 'custom_override_checkout_fields' );

// Our hooked in function - $fields is passed via the filter!
function custom_override_checkout_fields( $fields ) {
  $fields['shipping']['is_residential'] = array(
    'label'     => __('Residential Address?', 'woocommerce'),
 'type'      => 'checkbox',
 'required'  => false,
 'class'     => array('form-row-wide'),
 'clear'     => true
  );

  return $fields;
}

Und ich sehe, dass dieses Feld im Abschnitt „Versand“ des Bestellformulars angezeigt wird. Ich sehe jedoch nicht, wie ich irgendwo darauf zugreifen kann. Sogar eine print_r($_POST) auf der Checkout-Seite wird dieses Feld nicht als Teil der Beitragsdaten angezeigt, selbst nachdem ich weiß, dass das Formular aktualisiert und erneut gepostet wurde.

Aber am wichtigsten ist, dass ich den Inhalt des übermittelten Felds in das $package-Objekt einfügen muss, das Woocommerce an die compute_shipping()-Funktion einer Versandmethode übergibt.

Ich bin mir nur wirklich nicht sicher, wo ich überhaupt damit anfangen soll.

  • Es ist im Allgemeinen hilfreich, wenn Sie einen Ausschnitt des Codes, den Sie bisher geschrieben haben, zitieren, der das Problem zeigt, das Sie haben, und dann darauf hinweisen, wo das Problem in diesem Code liegt, anstatt nur beschreiben der Code, den Sie geschrieben haben.

    – Neminem

    14. Februar 2014 um 22:50 Uhr

  • Ich habe oben etwas Code hinzugefügt, bin mir aber nicht sicher, wie nützlich er sein wird. Die große Sache ist nur, dass ich benutzerdefinierte Checkout-Felder brauche, um irgendwie zugänglich zu sein, und bisher kann ich nicht einmal die Werte in $_POST finden

    – HeruRaHa

    14. Februar 2014 um 23:35 Uhr

Sie können nicht erwarten, Checkout-Felder hinzuzufügen und sie auf der Warenkorbseite verfügbar zu haben.

Der richtige Weg ist die Verwendung von Warenkorbpaketen.

Prüfen function get_shipping_packages() aus class-wc-cart.php

public function get_shipping_packages() {
        // Packages array for storing 'carts'
        $packages = array();

        $packages[0]['contents']                 = $this->get_cart();       // Items in the package
        $packages[0]['contents_cost']            = 0;                       // Cost of items in the package, set below
        $packages[0]['applied_coupons']          = $this->applied_coupons;
        $packages[0]['destination']['country']   = WC()->customer->get_shipping_country();
        $packages[0]['destination']['state']     = WC()->customer->get_shipping_state();
        $packages[0]['destination']['postcode']  = WC()->customer->get_shipping_postcode();
        $packages[0]['destination']['city']      = WC()->customer->get_shipping_city();
        $packages[0]['destination']['address']   = WC()->customer->get_shipping_address();
        $packages[0]['destination']['address_2'] = WC()->customer->get_shipping_address_2();

        foreach ( $this->get_cart() as $item )
            if ( $item['data']->needs_shipping() )
                if ( isset( $item['line_total'] ) )
                    $packages[0]['contents_cost'] += $item['line_total'];

        return apply_filters( 'woocommerce_cart_shipping_packages', $packages );
    }

Du musst einhaken woocommerce_cart_shipping_packages filtern und dort Ihre Felder hinzufügen.

Höchstwahrscheinlich müssen Sie sie (Ihre Felder) auf dem Versandrechner und den Checkout-Seiten hinzufügen.

Hoffe das hilft.

1345580cookie-checkWoocommerce benutzerdefinierte Felder für den Versandrechner

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

Privacy policy