WordPress記事投稿画面を表画面と同じデザインで

2011/08/29 | SNS/CMS/ブログ

WordPress3.0あたりから、管理画面の記事投稿画面で入力する際、表画面のデザインcssを適用して、より直感的に記事投稿できるようになったとのことだったので、やり方を調べてメモ。

  1. 使用するテーマフォルダ内にfunctions.phpがあるかどうかを確認し、なければ追加する。
  2. functions.phpに以下の1行を追加する。
    add_editor_style();
  3. テーマフォルダ内にeditor-style.cssファイルを用意し、そこに記事用のCSSを定義する。

とこんな感じ。add_editor_style関数は引数をひとつ与えることが出来るのだが、それは使用するcssファイル名。デフォルトでeditor-style.cssになっている。つまり以下のような感じ。

add_editor_style($style=’editor-style.css’)

これで使いやすくなるし、提案しやすくなる。ただ、まぁ、WordPressのテーマを作るのは、それはそれで面倒ではある。実際の実装作業は、コーディング屋さんにお願いするけどね。

PHPとSQLiteでブログを開発する

昨今レンタルサーバは安価になった。以前は「独自ドメインはオプション」みたいなのもあったけど、今は独自ドメインが当たり前。それどころか月額1000円そこそこでマルチドメイン無制限、サブドメイン無制限、メールアドレス無制限なんてレンタルサーバもよく見るようになった。今はXserverがそこそこ安定しているように思う。

エックスサーバー

マルチドメイン無制限なレンタルサーバは他にもたくさんあるみたいだが、データベース数無制限とかデータベース容量無制限なんてサービスは、有名どころのサービスでは見たことがない。「ドメインやサブドメインを複数作ったら、その数だけデータベースも使いたい」というのが人情だと思うのだが・。

そんなときにSQLiteがいい。SQLiteは単なるファイルを設置するだけだから、数に制限もない。データベースに格納する容量もウェブ容量を超えなければ問題ない。だから最近自分のサイトを作るときはSQLiteを最大限活用するようにしている。

しかし、ブログ、PHPで動くブログでSQLiteを採用しているものってほとんど見かけない。Googleで検索してもうまく見つけられない。海外では存在するようだが、日本での知名度はほとんどないに等しいようだ。がんばって使ってみようかとも思ったけど、どうせなら自分好みのブログを、ということで自分で開発してみることにした(車輪の再発明とは言われたくない)。

ということで現在開発中。初版は最低限の機能だけ実装して、超簡単お手軽ブログソフトとして公開する予定。今のところ簡易CMS的な用途で使えるようなレベルにはなっているので、これを充実させていきたい。とりあえず正月明けにリリースしたいと思っている。本当はゆっくり開発したい気もするが、重たい案件を抱えてしまっていて、その息抜きのために自分の開発をしたい、ということが根底にある。現実逃避の手段として、本業と同じことをするって・・・不健康極まりないな。

あなたはこのページにアクセスする権限を持っていません

2008/12/21 | SNS/CMS/ブログ

WordPressでこんなエラーが出た。いやいや、自分が管理者で間違いないですけど。ちなみに、エラーが出たWordPressのバージョンはME2.2.1。

何らかの原因で文字コードが変わったりするとこのエラーが出るらしい。例えばデータベース内のテーブル「wp-options」の「wp_user_roles」というところには管理権限に関する情報が書かれている。ここの値は配列がシリアライズして記述されているので、日本語が入っていて文字コードが変わったりすると影響が出て、その結果として権限情報が取得できない、みたいな感じなんだろう。とりあえず、この行がうまく取得できなかった場合にエラーが出そうだ。

で、調べてみたけど、文字コードは変わっていなかった。で、なぜ、エラーが出るのか。

実はWordPressを移設しなくてはならない事情ができて、その際にテーブル名を変えた。デフォルトで入力した際「wp_」だったところを「www_wp_」に変えた。もちろんwp-config.phpの中で$table_prefixの値は書き換えたので、表面上は問題なく表示されていたっぽい。でも、実はwp-config.phpを編集するだけではいけなかった。変更する箇所はデータベース内に3点あって、まずそれらを探す(以下のリスト)。

  • wp_optionsでカラム「option_name」で”wp_user_roles”の値を持つ行
  • wp_usermetaでカラム「meta_key」で”wp_capabilities”の値を持つ行
  • wp_usermetaでカラム「meta_key」で”wp_user_level”の値を持つ行
一見、上記の行を見ても、何もおかしそうな箇所はない。それぞれの値と思われるカラムのデータを見てもwp_っていう文字列が見当たらない。でも、実はそういう問題ではなかった。上記3つの名前そのものがいけないのだ。正しくは以下のように修正。
  • 「wp_user_roles」を「www_wp_user_roles」
  • 「wp_capabilities」を「www_wp_capabilities」
  • 「wp_user_level」を「www_wp_user_level」
こんなところにもテーブル名のprefixが効いてくるとは。PHPでかかれたブログとしてはWordPressが一番メジャーだし、このブログでも使っている。でもいくつか「いただけない部分があるなー」とは思っていたけれど・・・。これって仕様がよくないような気がする。なんだか・・・取って付けたような修正をしていった結果、1箇所変更しただけではうまく変更が効いてくれない、みたいな。まぁ、我慢して使うしかないけれど。

