Precisa de um campo novo na aba do produto no admin e a primeira ideia é copiar o product_form.xml do Magento_Catalog pro seu módulo. Não copie: são centenas de linhas que viram dívida técnica no próximo upgrade. O caminho é uma classe modifier registrada no pool.
Registrando no pool pelo di.xml
Vai no etc/adminhtml/di.xml do seu módulo, dentro da tag config. O core já declara esse virtualType em Magento_Catalog, então aqui você só acrescenta o seu item:
<virtualType name="MagentoCatalogUiDataProviderProductFormModifierPool">
<arguments>
<argument name="modifiers" xsi:type="array">
<item name="rt_entrega" xsi:type="array">
<item name="class" xsi:type="string">RtCatalogoUiDataProviderProductFormModifierEntrega</item>
<item name="sortOrder" xsi:type="number">200</item>
</item>
</argument>
</arguments>
</virtualType>
O sortOrder não é enfeite: sem ele o Pool estoura na hora de montar o formulário dizendo que o parâmetro sortOrder está faltando. E o número decide quem ganha. O pool roda em ordem crescente e o modifier Eav do Magento_Catalog está com sortOrder 10, substituindo o children inteiro do grupo. Se você entrar abaixo dele, o campo desaparece. A lista do core termina em 160, por isso uso 200.
A classe: modifyMeta e modifyData
namespace RtCatalogoUiDataProviderProductFormModifier;
use MagentoCatalogUiDataProviderProductFormModifierAbstractModifier;
class Entrega extends AbstractModifier
{
public function modifyMeta(array $meta): array
{
$meta['product-details']['children']['rt_prazo']['arguments']['data']['config'] = [
'componentType' => 'field',
'formElement' => 'input',
'dataType' => 'text',
'label' => __('Prazo extra em dias'),
'dataScope' => 'rt_prazo',
'sortOrder' => 200,
];
return $meta;
}
public function modifyData(array $data): array
{
return $data;
}
}
As duas são obrigatórias: AbstractModifier deixa modifyMeta e modifyData abstratas.
A armadilha que me custou uma tarde: o campo aparece bonitinho, você salva e o valor some. Desenhar o meta não cria coluna nenhuma. O rt_prazo precisa existir como atributo de produto, criado num data patch com EavSetup, ou você persiste na mão num plugin do save.
Depois de mexer no di.xml rode bin/magento cache:clean config, e em produção bin/magento setup:di:compile antes disso. Senão o pool compilado velho continua valendo e você jura que o modifier não foi registrado.
Se travou nisso e precisa de ajuda, me chama aqui.