2017-09-30 2 views
2

Ich benutze die following code, um dies zu lösen, aber dies funktioniert nicht für Bestellungen von Gastkunden. Dies funktioniert jedoch für die Bestellungen, die einem registrierten Benutzer/Kunden gehören, aber nicht für Bestellungen von Gastkunden.Aufträge von Gastkunden bestimmten Benutzern zuweisen

Lösung Kredit LoicTheAztec für answer

function cristmas_bulk_editing_orders(){ 

    if(!is_admin()) return; // Will work only from Admin Backed. 
    else { 

     $order_id = 9458; 
     $new_customer_id = 479; 

      // Getting the postmeta customer ID for 'order' post-type 
      $customer_id = get_post_meta($order_id, '_customer_user', true); 
      var_dump($customer_id); 
      // If it's an existing order and doesn't have already this user ID 
      // It update the customer ID 
      if(!empty($customer_id) && $new_customer_id != $customer_id) 
       update_post_meta($order_id, '_customer_user', $new_customer_id,0); 
       echo 'order updated'; 

    } 

} 
cristmas_bulk_editing_orders(); 

Erstausstellung

Wir importierten die Aufträge über WooCommerce um Export & Import-Plugin von WooCommerce Team ..

Aber in den Prozess etwas schief gelaufen ist .. Die meisten Bestellungen wurden keinem Kunden zugeordnet.

So, jetzt, wann immer ein neuer Kunde registriert er/sie 1 dieser Aufträge automatisch zugewiesen wird ..

So basicallly alle von ihnen sehen 1, um in ihrer jüngsten Aufträge, die zu einem anderen Gast cusotmer gehört, dann sind sie haben alle Informationen über andere Kunden. Ihre E-Mail-Adresse usw.

So eine Option ist, finde ich alle Bestellungen (mit Problemen, die kein Kunde zu ihnen passt) und ich sie zu Admin zuweisen ..aber dies auch einige Probleme haben .....

sO gibt es eine andere Möglichkeit, dass diese neuen registrierte Benutzer alte Aufträge nicht bekommen zugewiesen ..

helfen Bitte

+0

Haben diese Gastaufträge einen bestimmten Meta-Wert, der sich von Benutzerbestellungen unterscheidet? Und können Sie das Ergebnis mit der Gastauftrags-ID eingeben? 2 Ergebnisse für 2 verschiedene Gastaufträge wären gut: '$ customer_id = get_post_meta ($ order_id, '_customer_user', true); var_dump ($ customer_id); ' –

+0

@ Ali_k danke, dass du mir geholfen hast $ customer_id ist 0 bedeutet der Gastauftrag, bei dem ich mir ziemlich sicher bin .. Aber ich werde es noch einmal überprüfen und dir antworten – user7459842

Antwort

2

Vielleicht können Sie diese andere ähnliche Funktion basierend auf SQL-Abfragen versuchen, die den Trick tun sollte. Bevor Sie beginnen, erstellen Sie eine Datenbanksicherung . Ich habe Kontrollen (oder Einschränkungen) hinzufügen:

  • Amax Datum (in YYYY-MM-DD 00:00:00 Datum Zeitformat)
  • Bestellnummer Bereich

So, hier ist der Code:

function easter_bulk_editing_orders(){ 

    if(! is_admin()) return; // Will work only from Admin Backed. 
    else { 
     $processed_orders = array(); 

     // Define the replacement user ID 
     $replacement_user_id = '2500'; 

     // Define the DATE LIMIT for guest orders max date limit 
     $max_date = '2017-12-09 00:00:00'; 

     // Define an order range 
     $order_id_min = '0'; 
     $order_id_max = '100000'; 

     global $wpdb; 

     // Get all guest orders below a defined max date 
     $old_guest_orders = $wpdb->get_results(" 
      SELECT pm.*, p.post_date 
      FROM {$wpdb->prefix}postmeta AS pm 
      LEFT JOIN {$wpdb->prefix}posts AS p ON pm.post_id = p.ID 
      WHERE pm.post_id BETWEEN $order_id_min AND $order_id_max 
      AND pm.meta_key LIKE '_customer_user' 
      AND (pm.meta_value LIKE '0' OR pm.meta_value LIKE '') 
      AND p.post_date <= '$max_date' 
     "); 

     foreach($old_guest_orders as $guest_order){ 
      $meta_id = $guest_order->meta_id; 

      $wpdb->query(" 
       UPDATE {$wpdb->prefix}postmeta as pm 
       SET pm.meta_value = '$replacement_user_id' 
       WHERE pm.meta_id = '$meta_id' 
      "); 
      // Set each order ID in an array 
      $processed_orders[] = $guest_order->post_id; 
     } 
     // Testing (raw output of processed orders IDS) 
     var_dump($processed_orders); 
    } 
} 

// Run the function 
easter_bulk_editing_orders(); 

Der Code geht in die Datei function.php Ihres aktiven untergeordneten Themas (aktives Thema oder in einer beliebigen Plugin-Datei).

Sie müssen diese Funktion nur einmal verwenden und danach wieder entfernen (siehe unten).


ANWENDUNG:

Sobald dieser Code eingefügt und auf function.php Datei, anzeigen oder nachladen jede Admin-Seite von Backend in Ihrem Browser gespeichert wird. Jetzt können Sie die Funktion auf diese Weise Stellung zu nehmen und sparen:

// easter_bulk_editing_orders(); 

Überprüfen Sie, ob die Aufträge wurden geändert, wie Sie wollen, und entfernen Sie alle diesen Code.

Code ist getestet und funktioniert.

+0

funktioniert super .. vielen dank .. du hast mein leben gerettet .. vielen dank noch einmal – terminator

0

ist es Fehler in dem Import so versuchen zu importieren erneut. Haben Sie WP All Import Premium ausprobiert? Es importiert alles mit Drag & Drop-Titeln, Kategorien und Meta-Feldern. Sie können auch einen neuen Meta-Namen zuweisen, um Meta beim Importieren zu veröffentlichen. Wenn Sie mehr Hilfe benötigen, geben Sie weitere Details frei.

+0

Danke für deine Eingaben, ich habe das importiert 6 Monate zurück und ich habe nicht die alte Sicherung von Bestellungen. Es gibt also keine Möglichkeit, eine Reimportation durchzuführen. Stattdessen möchte ich eine Abfrage ausführen und die Kunden aller Gastaufträge aktualisieren. Entweder durch Zuweisen eines echten Kunden oder durch Zuweisen an den Administrator. – user7459842

+0

Sind die Metawerte verfügbar oder nicht? wenn verfügbar, kann ich helfen, sonst kann niemand helfen. –

+0

Metawerte ..? Eigentlich funktioniert der Code, den ich gepostet habe, gut für Fall 1), wenn eine Bestellung mit der ID 9458 vom Benutzer (id = 479) stammt und ich diesen anderen Benutzer zuordnen möchte - 500 .. Das funktioniert gut .. Aber für den Fall 2, wo die Bestellung gehört zu guest das ist client id ist 0 dann das doe't't work ... bedeutet dieser teil funktioniert nicht update_post_meta ($ order_id, '_customer_user', $ new_customer_id, 0); – user7459842

Verwandte Themen