WP 未来投稿(予約投稿)の注意点

2007/04/29 日曜日 19:00 投稿者 zon

WrodPressで未来投稿(予約投稿)の投稿を行う場合に引っかかりそうなことを書いておきます。

未来投稿(予約投稿)のやり方

管理画面の投稿画面でタイムスタンプを未来の投稿したい時間に設定します。

未来投稿(予約投稿)の注意点

  • 管理画面の投稿画面の『投稿ステータス』の公開にチェックを入れておきます。

通常の投稿を行う際には記事を書き上げた後に、『公開』のボタンを押せば、投稿画面の右側のメニューの投稿ステータスに関係なく公開されますが、未来投稿を行う際には『投稿ステータス』を公開に設定しておかないと自動で投稿されないようです。

注意
この記事はタイムスタンプを 2007/04/29 19:00、投稿ステータスを草稿に設定した状態で2007/04/29 13:20 に公開ボタンを押して投稿しました。
つまりこの記事が 2007年2007/04/29 19:00 で表示されていれば、『未来投稿(予約投稿)の注意点』に書かれてある内容はウソ情報と言うことになります。

詳しい考察は下記の記事を参照してください。
WP 未来投稿(予約投稿)のテスト

追記

問題なく未来投稿(予約投稿)されていました。前回はなぜ未来投稿(予約投稿)が出来なかったのか気になりますが、原因を調べるにももう再現さすことが出来ないし、問題なく表示されればそれでいいので、この件は終了。

さらに追記

問題が解消されていなかったので再度検証しました。
検証結果はWP 未来投稿(予約投稿)のテスト・続を参照してください。

WP 未来投稿(予約投稿)のテスト

2007/04/28 土曜日 19:00 投稿者 zon

とあるブログで週間単位くらいで連載ものの記事を書いているのですが、投稿の曜日を定期的にしておけば読者の方にも優しいと思って、cron か何かで投稿できるようにしようと考えていたのですが、WordPress には、予約投稿(未来投稿)なる機能があると書いてあったので、これは使わない手はないなと思って試してみました。

使い方は簡単で、記事の投稿画面のタイムスタンプを未来に設定すればよいと書かれていたので、早速タイムスタンプを未来に設定して、記事を投稿。

ざっと調べた感じの予想(注:あくまで予想です)では公開はされているけど、表示の処理が走る時にフィルタをかけて未来のものを表示されないようにしてるっぽい。そうなると、ping は記事投稿時に飛んでしまうのでは?とか、RSSはどうなるの?とかの疑問があったけど、その辺はあまり気にしなくてもいいやってことでそのまま投稿。

しかし、設定されたタイムスタンプの時刻は過ぎているのに一向に表示されない。おかしい。。

よくよく、詳しく調べてみると、 WordPress 2.1 は、予約投稿の処理の方法が違うらしく、wp-cron と言うのがキーワードとして出てきて、このwp-cron で cron の処理を走らせてるみたいなことが書かれてたので、そのソースをざっと追ってみると、以下のような感じでした。(注:あくまでざっとなので動作確認はしてません)

未来に行うイベントを DB にキャッシュさせておいて、外部からアクセスがあったときに wp-cron が現在時刻と DB のイベント発生時刻とを照らし合わせて、設定時刻が過ぎていたら設定されたイベントを実行。で、気になっていた ping の件も、これならイベントが走るまで飛ばないっぽいです。

で、疑問点である予約投稿が表示されなかった件とは関係くないようで未解決なのですが、DB を確認したところでは、どうも、イベントがキャッシュがされていなかったために処理が走らなかった様子です。

根拠は、[options] テーブルの [cron] にイベントらしきものが入っていないのと、同じく [options] テーブルの [doing_cron] に設定された値が 0 のままなので、cron が実行されたことはいまだかつてないってことではないかと思うのです。たぶん、cron が実行されていたら [doing_cron] は、処理が走った time が入るんではないかと予想。

