
magento 2
Copiou um Setup/InstallData.php de um tutorial de 2018, rodou bin/magento setup:upgrade no 2.4.8 e o atributo não apareceu em canto nenhum do admin. Não é bug do seu módulo: InstallData e UpgradeData foram descontinuados no 2.3 e, desde o 2.4, o module.xml não declara mais setup_version — sem ela o Magento nem procura essas classes. Quem cria atributo hoje é o Data Patch.
O caminho é app/code/Roger/Catalogo/Setup/Patch/Data/AddCorPredominante.php. O nome completo da classe vira o identificador do patch, então escolha com carinho:
<?php
namespace RogerCatalogoSetupPatchData;
use MagentoCatalogModelProduct;
use MagentoEavModelEntityAttributeScopedAttributeInterface;
use MagentoEavSetupEavSetupFactory;
use MagentoFrameworkSetupModuleDataSetupInterface;
use MagentoFrameworkSetupPatchDataPatchInterface;
class AddCorPredominante implements DataPatchInterface
{
public function __construct(
private ModuleDataSetupInterface $moduleDataSetup,
private EavSetupFactory $eavSetupFactory
) {
}
public function apply()
{
$eavSetup = $this->eavSetupFactory->create(['setup' => $this->moduleDataSetup]);
$eavSetup->addAttribute(Product::ENTITY, 'cor_predominante', [
'type' => 'varchar',
'label' => 'Cor predominante',
'input' => 'text',
'required' => false,
'sort_order' => 100,
'global' => ScopedAttributeInterface::SCOPE_STORE,
'group' => 'General',
'used_in_product_listing' => true,
]);
return $this;
}
public static function getDependencies(): array
{
return [];
}
public function getAliases(): array
{
return [];
}
} Rode bin/magento setup:upgrade e o Magento grava esse nome de classe na tabela patch_list. É essa linha que garante que o patch roda uma vez só, mesmo que você chame setup:upgrade dez vezes seguidas.
Errou uma opção do addAttribute e quer testar outra vez? Editar a classe não adianta, porque o registro em patch_list continua lá. Confira o que vai sair, apague e só então mande o upgrade:
mysql -u magento -p magento -e "SELECT patch_name FROM patch_list WHERE patch_name LIKE '%AddCorPredominante%'"
mysql -u magento -p magento -e "DELETE FROM patch_list WHERE patch_name LIKE '%AddCorPredominante%'"
bin/magento setup:upgrade Isso é coisa de máquina de desenvolvimento, com dump do banco feito antes. Em produção, para mexer em atributo que já existe, escreva outro patch chamando updateAttribute. E se um dia renomear a classe, ponha o nome antigo no getAliases: senão o Magento entende como patch inédito e cria o atributo de novo.
Troque strpos e substr por str_contains, str_starts_with e str_ends_with no PHP 8, com o polyfill para quem ainda mantém servidor…
Função pronta para gerar um cupom único por cliente depois do pedido concluído, com WC_Coupon, data de expiração, limite de…
Como registrar um modifier no pool do formulário de produto do Magento 2 e criar um campo próprio na aba,…
Site abrindo em branco sem mensagem nenhuma? Leia o log do PHP-FPM, identifique o plugin que causou o fatal e…
Trocou DateTime por DateTimeImmutable e a data parou de andar? O modify devolve uma cópia nova em vez de alterar…
Use o parâmetro strategy do wp_enqueue_script para adiar o JavaScript do tema, sem plugin de otimização, e entenda por que…