サイトの拡張性を飛躍的に高める「WordPressプラグイン開発のバイブル」

Rewrite APIその2 WordPressでアプリを作る基本(WordPressプラグイン開発のバイブルのボツ原稿から)

WordPressプラグイン開発のバイブルという本がありまして、大絶賛大好評販売中なのですが、ボツ原稿を載せていくシリーズの、Rewrite APIの第二弾です。

書籍のご購入はこちらから。

前回の記事は、Rewrite APIその1 「Rewriteとパーマリンク」(WordPressプラグイン開発のバイブルのボツ原稿から)です。

前回のまとめをさくっと言いますと、WordPressにはパーマリンクという機能があり、カテゴリや日付、ポストIDやpostnameなどを組み合わせて、URLの構造を設定できますが、その機能はウェブサーバーのリライト機能とWordPressのリライト機能が組み合わさって実現されているということでした。

このことは、WordPressプラグイン開発のバイブルの中の第六章「WordPressのデータ構造とクエリを理解する」という章の中でも詳しく解説されていますので読んでみてくださいね。

Rewrite APIを利用することでWordPressをブログでもCMSでもなくアプリケーションプラットフォームとして活用する方法の第一歩でございますですよ。

では、以下、コピペになります。前回同様、校正前のものになります。誤字脱字、間違いはご連絡くださいな。

続きを読む

↓ プラグインを作る方々への本、書きました。 ↓

サイトの拡張性を飛躍的に高める「WordPressプラグイン開発のバイブル」

Rewrite APIその1 「Rewriteとパーマリンク」(WordPressプラグイン開発のバイブルのボツ原稿から)

WordPressプラグイン開発のバイブルという本がありまして、大絶賛大好評販売中なのですが、ボツ原稿を載せていきたいと思います。

ご購入はこちらから。

WordPressにたくさんあるAPIのうち、Rewrite APIを取り上げます。ここは、大幅に簡略化したところでして、ものすごく長いのでシリーズ物にしたいと思います。Rewrite APIはWordPressをアプリケーション・プラットフォームとして利用する際にとても便利なものですので、WordPressを使ってアプリを作るぞ!みたいな方々のお役に立てると思います。

第一弾はRewrite APIの前提となる「Rewriteとパーマリンク」の関係についてです。それでは、以下、ボツ原稿です(校正をするまえにボツになったので間違いも含むかもしれません。一応チェックはしました)。

次回は、デフォルトの状態のリライトを拡張して、WordPressをアプリとして動かすための便利関数について紹介します。

続きを読む

↓ プラグインを作る方々への本、書きました。 ↓

pbook-hangout-1

『WordPressプラグイン開発のバイブル』のGoogleHangouts番組を始めました

『WordPressプラグイン開発のバイブル』という本が出ました。

Amazon.co.jp: サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル

著者陣+ゲストでお届けするオンラインのイベントを週に一度のペースでやっていくことになりました。

第一回目は、宮内さんと三好さんと一緒に、GPL、ビジネスモデルなんかの話をしました。録画もあります。

GPLとビジネスモデルの話

pbook-hangout-1

今までに国内で出ているWordPress関連の書籍で、ライセンスの話やビジネスモデルの話の話について書かれているものは、僕が把握している限りなかったと思います(あったら教えてください)。

その理由はまあ色々あるとは思うのですが、その書籍が開発者向けなのか、ユーザー向けなのかというところにあるような気がします。WordPressを使っている人には、本当にいろいろな人がいて、

続きを読む

↓ プラグインを作る方々への本、書きました。 ↓

ec2にs3をマウントしてrsyncした時のメモ

EC2 に S3 のバケットをマウントして、rsync でバックアップをとるのを試してみているのでメモ。

ec2 に s3 をマウントする

Amazon S3 編。S3 バケット を マウント する方法 | EC2 S3 マウント ファイルシステム | ナレコムAWSレシピ

と、

Amazon S3編~S3バケットをファイルシステムとしてマウントしてみよう!~ EC2 S3 s3fs マウント | ナレコムAWSレシピ を参考にしました。

少し困ったのは、アクセスキーとシークレットキーのところ、 IAM という認証の仕組みを使う点で、上記のリンクの説明と違っていたことでした。 IAM については、 IAM とは? – AWS Identity and Access Management に説明も動画もありますが、 AWS アカウント内の限られた権限を持つユーザーを作成して、認証を行うことができるようにするためのサービスです。

今回は、 ec2 サーバ内に S3 関連の操作のみができる IAM ユーザーの認証情報を保存しています。

マウント自体は、 s3fs を利用すると簡単でした。上記のリンクにやり方が書いてあります。インストールするバージョンは、 Downloads – s3fs – FUSE-based file system backed by Amazon S3 – Google Project Hosting で最新のバージョンが確認できました。

rsync してみるとすごく遅かった

rsync でバックアップをしてみたところ、とても遅かったです。vi でファイルを作成して書き込み、保存するのにもレスポンスに1秒ずつか、もうちょっと時間がかかる感じでした。

そこで、ssh での接続が切れたり、ログアウトしたりしたあとも処理を続けてくれるように ログアウトした後もプログラムの処理を続ける?(コマンド実行時にnohup) を参考にしました。

