タグ別アーカイブ: WordPress

WordPress サイトを CloudFront で配信すると compress オプションを設定していても圧縮転送されない…

タイトルで言い切ってますが

CloudFront の「Compress Objects Automatically」ってオプションを有効にすると、対応しているブラウザに対しては圧縮転送をしてくれるはずなんですが、オリジンサーバが WordPress の場合、これが有効になりません。
css とか js なんかの静的ファイルはちゃんと圧縮してくれてるんですが

調べたところ、CloudFront で compress オプションが有効になるには、以下の条件があるようです。

  • The file must be of a type that CloudFront compresses.
  • The file size must be between 1,000 and 10,000,000 bytes.
  • The response must include a Content-Length header so CloudFront can determine whether the size of the file is in the range that CloudFront compresses. If the Content-Length header is missing, CloudFront won't compress the file.
  • The response must not include a Content-Encoding header.

Serving Compressed Files – Amazon CloudFront

これの「The response must include a Content-Length header so CloudFront can determine」が引っかかってるんですね
続きを読む

WordPress にバックドア仕掛けられないように…

いくら気をつけていても、不幸にして WordPress にバックドアを仕掛けられることは往々にしてあるものです。
重要なのは日々のアップデートと監視なのですが、間に合わずにやられちゃってバックドア仕掛けられることもあるでしょう。
先日リリースされた WordPress 4.5.2 でも結構重めの XSS 脆弱性の報告と修正が行われましたね。
WordPress 4.5.2 セキュリティリリース

そんなわけで、ひさ~しぶりのブログはバックドア仕掛けられないようにする防衛策とソースが改変された時の対応策です。
続きを読む

WordPress の前段に CloudFront を配置する ( AMIMOTO Advent Calendar 2015 12日目 )

AMIMOTO Advent Calendar の12日目です。
アイキャッチ画像は Cloudcraft で作ってみました。カコイイ!

WordPress の前段に CloudFront を置きたいことってありますよね。
そんな時、以下の様な問題に直面するかと思われます。

  • ログイン時はプレビュー画面とか、即座に変わるようにキャッシュさせたくない
  • Nginx のログファイルに CloudFront の IP アドレスではなく、アクセスしてきた PC の IP アドレスを記録したい
  • モバイル版とPC版でテーマを切り替えたいんだけど
  • publish したときにちゃんと反映されるようにキャッシュ消したい

今日は、これらのお悩みを解決しちゃおうかなって感じです。
続きを読む

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 プラグイン開発のバイブル

私が執筆した WordPress 関係の本としては二冊目となる「WordPressプラグイン開発のバイブル」が 7/22 に発売されました。
これは 宮さん西川さん三好さん達との共著になります。

以下に序文を引用します。

WordPressは世界の7,000万サイト以上で使用されており、CMSシェアにして60%にもなる、世界で最も多く使用されているCMSです。
このWordPressのシェアを支えるもっとも大きな要因の1つは、WordPressがオープンソースであるからです。
インターネットの豊かさを支えるものはコンテンツです。
世界中の数々の良質なコンテンツが現在のインターネットの豊かさを形成しており、現在もめざましいスピードで進化しています。
そして、サーバーやミドルウエア、そしてWordPressのようなCMSは、これらのコンテンツをささえるための縁の下の力持ちでしかありません。
しかし、良質なコンテンツを作るには優れたツールが必要で、それらのツールの開発には、膨大なコストが必要です。
そういったコスト負担を分担しあおうという考え方から、私たちのウェブ業界はオープンソースという考え方を取り入れ、積極的に活用するようになりました。
そうした背景の中で、優れたツールが生まれ、それを土台にしてさらに良質なコンテンツが生まれているのが、現在のインターネットです。
さらにいえば、WordPressが採用するライセンスはGPLです。
このGPLライセンスは、ユーザーに対して自由を保証することを主目的としたライセンスであり、ユーザーは利用規約やライセンス条項などを気にすること無く自由な目的に使用することができます。
WordPressはGPLを採用しているからこそ、現在のシェアを獲得していると私たちは考えています。
そんな中で、日本においては、毎月と言ってもいいほどのたくさんのWordPress関連書籍が発売され、イベントやセミナーなども全国各地で毎週のように開催されています。
WordPressコミュニティが開催する公式なイベントWordCampには毎回1000名を超えるほどの参加者が集まるようにもなってきました。
しかしながら、日本国内においてこれらの書籍やイベントがターゲットとする層のほとんどが単なるWordPressユーザーであり、開発者をターゲットとしたものがほとんどありません。
世界中のエンジニアが自らの成果物を無償で公開しだれでも利用可能にするのはなぜでしょうか?
そこには何らかのメリットや意図がかならずあるはずです。
本書は、日本で初めてとも言える開発者をターゲットとしたWordPressの専門書です。
私たちは本書をとおして、開発者からみたオープンソースのメリットをみなさんと共有していきたいと考えています。
そのため、これまでのWordPress本で紹介されてきたようなググれば分かる内容の解説には、それほど重きをおいていません。
それらはWordPressのバージョンアップなどによりすぐに陳腐化していく内容だと私たちは考えており、もっと普遍的な内容を取り扱っていきたいと考えてきました。
たとえば、本書で紹介されているセキュリティ対策やエラー処理は、みなさんが開発するプラグインの信頼性を向上にすくなからず貢献できるはずです。
コーディングスタンダードやPHPunitを使用したテスト方法は、プラグインのメンテナンス性を向上させるための手助けとなります。
WP-CLIやGruntなどのサードパーティーのツールや、Vagrantなどの開発環境は、開発におけるワークフローを劇的に改善するでしょう。
公式ディレクトリへの登録方法や国際化などは、みなさんに世界への扉を開くことになるはずです。
もちろん、WordPress APIにつきましても、極力たくさん網羅できるように努力しました。
日本国内においてはWordPress開発者が十分に多いとはいえません。
本書の重要なターゲットは、既存のWordPressユーザーというよりもWordPressを使ったことがないPHP開発者です。
ある程度経験を積んだプログラマーなら、目次をさっとみただけで、必要なキーワードが手に入ることを目指して書いてきたつもりです。

続きを読む

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