となると、ステータスが公開ではなかったから?でも、草稿のところには表示されないし、管理画面のステータスは公開になっていた気がするんですが。(その記事は既に手動で投稿してしまったので、確認するすべなし。)

気になるのは、記事投稿時にテキストボックスの下にある『公開』ボタンを押して投稿したのですが、右側にあるメニューの『投稿ステータス』の公開にチェックを入れておかないといけないような処理っぽかったので、この投稿で試してみます。

注:この記事はタイムスタンプを 2007/04/28/19:00 に設定し、2007/04/28/ 18:50 に投稿しました。

追記:テスト後

無事に未来投稿(予約投稿)されていました。
上に書かれていたことで、嘘情報がありました。[options] テーブルの [cron] が全て実行されたあとは、[doing_cron] に設定された値は 0 になるようです。[doing_cron] は、前回のイベントをチェックした際に一定期間内(たぶん30秒)は、イベントのチェックをしないようにするフラグみたいです。

ブログ等でよく このエントリーのはてなブックマーク被リンク数 で、はてなユーザのソーシャルブックマークでリンクされた数を表示しているのを見かけますが、これを表示する意味のひとつにSEO的な側面もあるみたいなので、表示できるようにしてみました。

SEO的な話は、今日のSEO:はてなブックマークの活用は有効なSEOだのブログ記事なんですが、そこにこのように書かれていました。

※3人以上のはてなユーザーからブックマークされると、注目エントリーに掲載される。

今日のSEO:はてなブックマークの活用は有効なSEOだ

で、この注目エントリーの Google PageRank が2なので、そこからバックリンクがもらえるとSEOの効果があるよ。ということらしいです。そういう一面もあったんですね。もちろんそれだけの理由で表示してるわけではないでしょうけど。

それほどブックマークされなくても、こちらからリンクをはれば、はてなからバックリンクをもらえるしくみになっているのならそこそこSEOの意味はあるだろうし、誰がブックマークしたかも簡単にチェックできるといった便利さもあるので、表示するようにカスタマイズしてみました。

wp-hatena プラグインをカスタマイズしてみる

このブログのテーマのひとつでもある『あるものは使う』の精神にのっとって、WordPress エントリをはてなブックマークに登録 – wp-hatena プラグイン正式版 – リリースで配布されている wp-hatena をカスタマイズしてみました。(正確にはWordPress Plugins/JSeries ≫ wp-hatenaで配布しているのでしょうか?)

上記リンク先からファイルをダウンロードして解凍するとwp-hatena.phpがあるので、そのなかの適当な場所に、以下のコード二つを追加してください。
(2007/04/24現在、wp-hatena-0.93j.zipです)

/**
 * WP interface.
 *
 * @param none
 * @return none (はてなブックマーク用の被リンク数を echo)
 */
function entryHatena()
{
    echo
        $this->entryBookmarkURL(
            'はてなブックマーク',
            'http://b.hatena.ne.jp/entry/',
            'http://b.hatena.ne.jp/entry/image/'
        );
}
/**
 * Bookmark URL entry.
 *
 * @param $sitename (サイト名称文字列)
 * @param $linkurl (リンク先URL)
 * @param $iconfile (画像ファイル URL)
 * @return $tag (画像リンクタグ)
 */
function entryBookmarkURL($sitename, $linkurl, $iconfile)
{
    $title = $this->utf8_encode(get_the_title());

    $tag  = '<a';
    $tag .= ' href="' . $linkurl . get_permalink() . '"';
    $tag .= '>';
    $tag .= '<img';
    $tag .= ' src="' . $iconfile . get_permalink() . '"';
    $tag .= ' alt="' . $title . 'の' . $sitename . '被リンク数"';
    $tag .= ' title="' . $title . 'の' . $sitename . '被リンク数"';
    $tag .= ' style="border: 0;margin: 0;padding: 0;vertical-align: baseline;" ';
    $tag .= '/>';
    $tag .= '</a>';

    return $tag;
}

