Проблема, с которой вы столкнулись, заключается в том, что вы снова сохраняете строку обратно в ту же переменную.Вместо этого вы сохраняете его в $newPhrase
.
Поэтому, когда цикл запускается снова, он снова корректирует старую неизмененную строку, а затем сохраняет ее как переменную $newPhrase
, перезаписывая то, что вы делали во время предыдущей итерации цикла.Вот почему вы получаете только последнюю измененную переменную.
Вместо того, чтобы каждый раз захватывать старую строку, вместо этого берите строку, которая была скорректирована, как здесь:
$string = "Our products are shoes, pants, shirts."
$products = get_post_meta( post_id, 'products', true );
$matches = get_post_meta( post_id, 'matches', true );
$newPhrase = $string;
foreach ($matches as $match){
$id = searchForId($match, $products); // searching for the right id
$newPhrase = str_replace($match, $products[$id]['sku'], $newPhrase);
}
Вот рабочая скрипта php ( слегка настроена, потому что у меня нет доступа к мета вашего продукта).