謹賀新年
あけましておめでとうございます。
今年もよろしくお願いいたします。
wordpressもいよいよ3.0でMU統合などの情報もあります。今年もまた検証に明け暮れることになるのでしょうか。しかし、日々成長してゆくwordpressの世界がとてもすばらしく、目が離せませんね!
Ktai Styleでも有名なYuriko.NetさんのNonce! Pleaseを導入してみました。
結果ですが、Akismetで受けていたスパムがここ数日0です!
まさかこんなに強力だったとは思いませんでした。
しかもプラグインディレクトリーに登録されているのでwordpress上から直接ダウンロード・インストール可能で、有効にするだけの簡単設定;-)
まあ、スパムの世界も日々成長しているのでいたちごっこなのでしょうが、とてもすばらしいプラグインをありがとうございます!
Ktai Styleでサイトを構成していて、要望があったので構築した際のメモ書き。
携帯サイトを構成した場合のfooterメニューにアーカイブやカテゴリーというリンクがある(defaultテーマの場合、今回の場合はdefaultテーマを利用した改造テーマ)。
このカテゴリーをクリックし、カテゴリー一覧から個別ページへ飛んだ際に、ページ下部に表示される次の記事へのリンクと前の記事へのリンクは全体の記事の前後リンクになる。
これを、カテゴリー一覧から飛んだときにはカテゴリーに絞り込んでの前後リンクにしてほしいと要望があった。
まあ前後リンクをカテゴリーに絞るのは難しくはない。が、single.phpで前後リンクをカテゴリーに絞ってしまうと、TOPページなどからカテゴリに関係なく飛んできた場合も、カテゴリ毎のリンクになってしまう。
まあ、だからカテゴリ一覧から飛んできた場合、カテゴリに絞ってシングルページを見ている場合にはカテゴリに絞ったリンクを表示するように分岐を設けただけなんだけど。
まず、最初の改造。(全てテーマのみの改造、コアは修正していない)
category.phpを作成して一覧リンクを生成する際に「?category=1」を挿入する。
<dl>
<?php for ($count = $ks_settings['ol_count']; have_posts() ; $count++) :
the_post(); ?>
<dt><?php
$link = ks_ordered_link($count, $ks_settings['ol_max'], get_permalink(), get_the_title(), '%link', false, false);
$pattern = "/(.*\.html)(.*)/i";
echo preg_replace( $pattern, '$1?category=1$2', $link ) . ' '; ?> <img localsrc="46" alt="@ " /><font color="<?php echo ks_option('ks_date_color'); ?>"><?php ks_time(); ?></font></dt>
<?php endfor; ?>
</dl>
ソースのほとんどはdefaultのものなので一部のみ記述。
ks_ordered_linkをecho=falseして取得した後に「?category=1」を追加しているだけ。
次にsingle.phpを改造。
こちらは「?category=1」があることを確認して表示するリンクを分岐で分けているだけ。
if($_GET['category']) {
$category = htmlspecialchars($_GET['category']);
}
ページの先頭でとりあえずGETしておく。
if( $category ) {
$previous_post = ks_previous_post_link(array('format' => '<div align="left"><img localsrc="7" alt="« ">*.%link</div>', 'in_same_cat' => true, 'echo' => false));
$next_post = ks_next_post_link(array('format' => '<div align="right">#.%link<img localsrc="8" alt=" »"></div>', 'in_same_cat' => true, 'echo' => false));
$pattern = "/(.*\.html)(.*)/i";
echo preg_replace( $pattern, '$1?category=1$2', $previous_post );
echo preg_replace( $pattern, '$1?category=1$2', $next_post );
} else {
ks_previous_post_link('<div align="left"><img localsrc="7" alt="« ">*.%link</div>');
ks_next_post_link('<div align="right">#.%link<img localsrc="8" alt=" »"></div>');
}
やっていることはほぼ一緒。$categoryを調べてカテゴリーを絞る必要がある場合はks_previous_post_linkでin_same_catをtrue、echoをfalseにしてカテゴリに絞られたリンクを生成し一時取得。前後リンクに同じく「?category=1」を付加することで次のページに飛んでも絞込みを有効にしている。
それ以外の場合は普通に表示した。
Ktai Styleのコードを使用して行っているが、PC版でもコードも使用方法もほぼ一緒なので、同じことは簡単にできそう。
前回、既存のURLを維持するため、wordpress1つでさまざまな方法をとっていることを紹介したが、この時点ではサイトトップを表示するのにhome.phpを使用していた。
しかし、固定ページ+ブログを構築する際、困ったことが起こった。
表示設定で固定ページを選択し、サイトトップにページで作ったindexを指定、indexにはページテンプレートの記述をいれたhome.phpを指定してある。次にブログページにはURLを維持するため空で作ったblogページを親とするindexを指定。このindexにはブログ用のテンプレートを割り当てるか、自動でindex.phpが割り当てられる。と、考えていた。
しかし、現実にはどちらのページにもhome.phpが適用されてしまった。
サイトトップに自動でhome.phpが割り当てられるのは分かっていた。日本語Codexにもそう書かれてある。しかし、ブログトップにもhome.php->index.phpの順で割り当てられるとは思わなかった。しかも指定したページテンプレートは見事に無視される。
home.phpはループなしでがっつり作りこんでいるのでブログとしては役に立たない。これは困った。
そこで、home.phpを使用するのをやめた。サイトトップのindexには今まで作っていたhome.phpをリネームしてページテンプレートとして割り当てて、ブログトップにはブログ用に作成したページテンプレートを割り当てた。
すると、サイトトップには割り当てたページテンプレートが適用される。が、ブログトップはindex.phpが適用された。どうやら固定ページを指定した場合のブログトップに指定したページにはページテンプレートを適用できないようだ。もちろんhome.phpは削除している。
まあ、これでサイトトップとブログトップが無事表示できたわけなのでOKなのだが。
固定ページをサイトトップとして使いたい場合のhome.phpの使用には十分注意してもらいたい。
2010/1/14追記:どうも動いていなかった模様。ファーストサーバから回答を頂いた。
「現在ご契約中のサーバでのデータベース機能(MySQL) は、ホスト名で
のアクセスを前提に提供させて頂いており、MySQL のパスはご案内いた
しておりません。また、弊社サーバでは mysqldump をご用意いたしておりません。
※個別にmysqldump をご用意させていただく等の対応も
行なっておりません。」フォーラムでも混乱を招いてしまったので早めに追記しておきます。
以前にもWP-DBManagerの記事を載せたのですが、今回wordpress2.8.4、WP-DBManager2.50でファーストサーバーのバックアップ方法を覚書。以前の記事では一部エラーが残っていたが、今回はきっちり動きました。
WP-DBManagerはプラグインの新規追加から検索すれば簡単に見つかります。インストールも自動でOK。
有効化すると「バックアップフォルダが安全じゃないよ!」と怒られるので、プラグインフォルダにあるhtaccess.txtを.htaccessにリネームしてWP-DBManagerが自動生成したwp-content配下のbackup-dbフォルダにアップロード、以降怒られません。
日本語化の方法は今回は小粋空間さんを参考にしました。ご覧あれ。
日本語化するとメニューも「データベース」になります。ここからDB オプションを選びましょう。
mysqldumpのパスもmysqlのパスも自動検索は無理です。以下の設定で。
mysqldumpのパス:
/usr/local/mysql
mysqlのパス:
/usr/local/bin
これでDBバックアップをクリックすればエラーはでないはずです。試しに手動バックアップしてFTPで確認してみてください。メールでも送れます、便利ですねぇ。
さんざん格闘をしてきたwordpress MUですが、今のままでは使えないと判断しあきらめました。
今後wordpressとMUが統合されると言われていますので、複数wordpressをインストールするくらいならと検討していましたが、さまざまな部分で融通が利かないためあきらめるに至りました。
で、wordpressを複数インストールする方向で検討していますが、これが1つでなんとかなるならそれでもいいかな~ということで。再度検証開始。
まず、ページの構成から。
ページは例えばnewsという階層を作ってexeample.com/news/index.htmlなどとしたい場合、パーマリンクの変更はページには及ばないので、ページの機構だけを使って実現します。
とりあえず、newsというタイトルのページを空で作成し、過去に紹介したプラグインを利用してページにhtmlを付加します。これでexeample.com/news.htmlというページができました。
次に、indexというページを作成し、親にnewsページを指定します。これだけでexeample.com/news/index.htmlができちゃいます。
ただし、このままでは空のnews.htmlにもアクセスができてしまいます。そこで新たなプラグイン。WordPress & Business メモさんのリダイレクト設定ができるプラグインを参考にRedirectionをインストール。news.htmlにアクセスがあった場合はnews/index.htmlにリダイレクトしてしまいます。
同じ方法でexeample.com/news/old/index.htmlなど深い階層も実現できます。
今回、TOPページはhome.phpを利用して固定ページを作成していますが、ブログの一覧ページも表示したいなということで、アクセスアドレスはexeample.com/blog/でブログページを表示させます。
通常であれば[設定]の[表示設定]で固定ページを選択してあげればよいのですが、今回パーマリンクの設定は[/blog/%category%_%post_id%.html]になっていることが原因なのか、ページでblogを作成し投稿ページでblogを指定しても上記アドレスでアクセスができませんでした。
投稿の単発表示ではexeample.com/blog/category_1.htmlでのアクセスが可能なので、パーマリンクは問題ないといえます。
そこで、indexページを新規作成し、親にblogを指定することにしました。あとは上記方法でリダイレクトを指定して/blog/にアクセスがあった場合は/blog/index.htmlにリダイレクトしてしまいます。/blog/のままではアクセスできませんがリダイレクトされて一覧が表示されるので(404にはならない)問題なしとします。
この件を調査中にis_homeとis_front_pageでの動作に違いがあることがswhrykの日記ではじめて知りました。勉強になりますねぇ~
wordpressMUと格闘すること1週間。ようやくテスト稼動させることまで成功した。
まず、既存のhtmlを置き換えることを念頭においてパーマリンクを作成しなくてはならない。パーマリンクは「/%category%/%postname%.html」にした。これなら現在フォルダで構成している(hoge/index.html)ファイルもフォルダ名と同じカテゴリー名を作成すれば実現できる。
しかし、TOPページはそうはいかない。ファイル名の指定なし(http://exeample.com/)でアクセスした場合は問題ないが、index.htmlを指定して(http://exeample.com/index.html)アクセスした場合ページが存在しない。
そこでまず、ページのパーマリンクにhtmlを付与してくれるプラグイン(.html on PAGES)を導入。次にindexというページ名のページを作成。しかし、ここでページを固定表示してはいけない。固定ページにしてしまうとindex.htmlでアクセスした場合にリダイレクトされスラッシュ付のアドレス(http://exeample.com/index.html/)に変換されてしまう。
そこで、home.phpを作成した。wordpressのテンプレート階層によりhome.phpが存在すればindex.phpよりも先に使用される。このhome.phpに今までhtmlで作成されていたページをループを使わずにそのまま作成した。TOPページはほとんど修正がないので固定作成でも問題はないのだ。(一応NEWSの一覧などはtxtから自動取得して表示するように作りこんである)
コツはここからで、このhome.phpにページテンプレート用の記述を組み込み、ページ編集画面からテンプレートとして読み込めるようにした。これであらかじめ作成しておいたindexというタイトルのページにhome.phpをデザインとして読み込める。indexページには何も記述していないが、そもそもhome.phpにループを作成していないため、ルートでアクセスした場合もindex.htmlでアクセスした場合も同じページが表示できるようになった。
そして実際にルートでアクセスできるようにWordPress MU ブログディレクトリの変更を参考にファイルの修正とコピーを行った。
ここではまったのがオリジナルで作成していたphpファイルをincludeする場合のテンプレートディレクトリの指定方法だ。最初はinclude(‘hoge.php’)としていたが、ルートにアクセス先を変更するとincludeもルートから行ってしまう。気づくまで時間がかかった・・・。これをbloginfo(‘template_directory’)とすることでテンプレートディレクトリを取得し、動的に変更するようにした。(これはこれで後ではまることになる)
ようやくテスト稼動の確認までできるようになった。実際に動作には問題なさそうだ。次はいよいよ複数のwordpressブログをMUひとつで動かすテストです。
相変わらずWordpress MUと格闘中です。URLに関しては「wwwって何?意味あんの?」ってことで、つけていることに意味を見出せないものの、なければURLが簡素化されるなどの利点があり、また、なくてもあってもリライトで飛ばされるのでページが見れなくなるわけではない、という結論に達しました。別に推進派になったわけではありませんが。
Wordpress MUのシステムにはいろいろと通常版とは違うところがあるようで。
- テーマの編集がサイト上からできない(その機能がない)
- 表示設定にフロントページの表示項目がない(つまりページをトップ表示ができない?)
など。他にもあるかも。これって最初にインストールしたときに自動的に生成される管理者ブログ(?)のみに起こることなのか、サブブログにも起こるのか、まだ試してないのでわからない。2は不便だろ?
とりあえず、ヘッダ、フッタ、サイドバーはなんとかテスト段階までいけた。メインindexをページで作ってhome.phpで表示させようと思ったらトップ表示できないので困った・・・
[追記]2については作ったつもりのページが下書きのままになっていた(汗)公開して表示できた。ただ、検索中に気になる記事を見つけた。TOP固定表示にする場合home.phpはだめだという。状況は不明なので試してみるかな。
[さらに追記]home.phpは存在するとindex.phpの代わりにトップページとして自動的に使用されてしまうためにページテンプレートとしてはだめだよという意味らしい。私の構築サイトの場合はそもそもトップページとして使用したかったので問題なかった。ちょっとややこしいことをして構築しているが、詳細はのちほど。
ファーストサーバーにwordpress MUをインストールする必要性が出てきた。
出たばかりのwordpress MU 2.8.1 をダウンロードしてきて、日本語ファイルは2.7.1のものを使用。
文字化け対策は通常のwordpressと同じ方法が適用できる。
インストールに特に問題は見受けられない、とりあえずサブディレクトリタイプでインストール。ktai styleも稼動を確認。現状は/wordpress-mu/にて稼動。
が、ここで問題が発生。urlを確認するとドメインにwwwがない。サブディレクトリタイプにしたからか?
ブログの管理でドメイン部分にwww.を追加して更新・・・・・・・・・・エラー画面になって更新不能に。
インストールからやり直しか?とりあえずmysqlを覗いてみよう。(悲)
最近のコメント