あとは、テーマの表示したいところに以下のコードを追加すれば表示されます。

<?php if(isset($wph)) $wph->entryHatena(); ?>

ちなみに、このブログのバージョンは、2.1.3で動いていますが、2.0.X でも動くと思います。採用するかどうかは自己責任でお願いします。

で、このブログをブックマークしてくれている人がいないので現状表示されていません。(2007/04/24現在)
テストのために自分でブックマークして確認はしたのですが消しました。
誰か、ブックマークしてください。(反映されるのにちょっと時間がかかります。)

おまけで、del.icio.us と livedoorクリップ・ソーシャルブックマークも作ったのですが、どれくらい需要はあるんでしょう?

ファイルをそのままダウンロードできるようにしたいところですが、こういうのを公開したことがないので、ライセンスとかその辺のルールがいまいち分からないし、作者のhiromasa.zone :o) さん の許可もないので回りくどくて申し訳ないです。正直、ブログにソースコード書くのは面倒です。何か楽な方法はないでしょうか。

その後

で、カスタマイズした後にブックマークの登録件数を取得して、1件以上なら表示できるようにしようと思って、APIとかないか調べていたら、[WP:Plugin] 被ブックマーク数表示+ランキング生成プラグインという素敵なプラグインがありました。ショック。。

でも、自分がカスタマイズしたものに愛着が沸いたというか、懲りずに被ブックマーク数表示+ランキング生成プラグインを参考に、wp-hatenaを自分好みにカスタマイズしたんですけど、それはまた次の機会に。

style.cssの変更に対応する

2007/04/22 日曜日 18:40 投稿者 zon

ブログを立ち上げて間もない状態なので、ブログのレイアウトやデザインの微調整のためにスタイルシートを頻繁にいじっている状態になっています。

で、このスタイルシートがブラウザにキャッシュされていて、内容を変更しても閲覧している側がページの再読み込みをしてくれなければ、古いキャッシュファイルのスタイルシートのまま閲覧されておかしなレイアウトになっていることってあると思います。

正確には、自分が使っているFirefox2.0はスタイルシートが変更されたら、自動的にスタイルシートを再読み込みしてくれているのかこの現象は出ないのですが、IE6.0だと、スタイルシートを変更しても古いスタイルシートを使ってレイアウトがおかしくなります。

これを回避する為にちょっとした小技メモ。

ファイル名が同じでもHTMLで読み込む際のファイル名の後に、?v=xxx をつければ、別ファイルとしてキャッシュされるようです。これが、HTMLの文法的にありかなしなのかは調べていないから分かりませんが、割と使われている方法みたいだし、この際その辺の細かいことは気にせずコレを利用します。

?v=xxxを使った例

<style type="text/css" media="screen">
@import url(style.css?v=1.0.0);
</style>

この ?v=xxx の xxx 部分を更新時間が表示されるようにして、スタイルシートを修正すると自動で xxx が変更されるようにします。

WordPress の場合は、スタイルシートを読み込んでいる処理をしているところは、以下のファイルがほとんどだと思うのでここを修正すればOKです。

/wp-content/themes/テーマ名/header.php

スタイルシートのパスを出力する関数は、

<?php bloginfo('stylesheet_url'); ?>

でこの後に、ファイルの更新時間を取得する関数 filemtime('ファイルのパス') を使って

?v=<?php filemtime('ファイルのパス') ?>

を追加します。

WordPressでのカスタマイズ例

難しいことは分からないという人のために WordPress で使えるサンプルコードを以下に書いておきますが、この小技は、WordPressだけじゃなく、スタイルシートのパスさえ変更すれば、いろいろなところで使えます。

<style type="text/css" media="screen">
@import url(<?php bloginfo("stylesheet_url"); ?>?v=<?php echo filemtime(get_stylesheet_directory() . '/style.css'); ?>);
</style>

zontheworld
うまい焼肉が喰いたい。
HTML convert time: 0.117 sec. ( Login )