2016-08-05 89 views
0

因此,我爲我工作的公司設置了一個商店。人們付錢,但沒有發貨給他們,因爲我會批量訂購這些物品,並將它們發送給公司,然後他們會來看我(在工作中)挑選他們的物品。Woocommerce中的PhP更改訂單狀態按鈕

因此,當我們想要做的事情是當他們拿起手機放入手機時,他們有一臺平板電腦#來搜索他們的訂單,然後標記完成。我發現了一個插件(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

我相信你需要將表單「action」參數與你實際嘗試做的事情分開。表單操作更像是您正在處理的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,但如果只是點擊這個按鈕,除了作爲一種學習體驗之外,它可能是不值得的。 – helgatheviking