2013年の人気記事トップ10

昨年一昨年 に引き続き、今年も dogmap.jp でこの1年で良く読んでもらった記事をあげてみます。
去年同様、ページビュー上位10記事だと1番アクセスがあったのは、去年どころか2009年のこの記事になっちゃうんですが、2013年に書いた記事と、去年のランキングに入っていない 2012年に書いた記事にしぼって10件ほど。
続きを読む

Monit でプロセス監視 ( WordPress Advent Calendar 2013 全部オレ 20日目 )

WordPress Advent Calendar 2013 全部オレ 20日目のできる限り俺です。

WordPress を運用するサーバでは、Nginx や Aapche などの Web サーバ、MySQL、fastcgi を使っているのならば php-fpm などのプロセスが稼働しています。
夜中だとか旅行中にこれらのプロセスが落ちてしまうとサイトに繋がらなくなってしまうこともあります。
そういった障害を検知し、復旧するための様々な障害検知を行うツールが存在するのですが、今回は Monit の紹介をしようと思います。
これはプロセスを監視して異常を検知したらメールを出したり、自動的に再起動したりしてくれる便利なツールです。
続きを読む

WordPress の管理画面を IP アドレスで制限する

WordPress の管理画面を IP アドレスで制限することは Brute Force Attack に対して有効です。
たとえば Nginx を使っている場合、以下のような設定で許可された IP アドレス以外からのログインを拒否することができます。

server {
  location /wp-admin {
    allow 192.168.0.1;
    deny all;
     :
  }

  location = /wp-admin/admin-ajax.php {
    allow all;
     :
  }
 
  location = /wp-login.php {
    allow 192.168.0.1;
    deny all;
     :
  }
}

また、IP アドレスによるログイン制限を行うプラグインもいくつかあるようです。

ただし、これらの方法だとリバースプロキシ配下のサーバの場合、期待した動作になりません。
# リバースプロキシサーバからは、実際にアクセスしてきたクライアントの IP アドレスは http ヘッダ X-Forwarded-For にセットされて来るため

そこで、簡単な PHP スクリプトを書いて対応しました。
続きを読む

HyperDB でお手軽に WP の MySQL サーバを複数分散

WordPress で DB サーバを分散処理したいとか思ったことありませんか?
以前、MariaDB Galera Cluster を使って DB サーバをクラスター構成にする方法を解説しました。
しかし、ここではもっと簡単に MySQL のマスター/スレーブ構成によるレプリケーション機能を使って読み込み先と書き込み先の DB を分ける手法について解説します。
Amazon RDS のリードレプリカ機能を使えば、WordPress のプラグイン(正確にはドロップイン)を設置して、ちょっと設定するだけですが、ここでは一応 MySQL でマスター/スレーブ構成のレプリケーションする方法についても解説します。

構成は、上のアイキャッチのような感じです。
続きを読む

Varying Vagrant Vagrants で WP 開発環境を手に入れる

Vagrant 流行ってますね。
ローカル環境での WordPress の開発でも使用できるので、どんどん使用しましょう。
WordPress のローカル環境で Vagrant を使うのであれば 10up 社が提供してくれている Varying Vagrant Vagrants (VVV) を利用するのが便利です。
インストールするには、以下の URL を参考にすれば良いんですが、ついでなんでやりかた書いておきます。
10up/varying-vagrant-vagrants

前提として git が使用できるようになってないと何もできません。
Mac 環境であれば Xcode 入れて、Homebrew 入れて brew install git して git をインストールしておきましょう。
インストール方法は、そこら中に書いてあるので、ここでは割愛します。
Xcode インストールしただけでも git が付属していますが、Xcode 同梱の git は ver.1.7.x系と古いので、brew から git をインストールした方が幸せになれます。

続きを読む

「Google Maps Anywhere」から「Simple Map」へ移行

私の作ったプラグイン「Google Maps Anywhere」はメンテナンスを停止しています。
Google Maps API ver.2 までしか対応していないため、ver.3 に対応した「Simple Map」プラグインへの移行をお勧めします。
Simple Map の説明については、みやさんのブログを参考にしてください。
Simple Map – 超簡単&スマフォ対応のGoogle Map | firegoby

この二つのプラグインはショートコードで Google Maps を表示するという同機能を持っています。
パラメータに着いても互換性がありますが、ショートコードタグが異なりますので、過去記事に Google Maps Anywhere で埋め込まれたショートコードを書き換えてあげる必要があります。
続きを読む

