2016-08-05 6 views
0

Also habe ich einen Laden für die Firma eingerichtet, für die ich arbeite. Die Leute zahlen, aber es wird nicht an sie verschickt, weil ich die Artikel in großen Mengen bestellen und sie an die Firma schicken lassen werde. Dann werden sie mich (bei der Arbeit) besuchen, um ihre Artikel abzuholen.PhP Change Order Status Knopf in Woocommerce

Also was ich will es tun, haben ein Tablet, wenn sie kommen, um sie abzuholen, wo sie in ihr Handy # für ihre Bestellung zu suchen und dann markieren Sie es vollständig. Ich habe ein Plugin gefunden, das das meiste davon tut (Woocommerce Order Search), also versuche ich jetzt, eine Schaltfläche einzurichten, auf die sie einfach klicken können, um ihren Bestellstatus zu ändern.

Ich löschte die "Lieferadresse" und legte die Taste, aber mit diesem Code macht es die Bestellung vollständig verschwinden, nicht als vollständig markieren.

<td> 
    <form action="<?php add_action('woocommerce_order_status_completed') ?>" method="get"> 
<input type="hidden" value="http://www.store.bandwidthcorp.com/?page_id=13400"> 
<input type="submit" value="I Got It!"> 
</form></td> 

Dann habe ich versucht, so etwas wie dieses:

<td> 
<form action="<?php function order_complete {$order = new WC_Order($order_id);          $order->update_status('completed'); } 
add_action('order-complete') ?>" method="get"> 
<input type="hidden" value="http://www.store.bandwidthcorp.com/?page_id=13400"> 
<input type="submit" value="I Got It!"> 
</form></td> 

Aber das überhaupt nichts zu tun hat. Es scheint, als ob das ziemlich einfach sein sollte, aber ich kann es nicht herausfinden. Danke im Voraus!

+0

Ich glaube, dass Sie den Formular "action" -Parameter von dem trennen müssen, was Sie tatsächlich versuchen. Die Formularaktion entspricht eher der URL, in der Sie die Verarbeitung durchführen, und nicht der tatsächlichen Verarbeitung. – helgatheviking

Antwort

1

Wie ich in meinem Kommentar erwähnt habe, denke ich, wir wollen die Dinge trennen. Zuerst entfernen wir die Aktion aus dem Formular. Dies wird die aktuelle Seite verursacht auf Formular-Vorlage nachladen

<form method="post"> 
<input type="hidden" name="mark_as_received" value="true"> 
<input type="hidden" name="order_id" value="<?php echo esc_attr($order_id);?>"> 
<?php wp_nonce_field('so_38792085_nonce_action', '_so_38792085_nonce_field'); ?> 
<input type="submit" value="I Got It!"> 
</form> 

Dann werden wir auf einem frühen Wordpress-Aktion Haken für die gebuchten Formulareingaben hören.

add_action('wp_loaded', 'so_38792085_form_handler'); 
function so_38792085_form_handler(){ 

    // not a "mark as received" form submission 
    if (! isset($_POST['mark_as_received'])){ 
     return; 
    } 

    // basic security check 
    if (! isset($_POST['_so_38792085_nonce_field']) || ! wp_verify_nonce($_POST['_so_38792085_nonce_field'], 'so_38792085_nonce_action')) { 
     return; 
    } 

    // make sure order id is submitted 
    if (! isset($_POST['order_id'])){ 
     $order_id = intval($_POST['order_id']); 
     $order = wc_get_order($order_id); 
     $order->update_status("completed"); 
     return; 
    } 
} 

Sie möchten mehr Sicherheitskontrollen hinzufügen (wie Benutzerberechtigungen), Fehlermeldungen, und ich würde dies wahrscheinlich über AJAX, aber, die eine grundlegende Start ist schlagen tun.

+0

das funktioniert aus irgendeinem Grund nicht .. Wie würde ich das mit AJAX tun? Ich habe es noch nie zuvor benutzt. – jkranz

+0

Noch einmal schauen '$ order_id' ist nicht definiert. Ich würde vorschlagen, immer ['WP_DEBUG'] (https://codex.wordpress.org/Debugging_in_WordPress#WP_DEBUG) und' WP_DEBUG_LOG'-Protokoll bei der Entwicklung aktiviert zu haben. Du hättest eine Warnung bekommen. Ich werde die Antwort aktualisieren. – helgatheviking

+0

AJAX ist asynchrones JavaScript und ermöglicht es Ihnen, den Bestellstatus zu ändern, ohne die gesamte Seite neu zu laden. Es gibt viele Tutorials im Internet, um mit Ajax mit WordPress zu beginnen, aber wenn Sie nur auf diesen Knopf klicken, ist es vielleicht nicht wert, außer als Lernerfahrung. – helgatheviking