WP-CLIの使い方

  • 191
    いいね
  • 0
    コメント

WordPressをコマンドから管理出来るツールにWP-CLIがあります。
プラグインのインストールや、ユーザの設定、パーマリンクの設定等が出来ます。
私の場合、ある程度の雛形のWordPressを作成したいときによく使用しています。

何が出来るの?

  • WordPress本体のダウンロード (バージョンなど指定も可能)
  • wp-config.phpファイルの作成 (デバックモードの有効化なども可能)
  • プラグイン、テーマファイルののインストール、有効化、削除、検索
  • 固定ページ、投稿ページの作成
  • その他いろいろ

今回は、よく使うものなどをまとめてみたいと思います。

インストール方法

まずは wp-cli.phar ファイルをダウンロードします

curl -O https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar

動くかどうか確認後

php wp-cli.phar --info

実行権限を付け、PATHに通します

chmod +x wp-cli.phar
sudo mv wp-cli.phar /usr/local/bin/wp
wp cli version

以上で完了です。
アップグレードも同様の手順で行います。

参考 : WP-CLI Install

よく使われるもの

  • WordPressのダウンロード
wp core download --locale=ja
wp core download --locale=ja --path=/var/www/html/wordpress

pathオプションを指定した場合、特定のディレクトリにWordPressを配置します。

またオプションとしてバージョンなどの指定ができるので公式を参考してください。

参考: WP-CLI wp core download

  • wp-config.phpのセットアップ
wp core config --dbname=wordpress --dbuser=wordpress --dbpass=pass --dbhost=localhost --dbprefix=wordpress_

localhostやprefix値はデフォルトの値が設定されています。
ほかにもデバックモードの有効方法が公式にあります。

参考: WP-CLI wp core config

  • DBのセットアップ
wp core install --url=http://example.com/ --title=test --admin_user=wordpress_user --admin_password=password --admin_email=test@example.com

以上でWordPressのインストール自体は完了です。
続いてはプラグインインストールやテーマファイルの有効になります。

細かな設定

プラグイン関連

## WordPressプラグイン公式サイトから最新のバージョンがインストールされます
wp plugin install contact-form-7
## インストールと同時に有効化する
wp plugin install contact-form7 --activate
## プラグインのuninstall
wp plugin uninstall contact-form-7

versionオプションを指定する事でdevelopmentバージョンのプラグインをインストールすることや、公式で配布されていないプラグインもURLやパスを指定することでインストール可能だそうです。

インストールしたいプラグインを検索するには、plugin search コマンドを使用します

wp plugin search

参考 : WP-CLI wp plugin

余談ですが、私の場合Capistranoと組み合わせているので下記のように使っています。

deplory.rb
task :plugin_setup do
    on roles(:web) do
        within deploy_to do
            %w{contact-form7 flamingo wordpress-importer wp-members google-sitemap-generator}.each do |plugin|
                plugin_install = capture(:wp, "plugin install #{plugin} --activate")
                info plugin_install
            end
            # デフォルトでインストールされるhelloプラグイン削除
            %{hello}.each do |plugin|
                plugin_uninstall = capture(:wp, "plugin uninstall #{plugin}")
                info plugin_uninstall
            end
        end
    end
end

テーマ関連

wp theme enable twentyeleven

plugin コマンドと同様なことが可能です。

参考 : WP-CLI wp theme

xmlファイルのインポート

wp import wordpress.xml --authors=create

参考 : WP-CLI wp import

パーマリンクの設定

wp rewrite structure '%postname%'

参考 : WP-CLI wp rewrite

ウィジェット関連

WordPressインストール時には、デフォルトで検索や最近の投稿などがセットされていますがコマンドで削除することができます。

## 特定のウィジェットに登録されているものを表示
wp widget list sidebar-1
+-----------------+-------------------+----------+------------------------------------------------------+
| name            | id                | position | options                                              |
+-----------------+-------------------+----------+------------------------------------------------------+
| search          | search-2          | 1        | {"title":""}                                         |
| recent-posts    | recent-posts-2    | 2        | {"title":"","number":5}                              |
| recent-comments | recent-comments-2 | 3        | {"title":"","number":5}                              |
| archives        | archives-2        | 4        | {"title":"","count":0,"dropdown":0}                  |
| categories      | categories-2      | 5        | {"title":"","count":0,"hierarchical":0,"dropdown":0} |
| meta            | meta-2            | 6        | {"title":""}                                         |
+-----------------+-------------------+----------+------------------------------------------------------+
## 必要のないものを削除
wp widget delete sidebar-1 search-2
## 使用停止中のウィジェットに登録
wp widget deactivate search-2

個人設定関連

個人設定を変更するには option コマンドを使用します。

  • ビジュアルリッチエディターを無効にする
wp option update rich_editing false
  • サイトを見るときにツールバーを非表示する
wp option update show_admin_bar_front false
  • 管理画面の色を変更する
wp option update admin_color light
  • パーマリンクの変更2つ目?
wp option update permalink_structure /%postname%/

などなど、スクリーンショット 2014-10-05 16.45.27.png
テーブルのmeta_keyで検索を行い、meta_valueをupdateします

その他

WP-CLIは、WordPressのインストールや変更だけを行うコマンドではありません。
wp scaffold コマンドで、スターターテーマや、カスタム投稿タイプ、カスタムタクソノミーのソースコードを生成することが可能です。

  • スターターテーマ作成

