Как автоматически обновить статус заказа для определенного идентификатора заказа в WooCommerce - PullRequest
2 голосов
/ 24 октября 2019

Я возьму пример, чтобы объяснить мою проблему.

На основе идентификатора заказа я сохраняю значение в базе данных, имеющей пользовательскую таблицу с именем столбца 'doc_verify'.

Итактри условия:

1) Если doc_verify == 2, то Статус заказа будет установлен как «проверка документов».

2) Если doc_verify == 1, тогда Статус заказа будет установлен как «ожидающий»'.

3) Если doc_verify == 0, то Статус заказа будет установлен как' doc-not-Verified '.

Теперь, когда doc_verify == 2, тогда Статус заказа автоматически изменяется с' on-придерживаться до «проверки документов». Эта часть работает нормально.

Следующее, что я хочу, это:

Когда я изменяю значение doc_verify на 0 ИЛИ 1 в wp-admin / post.php? Post = {OrderID} & action = редактировать вручную через custom_meta_box с кнопками Подтвердить и Не Подтвердить. Затем в то же время он также должен автоматически изменить статус заказа.

Итак, если я нажму кнопку Подтвердить , тогда статус заказа автоматически изменится с ' проверка документов 'до' в ожидании '.

И если я нажму кнопку Не проверять , тогда статус заказа автоматически изменится с' проверка документов 'to' doc-not-Verified '.

В настоящее время происходит следующее:

Когда я выполняю любую из функций, упомянутых выше. Затем я должен вернуться к wp-admin / edit.php? Post_type = shop_order , а затем мне нужно обновить страницу еще раз, чтобы получить желаемый статус заказа.

Ниже приведен кодЯ использую в настоящее время:

//Functionality to show custom data in Order Edit Page

add_action( 'add_meta_boxes', 'wphero_uploaded_documents_for_product' );
function wphero_uploaded_documents_for_product() {
    add_meta_box(
        'woocommerce-order-document-list',
        __( 'Document Verification' ),
        'wphero_uploaded_documents_for_product_content',
        'shop_order',
        'normal',
        'default'
    );
}


function wphero_uploaded_documents_for_product_content( $post ){
    global $wpdb;
    $table_name = $wpdb->prefix . 'users_document';
    $order    = wc_get_order( $post->ID );
    ?>
    <table cellpadding="0" cellspacing="0" class="woocommerce_order_documents_list" width="100%">
        <thead>
            <tr>
                <th class="item_name" width="15%" >Item</th>
                <th class="item_documents sortable" width="55%" >Documents</th>
                <th class="item_documents sortable" width="15%" >Status</th>
                <th class="item_action sortable" width="15%" >Action</th>
            </tr>
        </thead>
        <tbody id="order_line_items">
    <?php
        foreach ($order->get_items() as $item_key => $item ){
        $product = wc_get_product( $item['product_id'] );
        $product_id   = $item->get_product_id(); // the Product id
        $doc_details = $wpdb->get_results("SELECT document_name, document_path FROM $table_name WHERE product_id = $product_id  AND order_id = $post->ID ");
        $doc_name = explode(",",$doc_details[0]->document_name);
        $doc_path = explode(",",$doc_details[0]->document_path);
        ?>
        <tr class="item " data-order_item_id="<?php echo $product_id; ?>">
            <td class="product_name"  ><?php echo $product->get_name(); ?></td>
            <td class="product_documents"  >
                <table cellpadding="0" cellspacing="0" class="product_doc_details" width="100%">
                  <thead>
                    <tr>
                   <?php foreach($doc_name as $name){ ?>
                    <th class="product_doc_name"><?php echo $name; ?></th>
                    <?php } ?>
                      </tr>
                    <thead>
                    <tbody style="text-align: center;">
                    <?php foreach($doc_path as $path){ ?>
                    <td class="product_doc_url">
                       <a href="<?php echo $path; ?>" target="_blank">
                        <img src="<?php echo site_url(); ?>/wp-content/uploads/2019/10/pdf.png">
                        </a>
                    </td>
                    <?php } ?>
                    </tbody>
                </table>
            </td>
            <td class="product_status"  >
            <?php $status = $wpdb->get_results("SELECT doc_verify FROM $table_name WHERE product_id = $product_id  AND order_id = $post->ID "); 
                if($status[0]->doc_verify == 2){
                    echo "<p style='color:blue;'><strong>Under Verification</strong></p>";
                }else if($status[0]->doc_verify == 1){
                    echo "<p style='color:green;'><strong>Verified</strong></p>";
                }else{
                    echo "<p style='color:red;'><strong>Not Verified</strong></p>";
                }
            ?>
            </td>
            <td class="product_action">
            <?php
            $post_id = isset($_GET['post']) ? $_GET['post'] : false;
            if(! $post_id ) return; // Exit
            ?>
            <p><a href="?post=<?php echo $post_id; ?>&action=edit&verify=<?php echo $product_id; ?>" class="button"><?php _e('Verify'); ?></a></p>
            <p><a href="?post=<?php echo $post_id; ?>&action=edit&notverify=<?php echo $product_id; ?>" class="button"><?php _e('Not Verify'); ?></a></p>
            <?php
                if ( isset( $_GET['notverify'] ) && ! empty( $_GET['notverify'] ) ) {
                $wpdb->update($table_name, array('doc_verify'=>0), array('product_id'=>$_GET['notverify'], 'order_id'=>$post_id));
                } 
                if ( isset( $_GET['verify'] ) && ! empty( $_GET['verify'] ) ) {
                $wpdb->update($table_name, array('doc_verify'=>1), array('product_id'=>$_GET['verify'], 'order_id'=>$post_id));
                }
            ?>
           </td>
        </tr>
<?php   } ?>

        </tbody>
    </table>
<?php
}

1 Ответ

0 голосов
/ 25 октября 2019

Обновите свой код с этого:

<?php
                if ( isset( $_GET['notverify'] ) && ! empty( $_GET['notverify'] ) ) {
                    $wpdb->update($table_name, array('doc_verify'=>0), array('product_id'=>$_GET['notverify'], 'order_id'=>$post_id));
                } 
                if ( isset( $_GET['verify'] ) && ! empty( $_GET['verify'] ) ) {
                    $wpdb->update($table_name, array('doc_verify'=>1), array('product_id'=>$_GET['verify'], 'order_id'=>$post_id));
                }
            ?>

до этого:

<?php
                if ( isset( $_GET['notverify'] ) && ! empty( $_GET['notverify'] ) ) {
                    $wpdb->update($table_name, array('doc_verify'=>0), array('product_id'=>$_GET['notverify'], 'order_id'=>$post_id));
                    $order->update_status('doc-not-verified');
                } 
                if ( isset( $_GET['verify'] ) && ! empty( $_GET['verify'] ) ) {
                    $wpdb->update($table_name, array('doc_verify'=>1), array('product_id'=>$_GET['verify'], 'order_id'=>$post_id));
                    $order->update_status('pending');
                }
            ?>
...