カテゴリー別アーカイブ: WordPress

WordPress プラグインで使う定数値はヘッダ部分で管理して get_file_data() で取得すると良いと思うけど、どんなもんでしょう

えー、タイトルの通りなんですが WordPress でプラグイン開発している時に非常に便利な関数として get_file_data() ってのがあります。
いま、久しぶりに Codex みたら、ほとんど説明を放棄してますね。
最近出た WordPressプラグイン開発のバイブルっていう本でちらっと触れておいたので、そこから引用します。

$plugin_data = get_file_data( __FILE__, array( 'version' => 'Version'));
$plugin_version = $plugin_data['version'];

プラグインやテーマのヘッダー情報を取得するには get_file_data() 関数を使用します。
プラグインの冒頭にはコメント形式でプラグイン名やバージョン、テキストドメインがヘッダー情報として書かれています。
たとえば、プラグインのバージョン情報をこちらから読み出し、wp_enqueue_script() 関数で JavaScript のバージョン情報を変更したり、翻訳ファイルのテキストドメインやドメインパスなどを取得して load_textdomain() 関数で翻訳ファイルを読み込むときに使用できると思います。
プラグインのヘッダー情報を使って一元管理ができるため、ソース中にハードコードする必要がなくなります。
また、他のプラグインやテーマのバージョンに依存するような処理を書きたい場合にも使えるでしょう。

WordPress に最初からついてくるプラグイン Hello Dolly のメタ情報を取得した結果は以下の通りです。

$data = get_file_data( ABSPATH.'wp-content/plugins/hello.php',
	array( 'name' => 'Plugin Name',
		'version' => 'Version',
		'uri' => 'Plugin URI',
		'description' => 'Description',
		'author' => 'Author',
		'author_uri' => 'Author URI',
		'textdomain' => 'Text Domain',
		'textdomain_path' => 'Domain Path',
	));
var_dump($data);
array(8) {
  ["name"]=>
  string(11) "Hello Dolly"
  ["version"]=>
  string(3) "1.6"
  ["uri"]=>
  string(41) "http://wordpress.org/plugins/hello-dolly/"
  ["description"]=>
  string(295) "This is not just a plugin, it symbolizes the hope and enthusiasm of an entire generation summed up in two words sung most famously by Louis Armstrong: Hello, Dolly. When activated you will randomly see a lyric from <cite>Hello, Dolly</cite> in the upper right of your admin screen on every page."
  ["author"]=>
  string(14) "Matt Mullenweg"
  ["author_uri"]=>
  string(13) "http://ma.tt/"
  ["textdomain"]=>
  string(0) ""
  ["textdomain_path"]=>
  string(0) ""
}

実は、この get_file_data() 関数なんですが、WordPress プラグインの規定のヘッダ情報だけでなく、独自にセットした情報も取ってくることができるんです。
続きを読む

WordPress でデータ連係するときのスニペット

実は、今夏にSBクリエイティブさんから発売される予定の「WordPress Plugin 本(タイトル仮)」を宮さん西川さん三好さん達と書いてました。
宮さんはすでにリーク済みですね。
管理画面におけるエラーメッセージの表示 | firegoby

僕が担当したのは、17章目の「プラグインクックブック」がメインになります。
ここでは WordPress プラグイン作成時に使ってるコードをサンプルコードとして提示して、それを説明するって感じで書いてます。
編集の人にも「一部公開しても良いよー」って言われたので、一部を公開しますね。

続きを読む

2013年の人気記事トップ10

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

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 スクリプトを書いて対応しました。
続きを読む

WordPress with HyperDB

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 をダウンロードして、上書きしてやればいいだけですが
# あと、他のプラグイン・テーマでも、このエラーが発する可能性がありますし
続きを読む