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:
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"> </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"> </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"> </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>
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