wp-cacheで本当に速くしたい

2008/04/01 | SNS/CMS/ブログ

WordPressが遅いのでwp-cacheを導入している。しかし思ったほど早くならないのはなぜか・・・。としばらく悩んでいた。
どのような作業をしたかというと、以下の通り。

(1) wp-cacheの導入
(2) 定期的にブログの主要ページにアクセスするようcronを設定(wgetで)

こうすれば、運が悪くなければ(タイミングが悪くなければ)、たいていはwgetが事前にキャッシュを作成してくれていて(もしくは検索エンジンのクローラーでもいい)、そのページを閲覧することになるわけだから、基本的には絶対高速なはず、と思っていた。しかし実際はそうではない。

wp-cacheはクライアントを識別して、クライアントごとにキャッシュを作成している。つまりAさんがトップページにアクセスしてキャッシュを作成しても、Bさんがアクセスすると、せっかくAさんが作ったキャッシュを使わず、Bさんようのキャッシュを作成するのだ。これはクッキーを使って実現されている。

具体的にはwp-cache-phase1.phpの23行目の記述。
$key = md5($_SERVER[‘SERVER_NAME’].preg_replace(‘/#.*$/’, ”, $_SERVER[‘REQUEST_URI’]).wp_cache_get_cookies_values());

md5ハッシュ値を生成している記述があるのだが、このハッシュ値がキャッシュのファイル名に使われている。つまりアクセスする相手が違うと違うキャッシュを探すのではないか、と思ったのだが・・・。

上記の記述をコメントアウトし、以下のように書き直した。
$key = md5($_SERVER[‘SERVER_NAME’].preg_replace(‘/#.*$/’, ”, $_SERVER[‘REQUEST_URI’]));

これで確かに同じキャッシュをみるようになった。さて、これで問題がないのかどうか、ということだが、それはwp_cache_get_cookies_values()関数の内容(つまりクッキーで保存されている内容)を調べないといけない。これを調べれば、なぜこのようにキャッシュを分けているのか理解できるはずだ。

しかし、まぁ、とりあえずこのままでいく。

WordPress高速化への道

2008/03/28 | SNS/CMS/ブログ

WordPressの便利さは大変すばらしいが、速度の遅さもすばらしい(すばらしく遅い)。もっとも・・・遅いといっても大量のデータを投稿してあれば、の話でもあるわけだが。
この遅い状況を改善する方法を考察してみた。もちろんボトルネックの洗い出しなので、WordPressよりも低次元なレベルから考えなくてはいけない。できるかできないかは別にして列挙する。

(0) インフラの高速化
WordPressが設置してあるサーバの回線環境を高速化する。もちろんレンタルサーバでは無理。一番実現できなさそうな部分ではある。

(1) ハードウェアの高速化
レンタルサーバでは無理な話。CPUの高速化はもちろんだけれど、もっとボトルネックになりそうなのがハードディスク。ストライピングを組み合わせられればかなり早くなるはず。

(2) MySQLのキャッシュ機能を利用
MySQLを適切な設定にするのはもちろんだが、キャッシュ機能を利用して、MySQLへの接続回数を減らすという方法だ。これはかなり有効だろう。しかし、この方法は専用サーバなら可能だが、レンタルサーバでは無理だ。具体的な設定箇所は「query-cache-type」や「query-cache-size」など。

(3) PHPのキャッシュ機能を利用
PHPはリクエストの都度コンパイルされる言語だ。つまりコンパイルの時間がボトルネック。だからeAcceleratorなどを組み込んでみる価値はある。もちろん専用サーバではできるが、レンタルサーバでは無理(事前に組み込まれているレンタルサーバなら問題ない)。ただし、これはアクセス数が多い場合には有効だが、そもそもアクセス数が少なければ効果が薄そうだ。

(4) WordPressのキャッシュ機能を利用
WordPressはリクエストを受けると、PHPファイルがコンパイルされ、MySQLに接続し、データを取得して表示する、という流れだ。つまりリクエストの都度MySQLに接続するので、当然MySQLが遅い場合は表示が遅くなる。だからMySQLに接続して取得したデータをキャッシュしておき、毎回データベースに接続するのをやめれば高速化が図れる。
この方法はそもそもMySQLに機能として含まれている(ただしデフォルトでは無効化されている)。この機能を有効化するには以下の作業をおこなう。
・ディレクトリ「wp-content/cache」を作成し、パーミッションは777。
・設定ファイル「wp-config.php」に以下の一行を追加(一番上がいい)。
 define(‘ENABLE_CACHE’,true);

(5) ページ単位でキャッシュする(プラグインの利用)
(4)を導入するとデータベースへの接続は減少する(無しにはならない)。しかしPHPがデータを組み立てる処理はその都度実行される。ページの組み立て作業そのものをキャッシュするのがプラグインwp-cacheだ。つまりいったん表示されたページの出力内容そのものをキャッシュしておき、次回から同じURLへのアクセスがあると、複雑な処理(データの取得やデータの組み立て)は一切スキップして、キャッシュした内容を表示するのだ。

高速化の方法は大体こんな感じ。後は不必要なプラグインは削除したり、テーマ内でのプログラム処理を極力減らすなどの努力は必要だろう。


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net