مطمئنید آرایه 20 تا آیتم داره؟ با print_r تست کردید؟
قبلاً چنین اتفاقی برای وجود یه سری کاراکتر های خاص تو بعضی آیتم ها برام پیش میامد تو آیتم ها کاراکتر های خاصی هم وجود نداره؟
می خواید یه بار با حلقه for به صورت همون 20 تایی که گفتید اجرا کنید اصولاً اگه ID وجود نداشته باشه باید اخطار بده.
خروجی $wpdb->replace هم بررسی کنید که false نباشه چون اگر درست انجام بشه عدد تعداد ردیف هایی که تغییر کردن رو پس میده ولی اگه خروجی اش false باشه یعنی مشکلی هست.
فکر کنم با تابع $wpdb->print_error() میشه ارور آخرین کوئری اجرا شده رو نمایش داد.