1

We using Dokan multivendor and want to hide orders from vendor order overview dashboard with specific order status. Below is the whole code from Dokan to display orders to vendors in the order overivew.

I'm able to filter the orders for one specific order status. In the example below we hide "filed" orders. This is working. But we want to hide also other order status there.

Already working:

<?php
    foreach ($user_orders as $order) {
    if ($order->status !== "failed") {
  ?>

We want to hide also the following order by status:

  • pendning payment
  • on-hold
  • cancelled
  • failed
  • redirected
  • waiting
  • manual decision
  • draft

For that, we use a || and try to filter for each order status. But this does not work. Nothing happens. is there a syntax error in my code?

Not working:

foreach ($user_orders as $order) {
if ($order->status !== "failed" || $order->status !=="pending" || $order->status !=="cancelled") {
?>

Full code of dokan order listing:

            <tbody>
                <?php
                foreach ($user_orders as $order) {
                if ($order->status !== "failed") {
                    ?>
                    <tr >
                        <td class="dokan-order-select">
                            <label for="cb-select-<?php echo esc_attr( $order->get_id() ); ?>"></label>
                            <input class="cb-select-items dokan-checkbox" type="checkbox" name="bulk_orders[]" value="<?php echo esc_attr( $order->get_id() ); ?>">
                        </td>
                            <?php if ( current_user_can( 'dokan_manage_order' ) ): ?>
                            <td class="dokan-order-action" width="17%" data-title="<?php esc_attr_e( 'Action', 'dokan-lite' ); ?>" >
                                <?php
                                do_action( 'woocommerce_admin_order_actions_start', $order );

                                $actions = array();

                                if ( dokan_get_option( 'order_status_change', 'dokan_selling', 'on' ) == 'on' ) {
                                    if ( in_array( dokan_get_prop( $order, 'status' ), array( 'pending', 'on-hold' ) ) ) {
                                        $actions['processing'] = array(
                                            'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=dokan-mark-order-processing&order_id=' . dokan_get_prop( $order, 'id' ) ), 'dokan-mark-order-processing' ),
                                            'name' => __( 'Processing', 'dokan-lite' ),
                                            'action' => "processing",
                                            'icon' => '<i class="fa fa-clock-o">&nbsp;</i>'
                                        );
                                    }

                                    if ( in_array( dokan_get_prop( $order, 'status' ), array( 'pending', 'on-hold', 'processing' ) ) ) {
                                        $actions['complete'] = array(
                                            'url' => wp_nonce_url( admin_url( 'admin-ajax.php?action=dokan-mark-order-complete&order_id=' . dokan_get_prop( $order, 'id' ) ), 'dokan-mark-order-complete' ),
                                            'name' => __( 'Complete', 'dokan-lite' ),
                                            'action' => "complete",
                                            'icon' => '<i class="fa fa-check">&nbsp;</i>'
                                        );
                                    }

                                }

                                $actions['view'] = array(
                                    'url' => wp_nonce_url( add_query_arg( array( 'order_id' => dokan_get_prop( $order, 'id' ) ), dokan_get_navigation_url( 'orders' ) ), 'dokan_view_order' ),
                                    'name' => __( 'View', 'dokan-lite' ),
                                    'action' => "view",
                                    'icon' => '<i class="fa fa-eye">&nbsp;</i>'
                                );

                                $actions = apply_filters( 'woocommerce_admin_order_actions', $actions, $order );

                                foreach ($actions as $action) {
                                    $icon = ( isset( $action['icon'] ) ) ? $action['icon'] : '';
                                    printf( '<a class="dokan-btn dokan-btn-default dokan-btn-sm tips" href="%s" data-toggle="tooltip" data-placement="top" title="%s">%s</a> ', esc_url( $action['url'] ), esc_attr( $action['name'] ), $icon );
                                }

                                do_action( 'woocommerce_admin_order_actions_end', $order );
                                ?>
                            </td>
                        <td class="dokan-order-id" data-title="<?php esc_attr_e( 'Order', 'dokan-lite' ); ?>" >
                            <?php if ( current_user_can( 'dokan_view_order' ) ): ?>
                                <?php echo '<a href="' . esc_url( wp_nonce_url( add_query_arg( array( 'order_id' => dokan_get_prop( $order, 'id' ) ), dokan_get_navigation_url( 'orders' ) ), 'dokan_view_order' ) ) . '"><strong>' . sprintf( __( 'Order %s', 'dokan-lite' ), esc_attr( $order->get_order_number() ) ) . '</strong></a>'; ?>
                            <?php else: ?>
                                <?php echo '<strong>' . sprintf( __( 'Order %s', 'dokan-lite' ), esc_attr( $order->get_order_number() ) ) . '</strong>'; ?>
                            <?php endif ?>
                        </td>
                            <td class="dokan-order-status" data-title="<?php esc_attr_e( 'Status', 'dokan-lite' ); ?>" >
                            <?php echo '<span class="dokan-label dokan-label-' . dokan_get_order_status_class( dokan_get_prop( $order, 'status' ) ) . '">' . dokan_get_order_status_translated( dokan_get_prop( $order, 'status' ) ) . '</span>'; ?>
                        </td>
                            <td class="dokan-order-date" data-title="<?php esc_attr_e( 'Date', 'dokan-lite' ); ?>" >
                            <?php
                            if ( '0000-00-00 00:00:00' == dokan_get_date_created( $order ) ) {
                                $t_time = $h_time = __( 'Unpublished', 'dokan-lite' );
                            } else {
                                $t_time    = get_the_time( 'Y/m/d g:i:s A', dokan_get_prop( $order, 'id' ) );
                                $gmt_time  = strtotime( dokan_get_date_created( $order ) . ' UTC' );
                                $time_diff = current_time( 'timestamp', 1 ) - $gmt_time;

                                if ( $time_diff > 0 && $time_diff < 24 * 60 * 60 ) {
                                    $h_time = sprintf( __( '%s ago', 'dokan-lite' ), human_time_diff( $gmt_time, current_time( 'timestamp', 1 ) ) );
                                } else {
                                    $h_time = get_the_time( 'Y/m/d', dokan_get_prop( $order, 'id' ) );
                                }
                            }

                            echo '<abbr title="' . esc_attr( dokan_date_time_format( $t_time ) ) . '">' . esc_html( apply_filters( 'post_date_column_time', dokan_date_time_format( $h_time, true ) , dokan_get_prop( $order, 'id' ) ) ) . '</abbr>';
                            ?>
                        </td>
                        <td class="dokan-order-total" data-title="<?php esc_attr_e( 'Order Total', 'dokan-lite' ); ?>" >
                            <?php echo $order->get_formatted_order_total(); ?>
                        </td>
                        <td class="dokan-order-earning" data-title="<?php esc_attr_e( 'Earning', 'dokan-lite' ); ?>" >
                            <?php echo wp_kses_post( wc_price( dokan()->commission->get_earning_by_order( $order ) ) ); ?>
                        </td>


                       
                        <?php endif ?>

                </tr>
                
                <?php } } ?> 
                
            </tbody>
Nik7
  • 346
  • 2
  • 16

1 Answers1

1

You can just use in_array & dokan_get_prop( $order, 'status' )

foreach ( $user_orders as $order ) {
    // DEBUG INFO, remove afterwards
    $status = dokan_get_prop( $order, 'status' ); 
    echo 'Order status = ' . $status;

    // NOT in array
    if ( ! in_array( dokan_get_prop( $order, 'status' ), array( 'pending', 'on-hold', 'etc..' ) ) ) {
        // Continue
7uc1f3r
  • 28,449
  • 17
  • 32
  • 50
  • Hello, Thanks! It works almost 100%. But I have problems with the following order status. They are still displayed in dokan vendor order overview. (redirected, waiting, manual decision, draft) But, what kind of status are those? there as no infos about those in WC documentation: https://docs.woocommerce.com/document/managing-orders/ foreach ( $user_orders as $order ) { // NOT in array if ( ! in_array( dokan_get_prop( $order, 'status' ), array( 'pending', 'on-hold', 'waiting', 'failed', 'cancelled', 'redirected', 'draft', 'manual' ) ) ) { // Continue – Nik7 Jan 05 '21 at 12:40
  • **_But, what kind of status are those?_** there are the default statuses that are already present in WooCommerce, but additional plugins can add new statuses and the naming can be anything... therefore it is best to debug before proceeding, otherwise it is just 'guessing' without concrete information – 7uc1f3r Jan 05 '21 at 13:01
  • Thanks! Can you maybe give me a short hint how to debug this? Where can I see the internal names from the order status? – Nik7 Jan 05 '21 at 13:12