This may help; this function returns a list of product where a custom field is set to any value. function get_wc_products_where_custom_field_is_set($field) { $products = wc_get_products(array('status' => 'publish')); foreach ($products as $product) { $id = $product->get_id(); if (get_post_meta($id,$field,true)) /* if my custom field is set */ $ret[] = new \WC_Product($id); } return $ret; } Works fine unless you've got 1000s of products.....