Woocommerce-如何使用快捷码仅显示待决订单

Woocommerce-如何使用快捷码仅显示待决订单,woocommerce,shortcode,orders,wordpress-shortcode,woocommerce-theming,Woocommerce,Shortcode,Orders,Wordpress Shortcode,Woocommerce Theming,默认情况下,Woocommerce orders表在“我的帐户”页面上显示所有可用的订单状态,该页面不可按客户进行排序,因此我需要为每个唯一的订单状态创建单独的表。例如:“保留”以仅基于所需状态显示订单表 我尝试了此代码,但它没有输出表: /* Shortcode To Display Only On-hold Orders On A Custom Page */ add_shortcode('account_on_hold', 'get_customer_orders_on_hold');

默认情况下,Woocommerce orders表在“我的帐户”页面上显示所有可用的订单状态,该页面不可按客户进行排序,因此我需要为每个唯一的订单状态创建单独的表。例如:“保留”以仅基于所需状态显示订单表

我尝试了此代码,但它没有输出表:

/* Shortcode To Display Only On-hold Orders On A Custom Page */

add_shortcode('account_on_hold', 'get_customer_orders_on_hold');

function get_customer_orders_on_hold() {


  if( $user = wp_get_current_user() ){

    // Get 'on-hold' customer ORDERS
        $on_hold_orders = wc_get_orders( array(
            'limit' => -1,
            'customer_id' => $user->ID,
            'status' => array('on-hold'),
        ) );

    }
    return $on_hold_orders ;
} 
相关主题:


谢谢你的建议

您可以使用woocommerce表模板生成html表。您只需要在生成条件检查之前进行条件检查

电子商务表格模板 + ifOn hold==esc\U htmlwc\U获取\U订单\U状态\U名称$order->get\U状态

因此,您可以通过多种方式进行设置,例如:

