спасибо за разъяснение но такой код тоже не работает =) Попробую unserialize()
Там дело не в мелких недочётах, там вообще не правильно ищется конец строки, каким то рандомным образом.
$price нужно передать, то есть по данному шорткоду нужно выводить $price, но не нужно её параметром указывать, т.к. он берётся из переменной, а смысл указывать это в параметре шорткода если легче вручную прописать =)