2016-08-05 16 views
0

私は働いている会社のために店を設定しました。人々は支払いをしますが、商品を一括注文して会社に送ってから、自分の商品を選ぶために(職場に)来てくれます。WoocommerceのPhP Change Order Statusボタン

私がしたいことは、注文を検索して完全なものをマークするために携帯電話に入れた場所で、タブレットを持ってくるときです。私はそのプラグインの大部分(Woocommerce Order Search)を見つけましたので、完了するために注文ステータスを変更するためにクリックするだけのボタンを設定しようとしています。

"配送先住所"を削除してボタンに入れましたが、このコードでは注文が完全に消えてしまいます。

<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> 

は、それから私はこのような何か試してみました:

<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> 

をしかし、それは全く何もしませんでした。これはかなりシンプルであるはずですが、私はそれを理解できないようです。前もって感謝します!

+0

私はあなたが実際にやろうとしているものからフォームの "アクション"パラメータを分離する必要があると思います。フォームアクションは、実際の処理ではなく、処理を行っているURLによく似ています。 – helgatheviking

答えて

1

私のコメントで言及したように、私は物を分けたいと思う。まず、フォームからアクションを削除します。これにより、フォーム提出時に現在のページが再読み込みされます

<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> 

投稿されたフォーム入力のWordPressアクションフックをリッスンします。

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; 
    } 
} 
あなたは、エラーメッセージ(ユーザー権限のように)より多くのセキュリティチェックを追加することも

、と私はおそらくAJAX経由でこれを行うことをお勧めしたい、が、基本的なスタートをです

+0

これは何らかの理由で動作していません。AJAXでこれをどうすればできますか?私はかつてこれを使ったことがない。 – jkranz

+0

再度 '$ order_id'が定義されていません。私は開発中に常に['WP_DEBUG'](https://codex.wordpress.org/Debugging_in_WordPress#WP_DEBUG)と' WP_DEBUG_LOG'ログをオンにすることをお勧めします。あなたはこれについて警告を受けていたでしょう。私は答えを更新します。 – helgatheviking

+0

AJAXは非同期のjavascriptで、ページ全体を再読み込みせずに注文ステータスを変更することができます。 WordPressでajaxを使い始めるには、Web上にたくさんのチュートリアルがありますが、このボタンをクリックするだけであれば、学習経験以外では価値がないかもしれません。 – helgatheviking