添加快捷代码“账户待决”,“获取客户订单待决”; 函数获取客户订单处于搁置状态 { 如果$user=wp\u获取当前用户{ $on_hold_orders=wc_get_orders RAY “限制”=>-1, 'customer_id'=>$user->id, “状态”=>数组“挂起”, ; 如果$on_hold_订单: ?>
您可以使用woocommerce表模板生成html表。您只需在生成它之前进行条件检查

电子商务表格模板 + ifOn hold==esc\U htmlwc\U获取\U订单\U状态\U名称$order->get\U状态

因此,您可以通过多种方式进行设置,例如:

添加快捷代码“账户待决”,“获取客户订单待决”; 函数获取客户订单处于搁置状态 { 如果$user=wp\u获取当前用户{ $on_hold_orders=wc_get_orders RAY “限制”=>-1, 'customer_id'=>$user->id, “状态”=>数组“挂起”, ; 如果$on_hold_订单: ?>
Ruvee的方式很适合定制。 或者,如果您希望输出与我的帐户/订单相同,还可以使用调用模板的方法

add_shortcode('account_on_hold', 'get_customer_orders_on_hold');
function get_customer_orders_on_hold() {
    if( $user = wp_get_current_user() ){
        $customer_orders = wc_get_orders(
            array(
                'customer' => $user->ID,
                'limit' => -1,
                'page' => 1,
                'paginate' => true,
                'status' => array('on-hold'),
            )
        );
        ob_start();
        wc_get_template(
            'myaccount/orders.php',
            array(
                'current_page'    => 1,
                'customer_orders' => $customer_orders,
                'has_orders'      => 0 < $customer_orders->total,
            )
        );
        return ob_get_clean();
    }
} 
添加在myaccount上添加自定义菜单的方法

// Add custom endpoint
add_action( 'init', function () {
    add_rewrite_endpoint( 'on-hold-orders', EP_ROOT | EP_PAGES );
});

// Add custom menu
add_filter( 'woocommerce_account_menu_items', function ( $items ) {
    $new_items = array();
    foreach( $items as $key => $item ){// Loop menu items
        $new_items[$key] = $item;
        if( 'orders' == $key ) $new_items['on-hold-orders'] = __( 'On hold orders' ); 
    }
    return $new_items;
}, 20 );

// Output custom menu page template
add_action( 'woocommerce_account_on-hold-orders_endpoint', function( $current_page ) {
    $current_page = empty( $current_page ) ? 1 : absint( $current_page ); // With paginate
    $customer_orders = wc_get_orders( array(
        'customer' => get_current_user_id(),
        'page'     => $current_page,
        'paginate' => true,
        'status' => array('on-hold'),
    ));
    wc_get_template(
        'myaccount/orders.php',
        array(
            'current_page'    => absint( $current_page ),
            'customer_orders' => $customer_orders,
            'has_orders'      => 0 < $customer_orders->total,
        )
    );
} );

Ruvee的方式很适合定制。 或者,如果您希望输出与我的帐户/订单相同,还可以使用调用模板的方法

add_shortcode('account_on_hold', 'get_customer_orders_on_hold');
function get_customer_orders_on_hold() {
    if( $user = wp_get_current_user() ){
        $customer_orders = wc_get_orders(
            array(
                'customer' => $user->ID,
                'limit' => -1,
                'page' => 1,
                'paginate' => true,
                'status' => array('on-hold'),
            )
        );
        ob_start();
        wc_get_template(
            'myaccount/orders.php',
            array(
                'current_page'    => 1,
                'customer_orders' => $customer_orders,
                'has_orders'      => 0 < $customer_orders->total,
            )
        );
        return ob_get_clean();
    }
} 
添加在myaccount上添加自定义菜单的方法

// Add custom endpoint
add_action( 'init', function () {
    add_rewrite_endpoint( 'on-hold-orders', EP_ROOT | EP_PAGES );
});

// Add custom menu
add_filter( 'woocommerce_account_menu_items', function ( $items ) {
    $new_items = array();
    foreach( $items as $key => $item ){// Loop menu items
        $new_items[$key] = $item;
        if( 'orders' == $key ) $new_items['on-hold-orders'] = __( 'On hold orders' ); 
    }
    return $new_items;
}, 20 );

// Output custom menu page template
add_action( 'woocommerce_account_on-hold-orders_endpoint', function( $current_page ) {
    $current_page = empty( $current_page ) ? 1 : absint( $current_page ); // With paginate
    $customer_orders = wc_get_orders( array(
        'customer' => get_current_user_id(),
        'page'     => $current_page,
        'paginate' => true,
        'status' => array('on-hold'),
    ));
    wc_get_template(
        'myaccount/orders.php',
        array(
            'current_page'    => absint( $current_page ),
            'customer_orders' => $customer_orders,
            'has_orders'      => 0 < $customer_orders->total,
        )
    );
} );

谢谢,但是你建议的代码也不起作用!我得到的是数组输出,而不是表列内容。我在默认的woocommerce实验室中测试了它,工作正常。为了让它正常工作,我想我们需要删除return语句。我刚刚更新了答案,删除了return$on_hold_orders;我想,solutionoMizuho Ogino提供的n比我自己的解决方案更干净、更健壮。谢谢,但你建议的代码也不起作用!我得到的是数组输出,而不是表列内容。我在默认的woocommerce lab上进行了测试,效果很好。为了让它正常工作,我想我们需要删除return语句。我刚刚更新了我的答案并删除了return$on_hold_orders;我认为,瑞穗奥吉诺提供的解决方案比我自己的解决方案更干净、更健壮。谢谢!我可以将我的帐户导航菜单放在这张表旁边吗?好的。如果你只想在Myaccount页面上添加额外的菜单,你不需要使用shortcode标签。我修改了答案。我可以试试吗不得不说。你可能需要在插入函数后刷新永久链接。这是一个很好的方法,它工作起来很有魅力!再次感谢!谢谢!我可以把我的帐户导航菜单放在这张桌子旁边吗?好的。如果你只想在我的帐户页面上添加额外的菜单,你不需要使用快捷码标签。我修改了答案。试试看。我忘了说。你可以需要在插入函数后刷新永久链接。非常好的方法,它就像一个符咒!再次感谢!