WooCommerce Order Dashboard Customization
February 12, 2025 · AI Conversations
Please devlop above in wordpress admin order dashboard woocommerce
—
### **1. Hook into WooCommerce Admin Order List**
You need to modify the **WooCommerce Orders table** and add options to show/hide columns using the **Screen Options** panel.
#### **Step 1: Add Columns to WooCommerce Order List**
Add the following code to your theme’s `functions.php` or a custom plugin:
// Add custom columns to WooCommerce Orders table
add_filter('manage_edit-shop_order_columns', function ($columns) {
$columns['dob'] = __('DOB', 'your-textdomain');
$columns['sex'] = __('Sex', 'your-textdomain');
$columns['account_id'] = __('Account/User ID', 'your-textdomain');
return $columns;
});
—
#### **Step 2: Populate Custom Columns**
Fetch and display the data in the orders table:
// Populate custom columns with data
add_action('manage_shop_order_posts_custom_column', function ($column, $post_id) {
if ($column === 'dob') {
echo esc_html(get_post_meta($post_id, '_dob', true) ?: '—');
}
if ($column === 'sex') {
echo esc_html(get_post_meta($post_id, '_sex', true) ?: '—');
}
if ($column === 'account_id') {
$user_id = get_post_meta($post_id, '_customer_user', true);
echo $user_id ? esc_html($user_id) : '—';
}
}, 10, 2);
—
### **2. Add Screen Options Toggle**
Now, let’s make these columns optional via the **Screen Options** panel.
#### **Step 3: Register Screen Options**
// Add custom screen options
add_filter('manage_edit-shop_order_columns', function ($columns) {
$user = get_current_user_id();
// Check if user has disabled columns
$dob_enabled = get_user_meta($user, 'woocommerce_order_dob_column', true) !== 'no';
$sex_enabled = get_user_meta($user, 'woocommerce_order_sex_column', true) !== 'no';
$account_id_enabled = get_user_meta($user, 'woocommerce_order_account_id_column', true) !== 'no';
if (!$dob_enabled) unset($columns['dob']);
if (!$sex_enabled) unset($columns['sex']);
if (!$account_id_enabled) unset($columns['account_id']);
return $columns;
});
—
#### **Step 4: Save User Preferences for Columns**
// Save user screen options preferences
add_filter('set-screen-option', function ($status, $option, $value) {
if (in_array($option, ['woocommerce_order_dob_column', 'woocommerce_order_sex_column', 'woocommerce_order_account_id_column'])) {
return $value;
}
return $status;
}, 10, 3);
—
#### **Step 5: Add Settings to Screen Options**
// Add fields to the Screen Options tab
add_action('woocommerce_admin_order_list_table_columns', function () {
$user = get_current_user_id();
$dob_checked = get_user_meta($user, 'woocommerce_order_dob_column', true) !== 'no' ? 'checked' : '';
$sex_checked = get_user_meta($user, 'woocommerce_order_sex_column', true) !== 'no' ? 'checked' : '';
$account_id_checked = get_user_meta($user, 'woocommerce_order_account_id_column', true) !== 'no' ? 'checked' : '';
?>
<fieldset class="screen-options">
<legend><?php _e('Order Columns', 'your-textdomain'); ?></legend>
<label for="woocommerce_order_dob_column">
<input type="checkbox" name="woocommerce_order_dob_column" id="woocommerce_order_dob_column" <?php echo $dob_checked; ?> />
<?php _e('Show DOB', 'your-textdomain'); ?>
</label>
<br>
<label for="woocommerce_order_sex_column">
<input type="checkbox" name="woocommerce_order_sex_column" id="woocommerce_order_sex_column" <?php echo $sex_checked; ?> />
<?php _e('Show Sex', 'your-textdomain'); ?>
</label>
<br>
<label for="woocommerce_order_account_id_column">
<input type="checkbox" name="woocommerce_order_account_id_column" id="woocommerce_order_account_id_column" <?php echo $account_id_checked; ?> />
<?php _e('Show Account/User ID', 'your-textdomain'); ?>
</label>
</fieldset>
<?php
});
—
#### **Step 6: Save User Preferences**
// Save user preferences when screen options are updated
add_action('admin_init', function () {
$user = get_current_user_id();
if (isset($_POST['woocommerce_order_dob_column'])) {
update_user_meta($user, 'woocommerce_order_dob_column', 'yes');
} else {
update_user_meta($user, 'woocommerce_order_dob_column', 'no');
}
if (isset($_POST['woocommerce_order_sex_column'])) {
update_user_meta($user, 'woocommerce_order_sex_column', 'yes');
} else {
update_user_meta($user, 'woocommerce_order_sex_column', 'no');
}
if (isset($_POST['woocommerce_order_account_id_column'])) {
update_user_meta($user, 'woocommerce_order_account_id_column', 'yes');
} else {
update_user_meta($user, 'woocommerce_order_account_id_column', 'no');
}
});
—
### **Final Result**
– The WooCommerce order dashboard will have three new columns: **DOB, Sex, and Account/User ID**.
– Users can enable/disable these columns from **Screen Options**.
– Their preferences will be saved per user.
This keeps the order dashboard clean and customizable without overwhelming users with unnecessary data.
Let me know if you need further modifications!