00:00:00

Gerenciando o WordPress com o WP-CLI

Rodrigo Primo

WordCamp São Paulo 2013

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 São Paulo 2013"

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.2 e php5-cli
  • WordPress >= 3.4

Notes

Como instalar

No terminal:

$ curl https://raw.github.com/wp-cli/wp-cli.github.com/master/
installer.sh | bash

Adicionar as linhas abaixo ao .bash_profile para auto-complete dos comandos:

# WP-CLI Bash completions
source ~/.wp-cli/vendor/wp-cli/wp-cli/utils/wp-completion.bash

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

Notes

Uso básico

Lista dos comandos disponíveis:

$ wp

Ajuda de um comando específico:

$ wp help theme

Ajuda de um sub-comando específico:

$ wp help theme list

Estrutura dos comandos:

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

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

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 debug-bar

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

Gerar novamente todos os thumbnails:

$ wp media regenerate

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

Deve-se criar uma classe para cada comando. Os métodos públicos da classe são os sub-comandos.

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.' );
        }
        wp_cache_post_change( $assoc_args['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

Obrigado!

Rodrigo Primo

rodrigo@hacklab.com.br

http://rodrigoprimo.com

http://github.com/rodrigoprimo

Notes