Magento - Get Custom Option Value details from Option Value ID

In this code, I load the product by id, get the option collection, which in my tests only contains the custom options for a product, not attributes or other options, iterate through the options and load the values collection for each option. This demo code should be testable pretty much anywhere as long as you have a product ID.

<?php

$productID = $this->getProductId(); //Replace with your method to get your product Id.

$product = Mage::getModel('catalog/product')->load($productID);
$options = Mage::getModel('catalog/product_option')->getProductOptionCollection($product);

foreach ($options as $option) {
    Mage::log('Name: ' . $option->getDefaultTitle());
    Mage::log('    Type: ' . $option->getType());
    Mage::log('    Class: ' . get_class($option));
    Mage::log('    Price/Type: ' . ($option->getPrice() ? $option->getPrice() : '0.00') . ' / ' . $option->getType());

    if ($option->getType() === 'drop_down') {
        $values = Mage::getSingleton('catalog/product_option_value')->getValuesCollection($option);
        Mage::log('    Values: (name/price/type)');

        foreach ($values as $value) {
            Mage::log('        ' . $value->getTitle() . ' / ' . $value->getPrice() . ' / ' . $value->getPriceType());
        }
    }
}
?>

Example Log Output:

2014-02-18T20:15:25+00:00 DEBUG (7): Name: Turtle Color
2014-02-18T20:15:25+00:00 DEBUG (7):     Type: drop_down
2014-02-18T20:15:25+00:00 DEBUG (7):     Class: Mage_Catalog_Model_Product_Option
2014-02-18T20:15:25+00:00 DEBUG (7):     Price/Type: 0.00 / drop_down
2014-02-18T20:15:25+00:00 DEBUG (7):     Values: (name/price/type)
2014-02-18T20:15:25+00:00 DEBUG (7):         Red / 0.0000 / fixed
2014-02-18T20:15:25+00:00 DEBUG (7):         White / 0.0000 / fixed
2014-02-18T20:15:25+00:00 DEBUG (7):         Blue / 0.0000 / fixed

Example available data for $option Mage::log($option->toArray()):

note: price and price_type are only available on the option values for drop_down type options.

2014-02-18T20:19:44+00:00 DEBUG (7): Array
(
    [option_id] => 135
    [product_id] => 80
    [type] => field
    [is_require] => 0
    [sku] =>
    [max_characters] => 25
    [file_extension] =>
    [image_size_x] =>
    [image_size_y] =>
    [sort_order] => 90
    [description] =>
    [default_title] => Turtle Name
    [store_title] =>
    [title] => Turtle Name
    [default_price] => 0.0000
    [default_price_type] => fixed
    [store_price] =>
    [store_price_type] =>
    [price] => 0.0000
    [price_type] => fixed
)

Example available data for $values Mage::log($values->toArray()):

2014-02-18T20:25:21+00:00 DEBUG (7): Array
(
    [totalRecords] => 2
    [items] => Array
        (
            [0] => Array
                (
                    [option_type_id] => 1149
                    [option_id] => 229
                    [sku] =>
                    [sort_order] => 10
                    [default_price] => 0.0000
                    [default_price_type] => fixed
                    [store_price] => 0.0000
                    [store_price_type] => fixed
                    [price] => 0.0000
                    [price_type] => fixed
                    [default_title] => 31"
                    [store_title] => 31"
                    [title] => 31"
                )
            [1] => Array
                (
                    [option_type_id] => 1150
                    [option_id] => 229
                    [sku] =>
                    [sort_order] => 20
                    [default_price] => 0.0000
                    [default_price_type] => fixed
                    [store_price] => 0.0000
                    [store_price_type] => fixed
                    [price] => 0.0000
                    [price_type] => fixed
                    [default_title] => 31.5"
                    [store_title] => 31.5"
                    [title] => 31.5"
                )
        )
)

First load the products from the collection then loop as follows :

$product = 100; // product id, you should get first

foreach($product->getOptions() as $options)
{
    $options->getType(); // get option type

    $optionValues = $options->getValues();

    foreach($optionValues as $optVal)
    {
       print_r($optVal->getData());
       // or $optVal->getData('option_id')
    }
}

* Modified *

$prdSku = 125; // sample sku  
$product = Mage::getModel('catalog/product');  
$prdId = $product->getIdBySku($prdSku);  
$product->load($prdId);  

if ($product->getId()) {  
  if ($product->hasCustomOptions()) {  
    foreach ($product->getOptions() as $opt) {  
      $optionType = $opt->getType();  

      if ($optionType == 'drop_down') {  
        $values = $opt->getValues();  

        foreach ($values as $k => $v) {  
          Mage::log("Array Key = $k;");  
          Mage::log("Array Value: $v");  
        }  
      }  
    }  
 }  

Tags:

Magento