Wordpress

wp db query: rodar SQL no WordPress pelo WP-CLI sem phpMyAdmin

O cliente pede um número na hora, tipo quantos pedidos ficaram em processando no mês, e o servidor não tem phpMyAdmin nem Adminer. Com SSH e a pasta do WordPress já dá: o WP-CLI conversa com o banco usando as credenciais do wp-config.php, sem você digitar senha.

O SELECT sai direto do terminal

Entre na raiz da instalação e mande o SQL entre aspas. Confira o prefixo antes, porque nem toda instalação usa wp_. O --skip-column-names vai direto pro cliente mysql e tira o cabeçalho, útil quando a saída alimenta um script:

cd /var/www/seusite/html

sudo -u www-data wp db prefix

sudo -u www-data wp db query "SELECT post_status, COUNT(*) FROM wp_posts GROUP BY post_status;"

sudo -u www-data wp db query "SELECT option_name FROM wp_options WHERE autoload IN ('yes','on','auto-on','auto') ORDER BY LENGTH(option_value) DESC LIMIT 10;" --skip-column-names

sudo -u www-data wp db query < relatorio.sql

Repare no IN da segunda consulta: até a 6.5 bastava autoload = 'yes', mas da 6.6 em diante o core grava também on, auto-on e auto na mesma coluna, e o filtro antigo esconde boa parte das opções do relatório.

Meça o tamanho antes de exportar

Antes de puxar um dump de 4 GB pela rede, veja quem está ocupando espaço e corte as tabelas de log na exportação:

sudo -u www-data wp db size --tables --human-readable

sudo -u www-data wp db export dump-seusite.sql --exclude_tables=wp_actionscheduler_logs,wp_statistics_visitor

O wp db query não é um cliente SQL próprio: ele lê DB_NAME, DB_USER, DB_PASSWORD e DB_HOST do wp-config.php e entrega a query pro binário de mysql ou mariadb que estiver no PATH. Daí a sintaxe do MySQL 8 valer inteira, e daí também o comando quebrar dizendo que não achou o executável quando o banco mora em outro host e ninguém instalou o cliente na máquina do site.

A regra que eu sigo em banco de produção: todo UPDATE nasce como SELECT com o mesmo WHERE, e todo DELETE nasce depois de um wp db export. O db query não tem dry-run nem pedido de confirmação, ele executa na hora.

Post Recentes

Custom post type dando 404: flush_rewrite_rules na ativação do plugin

A listagem do custom post type abre e o single dá 404 no WordPress 6.9. Entenda o cache das rewrite…

5 horas atrás

systemd timer no lugar do cron: agendar script com log e sem execução dupla

Um par .service e .timer substitui a linha do crontab com log no journal, execução perdida recuperada no boot e…

14 horas atrás

Descrição em massa no WooCommerce: wp eval-file lendo a lista de SKUs

400 produtos importados do fornecedor com a aba Descrição vazia. Um wp eval-file percorre os SKUs sem texto, grava pelo…

21 horas atrás

Frete grátis no WooCommerce: esconder as outras opções de entrega

Some com PAC e SEDEX da lista quando o frete grátis está disponível, usando woocommerce_package_rates, e limpe o cache de…

1 dia atrás

Erro HTTP no WordPress ao enviar imagem para a biblioteca de mídia

A barra de upload chega no fim e o WordPress devolve só "Erro HTTP". Separe as três causas: Imagick barrado…

2 dias atrás

style amp-custom acima de 75KB: como cortar o CSS inline do AMP

The author stylesheet specified in tag 'style amp-custom' is too long? Meça o bloco com curl e tire da fila…

2 dias atrás