Почему вызывается ошибка: call to underfined function?
ну на сколько я понимаю, это внутри некого класса, get_free_product_details(  ) - это метод класса, соответственно надо так, $wfg_free_products[] = $this->get_free_product_details( $product );
ну и судя по всему, в этот метод надо передавать ID продукта, а вы передаете весь объект продукта
В предпоследней строчке вызвана функция, которая неизвестна на данном этапе выполнения.
Предположу, что Вы пропустили где-то require_once и/или ошиблись в названии функции.