コマンドラインから WordPress を操作する wp-cli 初級編

WordPress 3.6.1 が出たので、記念に wp-cli の紹介。(なんの記念だ)
wp-cli は、WordPress への各種の操作(本体のインストール・アップデートから plugin、theme のインストール・アップデートまで、すべてのことが!)をコマンドラインから行えるようにするツールです。

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

これだけで ~/.wp-cli/bin/wp というコマンドが使えるようになります。
wp-cli が正常にインストールできたか確認するには、以下のコマンドで確認できます。

# ~/.wp-cli/bin/wp --info
PHP binary:	/usr/bin/php
PHP version:	5.4.19
php.ini used:	/etc/php.ini
WP-CLI root:	/root/.wp-cli/vendor/wp-cli/wp-cli
WP-CLI config:	
WP-CLI version:	0.11.2

インストール後にディレクトリ名つけないで使えるように .bash_profile 等を修正して PATH を通してあげてください。

PATH=${PATH}:${HOME}/.wp-cli/bin

続きを読む

WordPress フィードで pre_get_posts の posts_per_page は使えない

タイトルで言い切ってますが
WordPress のフィードで表示件数をダッシュボードで入力された値では無く、他の値に変更しようとしてハマったのでシェア。

通常 WordPress で表示件数を変更する場合は、pre_get_posts アクションフックを使って以下のように posts_per_page オプションを指定してやります。
codex にも書いてあるので、これで安心のはずです。

<?php
function my_pre_get_posts( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_home() ) {
        // Display only 1 post for the original blog archive
        $query->set( 'posts_per_page', 1 );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts', 1 );

これをフィードの時にのみ変更しようとして、以下のようなコードを書いたけど、期待通りに表示件数が変更されませんでした。

<?php
function my_pre_get_posts_for_feed( $query ) {
    if ( is_admin() || ! $query->is_main_query() )
        return;

    if ( is_feed() ) {
        // Display 50 posts for the feed
        $query->set( 'posts_per_page', 50 );
    }
}
add_action( 'pre_get_posts', 'my_pre_get_posts_for_feed', 1 );

続きを読む

「Fatal error: Call-time pass-by-reference has been removed」の対処

PHP 5.4 にアップデートした際に古いバージョンの WP Multibyte Patch を使っていると、以下のようなエラーが表示されることがあります。

Fatal error: Call-time pass-by-reference has been removed in /path/to/wordpress/wp-content/plugins/wp-multibyte-patch/ext/ja/class.php on line 74

このエラーの対処法について説明します。

ちなみに最新バージョンの WP Multibyte Patch では、このエラーは発生しないのでアップデートすれば良いだけなのですが、「対処しないと WP のダッシュボードに入れないんよ」っていう人を想定して書いてます。
# まぁ、最新の WP Multibyte Patch をダウンロードして、上書きしてやればいいだけですが
# あと、他のプラグイン・テーマでも、このエラーが発する可能性がありますし
続きを読む

WordPress で二段階認証を可能にするプラグイン「魍魎」

魍魎WordPress で、メールまたは SMS でワンタイムパスワードを発行して二段階認証ができるようにするプラグイン「魍魎」を公開しました。
絡新婦」「狂骨」に続く、日本の妖怪シリーズ第三弾です。
現在、公式プラグインディレクトリに申請中ですので、気になる方は github のリポジトリから取得してください。
https://github.com/wokamoto/spirits-and-goblins

追記: 2013-06-24
WordPress 公式プラグインディレクトリでも公開しました。
Spirits and Goblins

インストールして有効化すると、通常のログイン後にユーザのメールアドレス宛に送信されたワンタイムパスワードを入力しないとダッシュボードに入れなくなります。
送信オプションとしてはメールと SMS (ショートメッセージ) が選択できます。
「ショートメッセージ」を使用するには Twilio への登録を行い、設定画面で「Twilio sid」「Twilio token」「Twilio phone number」を取得する必要があります。
KDDI 版 Twilio は、日本語化されててとても嬉しいのですが、残念ながらまだ SMS に対応していないので注意してください。早く対応してくれないかなー。
また、ユーザープロフィール画面に追加される「国」と「携帯電話番号」欄にも登録してください。
続きを読む