Magento 2

Cannot query field no GraphQL do Magento 2: o campo existe e some

A query volta com Cannot query field "meu_campo" on type "ProductInterface" e o campo está lá, escrito no schema.graphqls do seu módulo. Em nove de cada dez vezes o schema não tem culpa: é cache. O Magento costura os arquivos de todos os módulos uma vez, guarda o resultado, e enquanto a versão velha estiver de pé aquele campo simplesmente não existe para o servidor.

A limpeza que resolve

cd /var/www/loja
sudo -u www-data rm -rf generated/code generated/metadata
sudo -u www-data bin/magento setup:upgrade
sudo -u www-data bin/magento setup:di:compile
sudo -u www-data bin/magento cache:flush

Duas ressalvas antes de colar isso em produção. A loja fica fora do ar entre o rm -rf generated/ e o fim do setup:di:compile, então rode em janela de manutenção. E o cache:clean config sozinho não adianta: o schema costurado é gravado com o id Magento_Framework_GraphQlSchemaStitching_Config_Data e sem a tag CONFIG, e o cache:clean apaga por tag. Quem derruba é o cache:flush, que esvazia o storage inteiro. Apagar var/cache na unha também só resolve se o backend for arquivo; com Redis não tem nada ali.

Confirme o que o servidor carregou

Em vez de adivinhar, pergunte ao próprio endpoint quais campos o tipo tem hoje:

curl -s https://sualoja.com.br/graphql 
  -H 'Content-Type: application/json' 
  -d '{"query":"{ __type(name: "ProductInterface") { fields { name } } }"}'

Se a resposta for GraphQL introspection is not allowed, o bloqueio é o graphql/disable_introspection do app/etc/env.php; em produção ele fica ligado mesmo, faça o teste em homologação. Campo fora da lista é problema no servidor: o arquivo precisa estar em app/code/Vendor/Modulo/etc/schema.graphqls, e não em etc/frontend/, porque o leitor de schema roda no escopo global e não olha em subpasta de área. Depois disso, confira se o módulo está ligado com bin/magento module:status Vendor_Modulo.

Última pegadinha: consulta GraphQL por GET entra no full page cache. Depois de mexer no schema, teste com POST, senão você vai debugar meia hora uma resposta que ficou congelada.

Post Recentes

Magento 2 não envia e-mail de pedido: async sending e cron parado

O pedido entra na loja e o e-mail nunca sai: antes de culpar o SMTP, veja o envio assíncrono, a…

35 minutos atrás

cron_schedules WordPress: intervalo de 5 minutos no WP-Cron

O WordPress só oferece hourly, twicedaily, daily e weekly. Use o filtro cron_schedules para criar um intervalo de 5 minutos…

17 horas atrás

E-mails do WooCommerce não chegam: como testar o envio de um pedido real

Dispare pela linha de comando o e-mail de um pedido que já existe na loja e descubra se a falha…

1 dia atrás

CodeIgniter 4 tela branca: CI_ENVIRONMENT e o erro que sumiu

Página em branco no CodeIgniter 4, sem nenhuma mensagem? O ambiente está em production e escondeu o erro. Troque o…

2 dias atrás

Google Consent Mode v2 no WordPress: default denied antes do gtag rodar

O Google Ads acusa consentimento ausente porque o gtag sobe antes do banner. Veja como injetar o default denied do…

3 dias atrás

Módulos PHP 8.3 faltando na Saúde do site do WordPress: como instalar

A tela Saúde do site avisa que faltam extensões como intl, imagick ou zip: instale no PHP 8.3, reinicie o…

3 dias atrás