10

I would like to add new custom option text field like 'New Text Field Title' in the magento 2.x 'Customizable Options' section could you please suggest me and guide me how to add please refer my screenshot. enter image description here

3
  • I got this plugin working properly and saving, etc. I have also created a plugin which allows me to override Select.php. That said, Can someone tell me how to display the new custom options field in Select.php? I need my custom option titles/labels to look like this: <label class="label" for="select_4567" class="my_custom_options_text"> <span>My Custom Options Title</span> </label> Commented Apr 30, 2019 at 22:25
  • If you have a new question, please ask it by clicking the Ask Question button. Include a link to this question if it helps provide context. - From Review
    – Jarnail S
    Commented May 1, 2019 at 1:23
  • is there any complete answer of this question? I want to implement same in Magento 2.3.4. Commented Feb 28, 2023 at 6:45

1 Answer 1

15

Create a plugin for that. Try following way:

SR/StackExchange/etc/adminhtml/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions">
        <plugin name="sr_stackexchange_custom_option" type="SR\StackExchange\Plugin\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions" sortOrder="1"/>
    </type>
</config>

SR/StackExchange/Plugin/Catalog/Ui/DataProvider/Product/Form/Modifier/CustomOptions.php

namespace SR\StackExchange\Plugin\Catalog\Ui\DataProvider\Product\Form\Modifier;


class CustomOptions
{

    public function afterModifyMeta(
        \Magento\Catalog\Ui\DataProvider\Product\Form\Modifier\CustomOptions $subject,
        $meta
    ) {
        $meta['custom_options']['children']['options']['children']['record']['children']['container_option']['children']['container_common']['children']['custom_text'] =
        $this->getTitleFieldConfig(
            200,
            [
                'arguments' => [
                    'data' => [
                        'config' => [
                            'label' => __('Custom Text'),
                            'component' => 'Magento_Catalog/component/static-type-input',
                            'valueUpdate' => 'input',
                            'imports' => [
                                'optionId' => '${ $.provider }:${ $.parentScope }.option_id'
                            ]
                        ],
                    ],
                ],
            ]
        );
        return $meta;
    }

    /**
     * Get config for "Title" fields
     *
     * @param int $sortOrder
     * @param array $options
     * @return array
     */
    protected function getTitleFieldConfig($sortOrder, array $options = [])
    {
        return array_replace_recursive(
            [
                'arguments' => [
                    'data' => [
                        'config' => [
                            'label' => __('Custom Text'),
                            'componentType' => \Magento\Ui\Component\Form\Field::NAME,
                            'formElement' => \Magento\Ui\Component\Form\Element\Input::NAME,
                            'dataScope' => 'custom_text',
                            'dataType' => \Magento\Ui\Component\Form\Element\DataType\Text::NAME,
                            'sortOrder' => $sortOrder,
                            'validation' => [
                                'required-entry' => false
                            ],
                        ],
                    ],
                ],
            ],
            $options
        );
    }
}

Clear Magento cache.

NB: This solution only for M2.1.x. and greater.

[Update]

How to save?

-> create a column 'catalog_product_option' table same as field name. e.g: custom_text

-> clear cache.

18
  • Thanks its showing in the admin side custom options section now but the value unable to save whether we have to do anything ? Commented Jan 19, 2017 at 6:08
  • Check here -> github.com/magento/magento2/blob/2.1/app/code/Magento/Catalog/…
    – Sohel Rana
    Commented Jan 19, 2017 at 6:21
  • we followed the link but we were unable to save the value whether we have to do any database changes? could you plz explain in detail thanks Commented Jan 19, 2017 at 8:43
  • Check last update code.
    – Sohel Rana
    Commented Jan 19, 2017 at 9:12
  • 2
    I have create custom field for bundle options, Save successfully into catelog_product_bundle_options table but not loading it after save while edit product. any idea? Commented Jul 25, 2017 at 10:11

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