Replace template based on placeholder values
The best way to improve the performance of this code is probably by using the preg_replace_callback()-function. This function allows you to search for a regex in a string, and call a function for every match. This function then returns the replacement. This avoids running multiple str_replace() operations over the string, which can be costly for large strings.

Secondly, we can use a capture group in the regex to avoid the use of explode(). I.e. by changing the regex from /{ITEM-.*?}/ to /{ITEM-(.*?)}/ we can ensure that we get the matched item identifier directly.

Applying those two modifications, we would end up with something like:

$content = 'Here is the item list {ITEM-100}  {ITEM-110}  {ITEM-200}';    
function get_replacement($matches) {
    $value = $matches[1]; // Index 1 is the first capture group, which contains our item number.
    return get_item_card($value);
}
$content = preg_replace_callback('/{ITEM-(.*?)}/', 'get_replacement', $content);
echo $content;