Senden nur der Bestellnummer anstelle der Artikelnamen an PayPal in Woocommerce

Lesezeit: 7 Minuten

Senden nur der Bestellnummer anstelle der Artikelnamen an PayPal in
DummyAnfänger

In PayPal möchte ich das Standard-Gateway von Woocommerce machen Woocommerce sendet nur “Bestellnummer” als einziger Artikel im Warenkorb anstelle der aufgeschlüsselten Produktliste.

Dafür habe ich versucht, die Klasse zu bearbeiten, die für eine PayPal-Anfrage hier verantwortlich ist:
woocommerce/includes/gateways/paypal/includes/class-wc-gateway-paypal-request.php

Ich habe versucht zu bearbeiten get_order_item_names() Funktion zurückzugeben "invoice" . $order->get_order_number() als Name des einzigen Artikels, aber es war nicht erfolgreich, da bei mehreren Artikeln nur der erste mit der Bestellnummer zurückgegeben wurde und andere Artikel übrig blieben.

Außerdem habe ich das genagelt add_line_item() Funktion, denn um dem Zweck näher zu kommen, sollte es praktisch nur “Artikelname_1” mit dem Betrag des Gesamtbetrags der Karte.

$this->line_items[ 'item_name_' . $index ]   = $this->limit_length( $item['item_name'], 127 );
$this->line_items[ 'quantity_' . $index ]    = $item['quantity'];
$this->line_items[ 'amount_' . $index ]      = $item['amount'];
$this->line_items[ 'item_number_' . $index ] = $this->limit_length( $item['item_number'], 127 );

Auch hier kein Erfolg.

Ich würde mich über Ihre Hilfe freuen.

Senden nur der Bestellnummer anstelle der Artikelnamen an PayPal in
LoicTheAztec

Empfehlung: Sie sollten es wirklich vermeiden, Woocommerce-Kerndateien zu überschreiben.

Stattdessen könnten Sie verwenden in diesem speziellen Fall der Filterhaken woocommerce_paypal_argswo Sie werden in der Lage sein, die Argumente zu manipulieren die darin verwendet werden get_request_url() Funktion (die die PayPal-Anforderungs-URL für eine Bestellung erhält).

1) TESTEN UND VERSENDETE DATEN ERHALTEN

Nur um mich zu registrieren und die Argumente an Paypal zu senden, habe ich den Hook folgendermaßen verwendet:

add_filter('woocommerce_paypal_args', 'custom_paypal_args', 10, 2 );
function custom_paypal_args ( $args, $order ) {
    // Saving the data to order meta data (custom field)
    update_post_meta( $order->get_id(), '_test_paypal', $args );
    return $args;
}

Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Jetzt kann ich die Daten einfach so abrufen (Einstellung der richtigen Auftrags-ID):

$order_id = 648;
$data_sent_to_paypal = get_post_meta( $order_id, '_test_paypal' );
echo '<pre>'; print_r( $data_sent_to_paypal ); echo '</pre>'; 

Oder in einem Hook (in Shopseiten in diesem Beispiel nur für Admins sichtbar):

// Only visible on shop pages by admins
add_action( 'woocommerce_before_main_content', function(){
    // Only visible by admins
    if( ! current_user_can( 'manage_options' ) ) return;

    $order_id = 648;
    $data_sent_to_paypal = get_post_meta( $order_id, '_test_paypal' );
    echo '<pre>'; print_r( $data_sent_to_paypal ); echo '</pre>';
}, 10, 0 );

Dies gibt mir eine Ausgabe wie diese (für 2 Produkte und unterschiedliche Mengen):

Array
(
    [0] => Array
    (
        [cmd] => _cart
        [business] => [email protected]
        [no_note] => 1
        [currency_code] => EUR
        [charset] => utf-8
        [rm] => 2
        [upload] => 1
        [return] => https://example.com/checkout/order-received/8877?key=wc_order_55445ndfgbulfdf&utm_nooverride=1
        [cancel_return] => https://example.com/cart/?cancel_order=true&order=wc_order_55445ndfgbulfdf&order_id=8877&redirect&_wpnonce=34m7kl83455
        [page_style] => 
        [image_url] => https://example.com/wp-content/uploads/2012/06/logo.png
        [paymentaction] => sale
        [bn] => WooThemes_Cart
        [invoice] => pp-8877
        [custom] => {"order_id":8877,"order_key":"wc_order_55445ndfgbulfdf"}
        [notify_url] => https://example.com/wc-api/WC_Gateway_Paypal/
        [first_name] => John
        [last_name] => Doe
        [address1] => Test st.
        [address2] => 
        [city] => wef
        [state] => AR
        [zip] => 43242
        [country] => US
        [email] => [email protected]
        [night_phone_a] => 078
        [night_phone_b] => 653
        [night_phone_c] => 6216
        [no_shipping] => 1
        [tax_cart] => 16.55
        [item_name_1] => Test Product - Service
        [quantity_1] => 1
        [amount_1] => 71
        [item_number_1] => 
        [item_name_2] => Test Product 1
        [quantity_2] => 1
        [amount_2] => 66
        [item_number_2] => 
        [item_name_3] => Test Product 2
        [quantity_3] => 1
        [amount_3] => 120
        [item_number_3] => 
        [item_name_4] => Test Product 3
        [quantity_4] => 1
        [amount_4] => 45
        [item_number_4] => 
    )

)

Wie Sie jetzt sehen können, mit woocommerce_paypal_args Sie können alle Argumente ändern oder entfernen.

Es gibt immer nur einen: 'item_name_1', 'quantity_1', 'amount_1' und 'item_number_1' mit Always-Index 1 an Paypal geschickt.


