Add columns to admin orders list in WooCommerce

  • Open
  • gagandeep
    Participant
    April 9, 2020 at 7:20 am #5562
    gagandeep

    Hi,

    am using the WooCommerce plugin for one of my eCommerce WordPress websites. I want to add some columns to my order listing page in the WooCommerce admin area. I am not able to find out where to add that.

    Can anyone advise which template page I need to amend in order to meet my requirements?

    Thanks

  1. Manik Malhotra
    Keymaster
    Posts: 64
    April 9, 2020 at 7:34 am #5564
    Manik Malhotra

    Hi Gagandeep,

    So you if you want to add some columns in the orders Admin list page (in backend):

    ADDING COLUMNS IN WOOCOMMERCE ADMIN ORDERS LIST

    In the example below, we add 2 new custom columns, before existing “Total” and “Actions” columns.

    // ADDING 2 NEW COLUMNS WITH THEIR TITLES (keeping "Total" and "Actions" columns at the end)
    add_filter( 'manage_edit-shop_order_columns', 'custom_shop_order_column', 20 );
    function custom_shop_order_column($columns)
    {
    $reordered_columns = array();
    
    // Inserting columns to a specific location
    foreach( $columns as $key => $column){
    $reordered_columns[$key] = $column;
    if( $key == 'order_status' ){
    // Inserting after "Status" column
    $reordered_columns['my-column1'] = __( 'Title1','theme_domain');
    $reordered_columns['my-column2'] = __( 'Title2','theme_domain');
    }
    }
    return $reordered_columns;
    }
    
    // Adding custom fields meta data for each new column (example)
    add_action( 'manage_shop_order_posts_custom_column' , 'custom_orders_list_column_content', 20, 2 );
    function custom_orders_list_column_content( $column, $post_id )
    {
    switch ( $column )
    {
    case 'my-column1' :
    // Get custom post meta data
    $my_var_one = get_post_meta( $post_id, '_the_meta_key1', true );
    if(!empty($my_var_one))
    echo $my_var_one;
    
    // Testing (to be removed) - Empty value case
    else
    echo '<small>(<em>no value</em>)</small>';
    
    break;
    
    case 'my-column2' :
    // Get custom post meta data
    $my_var_two = get_post_meta( $post_id, '_the_meta_key2', true );
    if(!empty($my_var_two))
    echo $my_var_two;
    
    // Testing (to be removed) - Empty value case
    else
    echo '<small>(<em>no value</em>)</small>';
    
    break;
    }
    }

    Code goes in function.php file of your active theme. Tested and works.