Nikos Nikos -5 years ago 258
PHP Question

Search by order item SKU or ID in Woocommerce Orders Admin page

What I am trying to do is to be able to search by order item SKU or ID in the Woocommerce Orders Admin page. What I have found/done till now, but with no success is the following at functions.php file.

add_filter( 'woocommerce_shop_order_search_fields', 'woocommerce_shop_order_search_sku' );

function woocommerce_shop_order_search_sku( $search_fields ) {

$args = array(
'post_type' => 'shop_order'

$orders = new WP_Query($args);

if($orders->have_posts()) {
while($orders->have_posts()) {
$post = $orders->the_post();
$order_id = get_the_ID();
$order = new WC_Order($order_id);
$items = $order->get_items();
foreach($items as $item) {
$search_order_item_sku = wp_get_post_terms( $item['product_id'], 'search_sku' );
foreach($search_order_item_sku as $search_sku) {
add_post_meta($order_id, "_search_sku", $search_sku->sku);

$search_fields[] = '_search_sku';

return $search_fields;


I suppose the issue is the value of $search_sku at the line with the "add_post_meta". I have also tried it with get_sku(), $item['sku'] with no luck.

Any suggestions?

Answer Source

@blacksquare, @jibby, @helgatheviking you are the men! This is the code that works, due to your help.

    //Search by product SKU in Admin Woocommerce Orders
add_filter( 'woocommerce_shop_order_search_fields', function ($search_fields ) {
    $posts = get_posts(array('post_type' => 'shop_order'));

    foreach ($posts as $post) {
        $order_id = $post->ID;
        $order = new WC_Order($order_id);
        $items = $order->get_items();

        foreach($items as $item) {
            $product_id = $item['product_id'];
            $search_sku = get_post_meta($product_id, "_sku", true);
            add_post_meta($order_id, "_product_sku", $search_sku);

    return array_merge($search_fields, array('_product_sku'));
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download