wordpress 创建一个Woocommerce我的帐户订单页面,仅显示已完成的订单

brtdzjyr  于 12个月前  发布在  WordPress
关注(0)|答案(1)|浏览(257)

我删除了以前的问题,因为它是对我的一部分措辞不好.我试图创建一个Woocommerce我的帐户订单页面,只显示完成的订单.我已经尝试了以下代码,但所有的订单仍然显示,无论状态.

function woocommerce_orders() {
    $user_id = get_current_user_id();
    if ($user_id == 0) {
        return 
do_shortcode('[woocommerce_my_account]');
    } else {
        $orders = wc_get_orders(array(
            'customer' => $user_id,
            'status'   => 'completed', // You can 
modify the order status as needed
        ));
        $order_count = count($orders);
        ob_start();
        wc_get_template('myaccount/my-orders.php', 
array(
            'current_user' => get_user_by('id', 
$user_id),
            'order_count' => $order_count
        ));
        return ob_get_clean();
    }
}
add_shortcode('woocommerce_orders', 'woocommerce_orders');

字符串

js81xvg6

js81xvg61#

自WooCommerce 3以来,模板myaccount/my-orders.php已被弃用,不再使用并被myaccount/orders.php取代。
这些模板之间的区别在于,旧的模板使用硬编码在模板本身中的WP_Query,而最新的模板使用WC_Query (与WooCommerce HPOS兼容)
当你在简码中使用myaccount/my-orders.php模板 (不推荐使用的模板) 时,你需要一些不同的东西来定位客户完成的订单:

add_shortcode('woocommerce_orders', 'shortcode_my_account_orders');
function shortcode_my_account_orders() {
    global $current_user;

    if ($current_user->ID > 0) {
        ob_start(); // Start buffering

        add_filter('woocommerce_my_account_my_orders_query', 'custom_my_account_my_orders_query', 10);

        wc_get_template('myaccount/my-orders.php', array(
            'current_user' => $current_user,
        ) );

        remove_filter('woocommerce_my_account_my_orders_query', 'custom_my_account_my_orders_query', 10);

        return ob_get_clean();
    } else {
        return do_shortcode('[woocommerce_my_account]');
    }
}

// Filter WP_Query for deprecated my-orders.php template
function custom_my_account_my_orders_query( $query_args ) {
    // Only completed orders
    $query_args['post_status'] =['wc-completed'];
    
    return $query_args;
}

字符串
代码放在你的子主题的functions.php文件中(或插件中)。测试和工作。

相关问题