00:00:00

Gerenciando o WordPress com o WP-CLI

Rodrigo Primo

WordCamp Belo Horizonte 2014

Notes

Quem sou eu

  • Sócio e desenvolvedor no Hacklab
  • Trabalho com WordPress desde 2009
  • Defensor do software livre

Notes

O que é o WP-CLI

  • É um conjunto de ferramentas para gerenciar o WordPress a partir da linha de comando.
  • Permite atualizar plugins, alterar opções, instalar temas, entre outras funções.
  • Escrito em PHP e publicado como software livre (MIT Public license).
  • Construído reaproveitando o código do próprio WP.
  • Criado por Cristi Burcă (scribu) e Andreas Creten em 2011.

Notes

Para que serve?

Notes

Automação

Backups periódicos da base de dados:

#!/bin/bash

cd /diretorio/wp/

wp db export /diretorio/backup/wordpress.sql

Notes

Integração

Script Python para pegar informações de um usuário:

import subprocess

def get_wp_user_info(user_name):
    command = ["wp", "user", "get", user_name]

    proc = subprocess.Popen(command,
        stdout=subprocess.PIPE)
    out, err = proc.communicate()

    return out.strip("\n")

print get_wp_user_info("admin")

Notes

Desenvolvimento

Geração de código:

$ wp scaffold plugin wordcamp
$ wp scaffold post-type slides --plugin=wordcamp

Depuração:

$ wp shell
wp> get_bloginfo('blogname')
string(13) "WordCamp"
wp> get_the_title(1)
string(23) "WordCamp Belo Horizonte 2014"

Notes

Administração

Atualizar o WP, plugins e temas:

$ wp core update
$ wp core update-db
$ wp theme update --all
$ wp plugin update --all

Notes

Requisitos

  • Acesso ao shell
  • Linux ou OS X
    • Suporte não oficial ao Windows através do projeto WP-PowerShell - https://github.com/ericmann/WP-PowerShell
  • PHP >= 5.3 e php5-cli
  • WordPress >= 3.5

Notes

Como instalar

No terminal:

$ curl -L https://raw.github.com/wp-cli/builds/gh-pages/phar/
wp-cli.phar > wp-cli.phar
$ chmod +x wp-cli.phar
$ sudo mv wp-cli.phar /usr/bin/wp

Mais informações em http://wp-cli.org

Notes

Como instalar

Para instalar o auto-complete dos comandos, primeiro baixar o arquivo wp-completion.bash:

$ wget https://github.com/wp-cli/wp-cli/raw/master/utils/
wp-completion.bash

E então adicionar as linhas abaixo ao .bash_profile:

# WP-CLI Bash completions
source /caminho/para/wp-completion.bash

Notes

Uso básico

Lista dos comandos disponíveis:

$ wp

Estrutura dos comandos:

$ wp comando subcomando --assoc_arg1=value1 arg1
$ wp user get --format=json admin

Ajuda de um comando específico:

$ wp help theme

Ajuda de um sub-comando específico:

$ wp help theme list

Notes

Arquivo de configuração

  • Permite definir um valor padrão para os parâmetros globais ou parâmetros de um comando específico
  • Escrito no formato YAML
  • Pode ser criado dentro de um projeto ou então na home do usuário
  • Para mais informações: http://wp-cli.org/config/

Notes

Exemplo de arquivo de configuração

path: src
disabled_commands:
  - db drop
  - plugin install
require:
  - path-to/command.php

core install:
  admin_user: wordcamp
  admin_email: wordcamp@example.com

Notes

Mais exemplos de comandos

Notes

Baixar e instalar o WP

Baixar:

$ wp core download

Criar o wp-config.php:

$ wp core config --dbname=baseDeDados --dbuser=usuario

Criar a base de dados:

$ wp db create

Instalar:

$ wp core install --url=http://wc.dev --title=WC
--admin_user=admin --admin_password=wc
--admin_email=wordcamp@wordpress.org

Notes

Tarefas de administração

Instalar plugin:

$ wp plugin install --activate query-monitor

Instalar tema:

$ wp theme install p2

Ativar tema:

$ wp theme activate twentytwelve

Notes

Tarefas de desenvolvimento

Alterar uma string no banco de dados (em especial a URL do WP):

$ wp search-replace textoAntigo textoNovo

Ver o valor de uma opção serializada:

$ wp option get sidebars_widgets

Gerar dados para teste:

$ wp post generate --count=500

Notes

Banco de dados

Exporta a base de dados para um arquivo SQL:

$ wp db export dump.sql

Importa um arquivo SQL para a base de dados:

$ wp db import dump.sql

Roda uma query no banco:

$ wp db query "select * from wp_users"

Notes

Combinando comandos

Deletar um conjunto de posts:

$ wp post delete $(wp post list --post_type='post' --format=ids)

Notes

O WP-CLI é extensível

  • Existe uma API que permite a criação de novos comandos ou subcomandos.
  • Um novo comando pode ser distribuído através de um plugin ou pode ser incluído localmente no arquivo de configuração do WP-CLI.
  • Para mais informações sobre como criar um comando: https://github.com/wp-cli/wp-cli/wiki/Commands-Cookbook
  • Lista de comandos criados pela comunidade disponível em: https://github.com/wp-cli/wp-cli/wiki/List-of-community-commands

Notes

CLI para o wp-super-cache

Carregar novos comandos:

function wpsc_cli_init() {
    if ( !function_exists( 'wp_super_cache_enable' ) )
        return;

    if ( defined('WP_CLI') && WP_CLI ) {
        include dirname(__FILE__) . '/cli.php';
    }
}

add_action( 'plugins_loaded', 'wpsc_cli_init' );

Fonte: https://github.com/wp-cli/wp-super-cache-cli

Notes

CLI para o wp-super-cache

Adicionar novo comando no arquivo cli.php:

WP_CLI::add_command( 'super-cache', 'WPSuperCache_Command' );

/**
 * Command line interface for wp-super-cache
 */
class WPSuperCache_Command extends WP_CLI_Command {
    [...]
}

Notes

CLI para o wp-super-cache

Exemplo de comando:

/**
 * Clear something from the cache.
 *
 * @synopsis [--post_id=<post-id>]
 */
function flush( $args = array(), $assoc_args = array() ) {
    [...]
}

Notes

CLI para o wp-super-cache

function flush( $args = array(), $assoc_args = array() ) {
    if ( isset($assoc_args['post_id']) ) {
        if ( is_numeric( $assoc_args['post_id'] ) ) {
            wp_cache_post_change( $assoc_args['post_id'] );
            WP_CLI::success( 'Cache cleared.' );
        } else {
            WP_CLI::error( 'This is not a valid post id.' );
        }
    } else {
        global $file_prefix;

        wp_cache_clean_cache( $file_prefix, true );
        WP_CLI::success( 'Cache cleared.' );
    }
}

Notes

Como contribuir

  • http://wp-cli.org
  • #wordpress-cli no irc.freenode.net
  • https://github.com/wp-cli/wp-cli/issues

Notes

Demonstração

Notes

Obrigado!

Rodrigo Primo

rodrigo@hacklab.com.br

http://rodrigoprimo.com

http://github.com/rodrigoprimo

Notes