2 MANIPULATION DER GESENDETEN DATEN (Beispiel):

Können wir noch verwenden woocommerce_paypal_argsFilterhaken zum Beispiel an 'item_name_1' Taste, um die Artikelnamen nach Belieben durch die Bestellnummer zu ersetzen:

add_filter('woocommerce_paypal_args', 'custom_paypal_args', 10, 2 );
function custom_paypal_args ( $args, $order ) {
    $$args_keys = array_keys($args);
    $i = 0;
    // Iterating through order items
    foreach( $order->get_items() as $item_id => $item_product ){
        $i++; // updating count.
        if( ! empty($args["item_name_$i"]) ){
            // Returning the order invoice in the item name
            $args["item_name_$i"] = "invoice #" . $order->get_id();
        }
    }
    return $args;
}

Code geht in die function.php-Datei Ihres aktiven Child-Themes (oder Themes) oder auch in jede Plugin-Datei.

Der Code ist getestet und funktioniert auf WooCommerce 3+

Beenden: Wenn Sie das WC_Order-Objekt als Argument in Ihrer Hook-Funktion erhalten, können Sie damit beliebige Daten aus der Bestellung abrufen und die an das Paypal-Gateway gesendeten Daten nach Belieben bearbeiten.

Siehe diese verwandte Antwort: So erhalten Sie WooCommerce-Bestelldetails

  • Danke Lieber Loic, Über die Manipulation der $args, wird es benötigt, um alle anderen Elemente in der Karte nach dem ersten Element zu entfernen. Stellen Sie außerdem den Preis des ersten Artikels gleich dem Gesamtpreis des Einkaufswagens ein (da es nur einen einzigen Artikel gibt). Das ist also die bearbeitete benutzerdefinierte Funktion. Sie könnten das in Ihrer Antwort hinzufügen: Benutzerdefinierte Funktion zum Ändern $args

    – DummyAnfänger

    18. September 2017 um 19:39 Uhr


  • 1. Wo hast du den obigen Code ausgeführt (in Testabschnitt), die Ihnen das Array gegeben hat? In welcher Datei in WordPress/Woocommerce könnte ich den Code platzieren, um post_meta abzurufen und das von Ihnen gezeigte Array zu drucken? 2. Wenn nicht woocommerce_paypal_args Filterhaken, Wie könnten wir das überschreiben get_request_url() in unserem geschriebenen Plugin oder der function.php des Themes? Meine Frage ist allgemein zum Überschreiben einer Funktion eines beliebigen Plugins in unserem benutzerdefinierten Plugin oder der function.php des Themas

    – DummyAnfänger

    18. September 2017 um 19:58 Uhr


  • Danke, über die Antwort 2 : Ich wollte wissen, wie man eine Funktion in einem Plugin (z. B. woocommerce) überschreibt, wenn kein Hook verfügbar ist. Wie könnten wir die Funktion überschreiben und ihre Funktionalität ändern, ohne den Kern des Plugins zu ändern, der nach einem Plugin-Update verloren geht? … Über die Antwort 3 : Wenn ich mehr als einen Artikel im Warenkorb habe, gibt es auch welche Artikelname_2, Artikelname_3, Artikelname_4 … . Woocommerce-Version: 3.1.2

    – DummyAnfänger

    18. September 2017 um 20:24 Uhr


  • Ich habe die Antwort zu (Punkt 1) aktualisiert … 2. Es gibt immer einen Haken oder einen Trick, um alles außer Kraft zu setzen. Bei Plugins von Drittanbietern, die geschlossen sind, ist das eine andere Sache. Darüber hinaus können Sie den Unterricht verlängern … 3. Die Namen werden in derselben Zeichenfolge hinzugefügt, und die Beträge werden summiert und der Index ist immer 1 … Es werden nicht alle Artikel gesendet, sondern zusammengeführte Artikeldaten. Sie werden sehen … testen Sie es.

    – LoicTheAztec

    18. September 2017 um 20:38 Uhr


  • Danke. Über das Element mit Index 1 das beinhaltet den Gesamtpreis der Bestellung, bei mir ist das nicht der Fall. Ich habe das mit einer Bestellung mit 4 Artikeln getestet und die Argumente in post_meta gespeichert (das Verfahren, das Sie zum Testen in Ihrer Antwort angegeben haben); Dies ist die Ausgabe mit vier Elementen, die bis zu Index haben 4: paste.ubuntu.com/25568072 und jeder Artikel hat seinen besonderen Preis. … Eine andere Sache ist, dass es in der neuesten Version von Woocommerce eine gibt - Service Schlüsselwort am Ende meines Produkts hinzugefügt. Was ist los?

    – DummyAnfänger

    18. September 2017 um 21:16 Uhr


Ich verwende die unten stehende Funktion, um die Bestell-ID zu erhalten. Sie können die unten stehende Funktion für Ihre Bedürfnisse bearbeiten und verwenden.

public function process_payment( $order_id ) {
    global $woocommerce;
    $order = new WC_Order( $order_id );
    return array(
        'result'  => 'success',
        'redirect' => $order->get_checkout_payment_url( true )
    );

  • Diese Antwort ist völlig nutzlos: Das Problem ist nicht, wie man die Bestell-ID erhält, sondern wie man die Bestell-ID anstelle von Artikeln an PayPal weitergibt.

    – Mauro Mascia

    28. Juni 2018 um 15:49 Uhr

923940cookie-checkSenden nur der Bestellnummer anstelle der Artikelnamen an PayPal in Woocommerce

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

Privacy policy