In a helper class, I am trying to get, via a foreach loop, custom options from each purchased product from a loaded order. I am successful in grabbing the options and option values on each regular virtual product. However, when it comes to nominal virtual products (recurring based), the below code won't pick those picked options up from the order.

Since $item->getProductOptions() is null on nominal virtual based products, is there another way I can get what options the customer picked? Note that customers are able to pick the custom options before placing any products (including nominal) into the cart and checkout successfully.

The below code is successful in getting custom options on virtual products, but not with nominal virtual products:

$items = Mage::getModel('sales/order')->loadByIncrementId($orderId)->getAllVisibleItems();

$productOptions = array();
foreach($items as $iKey => $item) {
    $options = $item->getProductOptions(); /* Null on nominal products only */

    foreach($options['options'] as $oKey => $option) {
        $productOptions[$iKey]->label = $option['label'];
        $productOptions[$iKey]->id = $option['option_id'];
        $productOptions[$iKey]->type = $option['option_type'];
        $productOptions[$iKey]->print_values = explode(",",$option['print_value']);
        $productOptions[$iKey]->option_values = explode(",",$option['option_value']);

*Note that I am still able to get all items, just not their options in nominal based products.

Update: I've looked at the DB table sales_flat_order_item and found that the column product_options is null on nominal products but has listed options for regular products. Since Magento's recurring feature is listed as (beta) that this maybe a bug.

1 Answer 1


Have you tried to list the contents of the order_item_info from Magento's sales_recurring_profile table?

I'm using Mageworx Advanced Product Options, and Recurring Virtual Products with Custom Options get that Custom Option data dumped into that cell.

Not the answer you're looking for? Browse other questions tagged or ask your own question.