• I’ve got to update a theme that someone else coded around the time WC 2.1 came out. The impetus for this was a custom function attached to wp_head that is designed to look at the orders submitted and completed to make sure there is sufficient stock to fill the order.

    The line that was triggering a fatal error was as follows:

        $query_args = array(
            'post_status' => 'publish', // <-- this
            'post_type' => 'shop_order',
            'posts_per_page' => -1
        );
    

    Per the instructions published here, I updated the offending line to the following:

    
        $query_args = array(
            'post_status' => array( 'wc-processing', 'wc-completed' ), // <-- updated
            'post_type' => 'shop_order',
            'posts_per_page' => -1
        );
    

    That was enough to fix the issue and get the site up and running for the time being.

    That said, I decided it’s probably time to do a tune-up on the broader theme to make sure the templates were being brought up-to-date and so forth so that another deprecated item doesn’t knock it offline.

    Currently, putting an item in the cart and going to the checkout page ends up with a fatal error in wp_head. Going through things narrows the issue down to that one line again (post-fix!). Commenting it out allows the function to complete and the page loads normally. Leaving it in throws a fatal error and produces a white page.

    While I can’t link to the site for privacy reasons, here is the full code for the function causing the issue:

    
    function bcm_stock_check() {
        $max_orders = (get_option('bcm_max_orders')) ? get_option('bcm_max_orders') : 25;
    
        $args = array(
            'post_status' => array( 'wc-processing', 'wc-completed' ),
            'post_type' => 'shop_order',
            'posts_per_page' => -1
        );
    
        $orders = new WP_Query($args);
    
        $num_orders = 0;
    
        if ($orders->have_posts()):
            while ($orders->have_posts()):$orders->the_post();
                $order_id = get_the_ID();
    
                if ($order_id):
                    $order = new WC_Order($order_id);
    
                    if ($order->status == 'processing'):
                        $num_orders++;
                    endif;
                endif;
            endwhile;
        endif;
    
        if ($num_orders >= $max_orders):
            update_post_meta(21, '_stock_status', 'outofstock'); // outofstock
        endif;
    }
    
    add_action('wp_head', 'bcm_stock_check');
    

    Is there something I’m missing about the order status that’s causing the error?

  • The topic ‘Issue with shop_order post status’ is closed to new replies.