WordPressをアプリケーションフレームワークとして使う。
WordPressを使ってアプリケーションを開発した。これまでWordPressは使ったことがなかったが、簡単に機能を追加できた。
ブログ的なアプリケーションを効率よく開発できる環境になっていると思う。
ビュー: テーマをカスタマイズする
モデル: オブジェクトとオブジェクトのキー
オブジェクトとキー文字列。
- 記事 …… 投稿スラッグ(ASCII。記事投稿画面で設定できる。URLに使用。)
- タグ …… タグスラッグ(ASCII。タグ管理画面で設定できる。URLに使用。)
- ユーザ …… loginネーム
これらのキーを使って、記事・タグ・ユーザ・コメント間に、ブラウザから編集可能なリレーションを作り出せる。
- 例: 投稿スラッグ=status_koseki / ユーザ名=koseki
- 例: タグスラッグ=permission_foo, permission_bar / ユーザ名=foo, bar
- 例: タグスラッグ=include_items / 外部ファイル=$HOME/data/items.csv
今回は使わなかったけど使えそうな機能。
- 記事にカスタムフィールドを足せる。
- カテゴリはツリー構造。
- 公開予約。
- 記事のリビジョン管理。
コントローラ: リクエストを受けてテーマに渡るまで
index.php wp-blog-header.php …… 設定ロード → wp() WPオブジェクト作成 → テーマ wp-load.php …… 設定が無かったらエラー wp-config.php …… ユーザ設定 wp-settings.php …… 環境構築 $wp = &new WP(); query.php …… クエリAPI : wp-include/template-loader.php …… テーマ処理に移行
世界一簡単なWordPressクライアント
大量に記事を投稿する必要があったが、外部APIでは投稿スラッグの設定ができなかった。また、XMLインポート・エクスポート機能では、一度取り込んだ記事を上書きできなかった。
しかたないのでMechanizeを使うクライアントを作った。
たぶん他のどんなAPIを使うより簡単。
url = "http://wordpress.local/" user = "admin" pass = "admin" client = WpClient.new(url).login(user,pass) # 新規記事作成 entry = client.get entry.title = "title" entry.content = "body" entry.post_name = "abcde" entry.save # 既存の記事を編集 entry = client.get("http://記事URL") entry.date = Time.now entry.tags = "タグ1,タグ2" entry.ping_status = false entry.comment_status = false entry.save
ただしHTMLに依存する。ダッシュボードのHTMLが変わると動かなくなる。あと、最低限必要だった機能しか実装してない。削除とかできません。ひどい。使えない。
プラグイン
プラグインも作った。簡単なプラグインなら簡単。難しいプラグインは作ってないからわからない。
以下は実際に使ったプラグイン。コメント欄にjQueryのstar-ratingで星をつけるUIを追加。出力時に★を画像で置換した。
<?php /* Plugin Name: Star Comment Plugin URI: http://bluemark.co.jp/ Description: コメントの★を画像に置き換えます。 Author: KOSEKI Kengo Version: 1.0 */ function filter_starcomment($content) { return preg_replace('/★/u', '<img src="/common/js/star-rating/star_on.gif" />', $content); } add_filter('comment_text','filter_starcomment'); ?>
wp-content/pluginsに入れて、ダッシュボード>プラグイン でプラグインを有効にする。
API
日本語版のAPIドキュメントは古かったりするみたい。
変数$postはthe_xxxという関数群で「今ターゲットにしている投稿」として扱われる。$_みたいなもの。テンプレートがループで扱いやすいようにか。一時変数で$postと書かないように気をつける。
以下、使った関数といつか使うであろう関数の抜粋。
記事
全postを取得。
$allposts = get_posts('numberposts=-1');
投稿スラッグからpostを取得。
$tmp = get_posts("name=postname1234");
echo $tmp[0]->post_name;
get_postsの引数に何を書けるのか、詳しい説明が見つからない。ソースを見た方が早そう。query.phpに書いてある。
コメント
記事IDからコメント取得。
$comments = get_comments("post_id=".$p->ID);
コメントのフィールド
- http://codex.wordpress.org/Function_Reference/get_comment
- comment_content で内容。
- user_id でユーザIDが取れる。
タグ
記事IDからタグ取得。
$tags = wp_get_post_tags($p->ID);
ユーザ
ログインユーザ
$u = wp_get_current_user();
ログインしているか
is_user_logged_in()
ユーザの取得。
$u = get_userdata($comment->user_id);
- http://codex.wordpress.org/Function_Reference/get_userdata
- ID
- user_login
- display_name
- user_email
- user_url