问题描述
我们使用 Dokan 多供应商,并希望从具有特定订单状态的供应商订单概览仪表板中隐藏订单。以下是 Dokan 的完整代码,用于在订单概览中向供应商显示订单。
我可以针对一种特定的订单状态过滤订单。在下面的示例中,我们隐藏了“归档”订单。这是有效的。但我们还想在那里隐藏其他订单状态。
已经开始工作:
<?PHP
foreach ($user_orders as $order) {
if ($order->status !== "Failed") {
?>
我们还想按状态隐藏以下顺序:
- 待付款
- 待命
- 已取消
- 失败
- 重定向
- 等待
- 人工决定
- 草稿
为此,我们使用 ||并尝试过滤每个订单状态。但这不起作用。什么都没发生。我的代码中有语法错误吗?
不工作:
foreach ($user_orders as $order) {
if ($order->status !== "Failed" || $order->status !=="pending" || $order->status !=="cancelled") {
?>
dokan 订单列表的完整代码:
<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,'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,'dokan-mark-order-complete' ),'name' => __( 'Complete','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,dokan_get_navigation_url( 'orders' ) ),'dokan_view_order' ),'name' => __( 'View','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,'dokan_view_order' ) ) . '"><strong>' . sprintf( __( 'Order %s',esc_attr( $order->get_order_number() ) ) . '</strong></a>'; ?>
<?PHP else: ?>
<?PHP echo '<strong>' . sprintf( __( 'Order %s',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',human_time_diff( $gmt_time,current_time( 'timestamp',1 ) ) );
} else {
$h_time = get_the_time( 'Y/m/d','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 ),'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>
解决方法
你可以只使用 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