_sというWordPressのスターター・テーマを使い、オリジナルのテーマ開発を行う事が出来ます。

## origin というテーマファイルを作成する
wp scaffold _s origin
├── 404.php
├── README.md
├── archive.php
├── comments.php
├── content-none.php
├── content-page.php
├── content-search.php
├── content-single.php
├── content.php
├── footer.php
├── functions.php
├── header.php
├── inc
├── index.php
├── js
├── languages
├── layouts
├── page.php
├── rtl.css
├── screenshot.png
├── search.php
├── sidebar.php
├── single.php
└── style.css

作成されるテーマファイルはこのような中身になります。

  • カスタム投稿タイプ

カスタム投稿タイプのソースコードを生成できます。

## news というカスタム投稿タイプを標準出力に表示します
wp scaffold post-type news
<?php

function news_init() {
        register_post_type( 'news', array(
                'labels'            => array(
                        'name'                => __( 'News', 'YOUR-TEXTDOMAIN' ),
                        'singular_name'       => __( 'News', 'YOUR-TEXTDOMAIN' ),
                        'all_items'           => __( 'News', 'YOUR-TEXTDOMAIN' ),
                        'new_item'            => __( 'New news', 'YOUR-TEXTDOMAIN' ),
                        'add_new'             => __( 'Add New', 'YOUR-TEXTDOMAIN' ),
                        'add_new_item'        => __( 'Add New news', 'YOUR-TEXTDOMAIN' ),
                        'edit_item'           => __( 'Edit news', 'YOUR-TEXTDOMAIN' ),
                        'view_item'           => __( 'View news', 'YOUR-TEXTDOMAIN' ),
                        'search_items'        => __( 'Search news', 'YOUR-TEXTDOMAIN' ),
                        'not_found'           => __( 'No news found', 'YOUR-TEXTDOMAIN' ),
                        'not_found_in_trash'  => __( 'No news found in trash', 'YOUR-TEXTDOMAIN' ),
                        'parent_item_colon'   => __( 'Parent news', 'YOUR-TEXTDOMAIN' ),
                        'menu_name'           => __( 'News', 'YOUR-TEXTDOMAIN' ),
                ),
                'public'            => true,
                'hierarchical'      => false,
                'show_ui'           => true,
                'show_in_nav_menus' => true,
                'supports'          => array( 'title', 'editor' ),
                'has_archive'       => true,
                'rewrite'           => true,
                'query_var'         => true,
        ) );

}
add_action( 'init', 'news_init' );

function news_updated_messages( $messages ) {
        global $post;

        $permalink = get_permalink( $post );

        $messages['news'] = array(
                0 => '', // Unused. Messages start at index 1.
                1 => sprintf( __('News updated. <a target="_blank" href="%s">View news</a>', 'YOUR-TEXTDOMAIN'), esc_url( $permalink ) ),
                2 => __('Custom field updated.', 'YOUR-TEXTDOMAIN'),
                3 => __('Custom field deleted.', 'YOUR-TEXTDOMAIN'),
                4 => __('News updated.', 'YOUR-TEXTDOMAIN'),
                /* translators: %s: date and time of the revision */
                5 => isset($_GET['revision']) ? sprintf( __('News restored to revision from %s', 'YOUR-TEXTDOMAIN'), wp_post_revision_title( (int) $_GET['revision'], false ) ) : false,
                6 => sprintf( __('News published. <a href="%s">View news</a>', 'YOUR-TEXTDOMAIN'), esc_url( $permalink ) ),
                7 => __('News saved.', 'YOUR-TEXTDOMAIN'),
                8 => sprintf( __('News submitted. <a target="_blank" href="%s">Preview news</a>', 'YOUR-TEXTDOMAIN'), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
                9 => sprintf( __('News scheduled for: <strong>%1$s</strong>. <a target="_blank" href="%2$s">Preview news</a>', 'YOUR-TEXTDOMAIN'),
                // translators: Publish box date format, see http://php.net/date
                date_i18n( __( 'M j, Y @ G:i' ), strtotime( $post->post_date ) ), esc_url( $permalink ) ),
                10 => sprintf( __('News draft updated. <a target="_blank" href="%s">Preview news</a>', 'YOUR-TEXTDOMAIN'), esc_url( add_query_arg( 'preview', 'true', $permalink ) ) ),
        );

        return $messages;
}
add_filter( 'post_updated_messages', 'news_updated_messages' );

オプションを付ける事でテーマファイルやプラグインフォルダに保存することも可能です。

wp scaffold pos-type news --theme=originaltheme

デフォルトでは、メッセージも生成されますがオプションでregister_post_type()だけに限定することも可能です。

参考 : WP-CLI wp scaffold post-type
参考 : Codex register_post_type

他にも子テーマや、プラグインのPHPUnitを実行する為に必要なファイルなども作れるそうです。

参考 : WP-CLI wp scaffold

WP-CLIは、まだまだ設定できることがあります。
最近では、wp-cronなどの設定もできるそうです、これからもちょくちょく更新できたらと思います。
他のツールと組み合わせる事でWordPressのセットアップ作業をより簡単に行う事が出来ると思います。皆さんも使われてみてはいかがでしょうか。