nohup rsync -av /var/www/vhosts/i-nskw/ /mnt/s3/backup/ &

最初はファイルが多いのですが、今後は差分だけなので、今後は毎晩、

  1. マウントする
  2. 必要なデータベースのダンプファイルを作成してどこかに保存
  3. 必要なディレクトリのrsync
  4. マウント解除する

というのをやってくれるのを作ろうと思います。

↓ プラグインを作る方々への本、書きました。 ↓

スクリーンショット 2014-07-24 16.22.59

WordPressの機能を使って外部サイトのRSSからコンテンツを持ってきて表示する2つの方法

複数のサイトを管理していて、AというサイトにBやCのサイトのコンテンツを表示したいということがありますよね?そうした場合に、AがWordPressであれば、わりと簡単に実現できますのでその方法を書きます。

2つ方法がありまして、2つとも簡単です。

ひとつは、SimplePie というパーサー(Parse≒構文解析)がWordPressのコアに同梱されているので、それを利用する方法です。

もうひとつは、WordPressの内部APIのひとつであるHTTP APIを使う方法です。

このように、WordPressはいろいろな機能を持っており、そうしたことを知っていれば、今までよりも難しいことができたり、同じものを作るのにも、時間を節約したり確実性を上げたりということが可能です。

こうした、WordPressの力を最大限に活かす方法については、『サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル』に詳しく書かれていますので買いましょう!

1. Simple Pieを利用する方法

2行目のfeedurlには、RSSのURLを入れます。
そして、WordPressの関数、fetch_feed()に渡すことで、アイテムを取得してくれますので、ループで表示を行います。

include_once( ABSPATH . WPINC . '/feed.php' );
$feeduri = 'http://example.com/feed/uri/here';

$rss = fetch_feed( $feeduri );

if ( ! is_wp_error( $rss ) ):

	$maxitems = $rss->get_item_quantity( 4 ); // 4件表示
	$rss_items = $rss->get_items( 0, $maxitems );

endif;

if ( !$rss_items ):
	echo '<p><a href="http://example.com/" target="_blank">おもしろブログだよ。読みに来てね&#9825;</a></p>';
else:
	 foreach ( $rss_items as $i ) {
		 ?>
		 <li><a href="<?php echo esc_url( $i->get_permalink() ); ?>"><?php echo esc_html( $i->get_title() ); ?></a></li>
		 <?php
	 }
endif;

この方法を使えば、simplexml_load_file()などの関数を使ってエラーの想定をしたりなどはしなくても大丈夫です。

また、外部サイトへのアクセスと情報の取得は毎回行っていると表示も遅くなりますし、よそのサイトにも迷惑になりますが、この方法であればデフォルトで12時間キャッシュしてくれます。キャッシュの時間の変更は、フックを通して行います(過去に書いています)。

ん?フックってなんだ?という方は、『サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル』に詳しく書かれていますので買いましょう(二度目)!

2. HTTP APIを利用する方法

次の方法です。

WordPressのHTTP APIというのは、外部サイトとの通信を助けてくれるものと理解すれば大丈夫だと思います。

WordPressは色々な環境にインストールされる上に、情報をとりにいく外部のサイトの環境も違います。相手側のサーバーによっては、通信できる方法が限られていたりもします。そうした外部サイトとの通信を行う際に問題になる(面倒くさい)色々な問題を、まるっと任せてしまうことができます。

今回は、一番シンプルだと思われる、wp_remote_get()関数を使ってみたいと思います。基本的には上記とほぼ同じなので、上記の本の共著者である岡本さんのキャッシングも含めたコードを使わせていただきます。

functions.phpなどに以下を書いておきます。

function nskw_transient_remote_get( $url, $expiration = 43200 ) {

	$transient = 'remote_get-' . md5($url);

	if ( ! ($response_body = get_transient($transient)) ) {

		$response = wp_remote_get($url);

		if( !is_wp_error($response) && $response["response"]["code"] === 200 ) {

			$response_body = $response["body"];
			set_transient( $transient, $response_body, $expiration );

		} else {

			$response_body = false;

		}
	}

	return $response_body;

}

そして、結果を表示したいところに、下記を記述します。テーマにガンと書いてしまってもOKだと思います。キャッシングに使われているのは、Transient APIというデータをキャッシングしておいてくれる仕組みです。これも『サイトの拡張性を飛躍的に高める WordPressプラグイン開発のバイブル』に詳しく書かれてい(以下略

$rss_url = "http://example.com/path/to/feed/";

$responce = nskw_transient_remote_get( $rss_url );

if ( $responce ) {

	$res_obj = simplexml_load_string( $responce );
	$bs = $res_obj->channel;

	foreach ( $bs->item as $b ) {
		?>
		<li><a href="<?php echo esc_url( $b->link ); ?>"><?php echo esc_html( $b->title ); ?></a></li>
		<?php
	}

}

いかがでしょうか?とってもシンプルですよね!

両方の方法に出てくる、esc_url() や esc_html というのは、セキュリティに関する関数なのですが、こうしたセキュリティについても、(以下略

↓ プラグインを作る方々への本、書きました。 ↓