user1452062
user1452062

Reputation: 805

How to add custom fields for WooCommerce order page (admin)?

I would like to add few input fields for the orders in WooCommerce/Wordpress. The fields will be only visible on the admin page. How to do that? Is it same like the pages/posts?

For the post types above I used add_post_meta. Is it the best way for that, or is there any hook for order fields?

Upvotes: 1

Views: 9882

Answers (2)

s3cur3
s3cur3

Reputation: 3025

Because you're asking specifically about WooCommerce, I'd like to expand on brasofilo's accepted answer by showing how you'd get the relevant WooCommerce order object (WC_Order) for the page the meta box is on.

Here's how you'd display the billing email from the order:

add_action('add_meta_boxes', function() {
    add_meta_box('woocommerce-order-meta-24179529',
        __( 'My Meta Box Title' ),
        function() {
            global $post;
            // wc_get_order() returns one of bool|WC_Order|WC_Order_Refund
            $order = wc_get_order($post->ID);
            if($order instanceof WC_Order) {
                echo "Billing email: ";
                echo $order->get_billing_email();
            }
        },
        'shop_order',
        'side',
        'default'
    );
});

Upvotes: 0

brasofilo
brasofilo

Reputation: 26055

Yes, just add_meta_box() to the post type shop_order and proceed as normal.

add_action( 'add_meta_boxes', 'add_meta_boxes' );

function add_meta_boxes()
{
    add_meta_box( 
        'woocommerce-order-my-custom', 
        __( 'Order Custom' ), 
        'order_my_custom', 
        'shop_order', 
        'side', 
        'default' 
    );
}
function order_my_custom()
{
    echo '<h1>Sample meta box</h1>';
}

Upvotes: 11

Related Questions