Выполнять отдельный SQL-запрос в каждой итерации цикла - не очень разумно и плохо для производительности. Давайте для начала получим количество элементов в рипитере:
SELECT meta_value FROM wp_postmeta WHERE post_id=83 && meta_key='recipients'
Результат:
array:1 [
0 => [
'meta_value' => '3'
]
]
Далее, сформируем на уровне PHP массив валидных ключей:
$total = (int) $results[0]['meta_value']; // Значение в базе в string
$keys = [];
for ( $i = 0; $i < $total; $i ++ ) {
$keys[] = "recipients_{$i}_email";
}
dump( $keys );
Результат:
array:3 [
0 => "recipients_0_email"
1 => "recipients_1_email"
2 => "recipients_2_email"
]
А теперь можно одним запросом получить все значения для этих полей указав их в WHERE meta_key IN (). Получается у нас что-то типа такого:
$keys = implode(',', $keys); // собираем строку для IN
$query = "SELECT * FROM wp_postmeta WHERE post_id=83 AND meta_key IN ({$keys})";
Единственное, что PHP склеит массив в строку без кавычек, а для IN нужно чтобы значения были в кавычках. Конкретно этот запрос ошибку выдаст. Не знаю, как у вас реализовано выполнение запросов, но PDO::quote() к примеру решает данную проблему. Думаю дальше сами разберетесь.