One of the things I love about WordPress development is how flexible it can be when solving real-world business problems. Recently, I worked on a project for Bulk Branded
, a UK-based supplier that needed a WooCommerce store tightly integrated with their wholesaler’s catalog.
Instead of manually uploading hundreds of SKUs (and constantly updating prices/stock), I built a custom WordPress plugin that connects to the wholesaler’s API and automatically creates/updates WooCommerce products.
🚩 The Challenge
Fetch thousands of products from a wholesaler’s API.
Keep products synced with stock, categories, and prices.
Match the store’s branding and design requirements.
Handle bulk imports without breaking the server.
🛠️ The Approach
I created a plugin that:
Connects to the wholesaler API.
Maps API data to WooCommerce fields.
Creates categories if they don’t exist.
Generates product variations (e.g., color options).
Handles featured images + galleries dynamically.
Runs in batches via AJAX/Cron to avoid timeouts.
🧑💻 A Peek at the Code
Here’s a simplified version of the core sync function:
`//====================== Sync Products From API =================
add_action('wp_ajax_sync_wholesaler_products', 'sync_wholesaler_products');
function sync_wholesaler_products() {
    $response = wp_remote_get('https://api.xxxxxxxxxxxxxxx');
    $products = json_decode(wp_remote_retrieve_body($response));
if (empty($products)) {
    return wp_send_json_error('No products found');
}
foreach ($products as $item) {
    // 1. Insert product
    $product_id = wp_insert_post([
        'post_type'   => 'product',
        'post_title'  => sanitize_text_field($item->Title),
        'post_content'=> wp_kses_post($item->Description),
        'post_status' => 'publish',
    ]);
    // 2. Add SKU + Pricing
    update_post_meta($product_id, '_sku', $item->SKU);
    foreach ($item->Pricing as $price) {
        add_row('bulk_prices', [
            'min_quantity'  => $price->Quantity,
            'cost_per_unit' => $price->Price
        ], $product_id);
    }
    // 3. Handle Categories
    wp_set_object_terms($product_id, $item->CategoryMain, 'product_cat', true);
    wp_set_object_terms($product_id, $item->CategorySub, 'product_cat', true);
    // 4. Featured Image
    Generate_Featured_Image($item->Images[0]->SrcFull, $product_id);
    // 5. Variations (e.g., Colors)
    foreach ($item->Colours as $colour) {
        $variation_id = bb_create_variation($product_id, [
            'pa_color' => sanitize_title($colour->Name)
        ], $colour->Stock, $item->Pricing[0]->Price);
        Generate_Featured_Image($colour->Image, $variation_id);
    }
}
return wp_send_json_success('Products synced successfully');
}
`
👉 This is a simplified snippet — the real code includes batching, error handling, and more robust taxonomy management.
📚 Lessons Learned
Batch processing is everything — syncing thousands of products in one go can kill your server. Running in chunks via AJAX or WP-Cron makes it stable.
Stick to WooCommerce CRUD functions — never hack the DB directly. It ensures compatibility with future updates.
Dynamic taxonomies save time — programmatically creating categories/attributes on the fly keeps the store clean and organized.
🎉 The Outcome
The result was a fully automated WooCommerce store that:
Syncs with the wholesaler daily.
Creates products with variations, stock levels, and pricing.
Matches the brand’s design guidelines.
Saves the client hours of manual work each week.
 
 
              
 
    
Top comments (0)