ジャンル別」カテゴリーアーカイブ

WordPress JSON REST API に独自の endpoint を追加する

先日、参加してきた WordCamp San Francisco 2014 でも話題になってた WP JSON REST API に独自の endpoint を追加する方法です。
# WordCamp San Francisco とか WordCamp Kansai とかのイベントにも参加してるんですけど、ブログ書いてないすいません

まず WP REST API とは、なんぞやって話ですが
これは、WordPress Ver.4.1 もしくはそれ以降のバージョンで本体に組み込まれる予定の機能です。
現在はプラグインとして提供されていますので、これをインストールすることで利用できるようになります。
WordPress › JSON REST API (WP API) « WordPress Plugins
この API を使うことで、WordPress に関するありとあらゆる操作が REST API 化され、結果が JSON で返ってきます。
例えば、この投稿に関する情報は以下の URL から取得できます。
https://dogmap.jp/wp-json/posts/3136

この API に対して独自の endpoint を追加する方法について解説します。
詳しいことは、以下の URL を参照してください。
Extending the API – WP REST API Documentation
続きを読む

WordPress プロフェッショナル養成読本

WordPress プロフェッショナル養成読本」という本を、@naokomcさん、@428designさん、@masatoshisomeyaさんとかと一緒に書きました。
と言っても、例のごとく出版社の人とは一度も会ったこと無いんですけどね。
もっぱら、やりとりはメールか Facebook だけ。現行の入稿も技評さんの GitLab サーバへの push で送るというリモートワークっぷり。
まったく良い時代になったもんです。
WordCamp Tokyo 2014 の会場内で先行販売されるようですので、そちらに行く予定のある人はぜひー

さて、僕が書いたのは第6章「WordPress ユーザのための Nginx 入門」って所です。
仕事でよく使う Nginx をネタにしてインストールから設定まで、はじめて Nginx 触る人でもなんとか WordPress を動かせるようにするところまではサポートしてるはずです。
(若干、駆け足気味ですが)

以下、僕の章の目次

  • Nginx とは? – Nginx のサーバ構成や特徴
  • Nginx で WordPress を利用するには – インストールと設定
  • Nginx の設定(基本編) – WordPress の運用に役立つ
  • Nginx の設定(応用編) – リバースプロキシ、ロードバランサ

続きを読む

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 プラグイン作成時に使ってるコードをサンプルコードとして提示して、それを説明するって感じで書いてます。
編集の人にも「一部公開しても良いよー」って言われたので、一部を公開しますね。

続きを読む

GitLab を Amazon Linux にインストールする

オープンソースの Git リポジトリ管理システム GitLab を Amazon Linux にインストールしたので、手順をメモ。
といっても、ほとんど以下の URL を参考にしたので、ここではインストール時に引っかかった注意点など
Amazon Linux 2013.09 に GitLab6.1 をインストール – OTメモ帳

ところで digitalcube って会社では、様々なプロダクトがインストール済みの AMI を AWS Marketplace で公開してるんだけど、ここでも GitLab が公開されてるから、インストールが面倒な人はそこから起動した方が良いと思うよ(ステマ)。
AWS Marketplace: Search Results

GitLab も、今日公開されたし – GitLab on AWS Marketplace
Marketplace 版の GitLab は、初期アカウントは admin@local.host でパスワードは起動したインスタンスのインスタンスIDになってます。
GitLab の起動に時間がかかるので、最初 503 ステータスが返ってくるかもだけど、ちょっと待ってから再試行すれば GitLab のログイン画面が表示されるので、試してみてください。

続きを読む

ストリーミングファイルだけ他のサーバから配信する

動画ファイルの配信だけ Web サーバ本体では無くて、別のサーバから配信したいけど WordPress とかいじりたくなかったので Nginx だけいじって対応しましたよってお話です。
いわゆるオレオレCDN( Nginxを使ったオレオレCDNの構築 )ですな。

構成的には上図のようになります。
要望的には html とか css, js, なんかは web サーバから配信したいんだけど、ネットワーク帯域を消費しまくる動画ファイル ( mp4, webm, ogv, flv ) だけは別サーバで配信したい。
素早く対応したいから WordPress のプラグインとか作らないで、Nginx の設定だけで済ませたいって感じです。

どうやって実現したかというと
続きを読む

Amazon Linux でのソースの入手と再ビルド

気がついたら 1, 2 月はブログ書いてませんでした。
Amazon Linux 上の suexec のホームディレクトリを変更したくて rpm のソース取ってこようとしたんだけど yumdownloader でソースを取って来ることができなかったんで、自分用のメモ。
Amazon Linux で rpm のソースを取ってくるには yumdownloader ではなくて get_reference_source コマンドを使うんですってよ奥さん。
参考: SIOS "OSSよろず" ブログ出張所: ソースの入手と再ビルド ~ Amazon Linux AMI (EC2) 編
注意: 上記 URL だと --aws-account-id=XXXX-XXXX-XXXX っていうパラメータが必要って書いてあるけど、いまは要らないようです。

以下、手順
続きを読む

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