Archive : 2009-04

WordPressではpost_idをパーマリンクの中に入れておくと、移転時にpost_idがずれたときにパーマリンクが切れてしまうという問題があるらしいです。idがずれるとか、そんなバカな話があるか!とも思いますが、致し方ないので対応策を考えてみました。

結論から言うとまだ上手くいっていないのですが、とりあえず何を試してどこで躓いているかを記したいと思います。

まずよく言われるのが、パーマリンクをpost_nameで指定するという方法。でもこれでは記事のタイトルを後で変更したときに、タイトルとスラッグに不一致が出てしまい、個人的に好きじゃありません。一度エントリをあげてからよく手直しをする自分としては嬉しくなく、数字のIDが使いたいのです。そこで他の方法を探してみました。で参考になったのは池田百合子さんによる以下のページへのコメント欄。

「過去記事の post_name として post_id を指定すれば単純に解決」
WordPress のパーマリンク設定を変更 | Numb.

なるほど~。投稿スラッグにpost_idを入れればいいのか!過去記事に対して投稿スラッグにpost_idを指定するバッチ処理をした上で、投稿時に投稿スラッグにpost_idを設定するWordPressのプラグインを作っておくというやり方が良いかもしれないですね。

そこでまずバッチ処理用のコンソールアプリを作成。WordPressのXML-RPC APIを利用して全てのエントリのスラッグをidで上書きします。SQL文でも出来るような気もしますが、せっかく作ったライブラリを使ってみます。

※実行には.Net Framework 3.5 SP1がインストールされている必要があります。

SharpLab.WP-PostSlugRewriter.zip

ソースコード:SharpLab.WP-PostSlugRewriter.sln.zip

実行するに当たっては、前もって必ずBlogのデータのバックアップを取っておいてください。万が一データが破損した場合でも責任は負えません。また、このコンソールアプリでは既に設定されている投稿スラッグも構わず上書きします。あえて残しておきたいスラッグがある場合は(特にページ)、メモしておいて後で直してください。

続いて作りたるは投稿時にスラッグを書き換えるWordPressのプラグイン。フィルタするだけなので簡単お手軽。

中身はこの通り。

<?php
/*
Plugin Name:wp-idslug
Plugin URI:http://www.sharplab.net/
Description:新規エントリの投稿時にエントリのスラッグにidをセットします。
Author:shiroica
Version:1.00
Author URI:http://blog.sharplab.net/
*/

function sharplab_wpidslug_rewriteNewPost($id){



	$currentState = get_post($id);
	if($currentState->post_name != $currentState->ID){
		$post = array();
		$post['ID'] = $currentState->ID;
		$post['post_name'] = $currentState->ID;
		wp_update_post($post);
	}

}

add_filter('save_post','sharplab_wpidslug_rewriteNewPost')

?>

これをWordPressのプラグインフォルダに放り込んでおいた上で、有効化しておきます。これで、全ての記事のスラッグにidが入るようになりました。そこでパーマリンク設定を変更します。

post_idになっているものを

/%category%/%post_id%/

postnameに。

/%category%/%postname%/

postnameにはpost_idが入っているはずなので、これで上手くいくはず…なのですが、なぜか上手くいきません。上手く表示されるページもあるのですが、ページによっては404 Not Foundが返されるのですね。

しかし、年月とpostnameによるパーマリンクでは、(パーマリンクは変わりますが)上手く表示されるという…。

/%year%/%monthnum%/%postname%/

どなたか解決策が分かる方いらっしゃいませんでしょうか…。

APR
12

WP-XML-RPCLib2

Published:2009-04-12 12:07:40 UTC

image 今日はWordCamp Tokyoですね。自分も参加していて、WordPressの開発者、Matt Mullenwegによる基調講演を聴き終わり、今昼飯を食べながらMattへの質問を考えているところです。いや~P2(WordPress Prologue)は初めて知ったのですが、WordPressをtwitterクローンに出来るWPテーマだそうで、結構期待したいですね。

さて、WordPressといえば前にWordPressのXML-RPC APIを叩くための.netのライブラリを作ったものの、呼び出しの書き難い状態のままで放置していて、まずい状態だなぁということで、一念奮起して一から書き直してみました。今度はLINQ to XMLを使って書き直し。前のに比べたらソースコードもすっきりして、使いやすく、またメンテし易くなったかと思います。(ただ、XML-RPCの値を表すクラスをバリューオブジェクトとして実装したのは設計としてちょっと失敗だったかもしれません。。。)

SharpLab.XML-RPCLib2.zip

前のバージョンと同じく、XML-RPCを使うための汎用ライブラリと、それを利用して実装したWordPressのXML-RPC API操作用のライブラリ、及びそれらのCompact Framework版を用意しています。

APIを通じたBlog操作の自動化はなかなか面白いものですので、一度お試しいただければと思います。

image

だからどうしたって話ですが。

去年はコメント逆流だった。今年は何かなと思いふと見てみると…。

image

これは……

ニコ動はこういったflvplayerの挙動の切り替えにいつもプレイヤーのembedタグのflashvars属性を使っているのでソースを見てみた。

<embed id="flvplayer" height="540" width="952" flashvars="v=sm6595043&videoId=sm6595043&deleted=0&mylist_counter=5941&movie_type=flv&thumbImage=http://tn-skr4.smilevideo.jp/smile?i=6595043&us=0&ad=web_pc_player_marquee&iee=1&wv_id=sm6595043&wv_title=%E3%80%90%E8%A8%9B%E3%82%8A%E5%AE%9F%E6%B3%81%E3%80%91%20%E3%83%AF%E3%83%B3%E3%83%80%E3%81%A8%E5%B7%A8%E5%83%8F%E3%80%80Vol%EF%BC%9A01&wv_code=d806da3d&wv_time=1238515393&button_threshold=0&thumbTitle=%E3%80%90%E8%A8%9B%E3%82%8A%E5%AE%9F%E6%B3%81%E3%80%91%20%E3%83%AF%E3%83%B3%E3%83%80%E3%81%A8%E5%B7%A8%E5%83%8F%E3%80%80Vol%EF%BC%9A01&thumbDescription=%E2%94%80%E2%94%80%E6%9C%80%E5%BE%8C%E3%81%AE%E4%B8%80%E6%92%83%E3%81%AF%E3%80%81%E3%81%9B%E3%81%A4%E3%81%AA%E3%81%84%E3%80%82%E3%82%82%E3%81%86%E4%B8%80%E5%BA%A6%E3%81%8D%E3%81%BF%E3%81%A8%E4%BC%9A%E3%81%86%E7%82%BA%E3%81%AB%E3%80%81%E5%83%95%E3%82%89%E3%81%AF...&weather1=%E3%81%8F%E3%82%82%E3%82%8A&conjunction=%E6%99%82%E3%80%85&weather2=%E9%9B%A8&highest_temperature=13.0&lowest_temperature=8.0&chance_of_rain=40&player_version_xml=1233560503&marqueeVersion=1238147635&theRevengeOfChar=1" allowfullscreen="true" allowscriptaccess="always" quality="high" bgcolor="#FFFFFF" name="flvplayer" style="" src="http://www.nicovideo.jp/swf/nicoplayer.swf?ts=1238491869" type="application/x-shockwave-flash"/>

flashvars属性の最後の部分に注目。

theRevengeOfChar=1

逆シャアですね、わかります。

ふとWikipedia引いてみた。

機動戦士ガンダム 逆襲のシャア』(きどうせんし- ぎゃくしゅう-、MOBILE SUIT GUNDAM Char’s Counter Attack)は、1988年3月に松竹系で劇場公開されたガンダムシリーズアニメ映画宇宙世紀(UC)の2人の主人公、アムロ・レイシャア・アズナブルの最後の対決を描いている。ファンの間では「逆シャア」や英題の頭文字を取り「CCA」などと略されることもある。

機動戦士ガンダム 逆襲のシャア

出典: フリー百科事典『ウィキペディア(Wikipedia)』

英語表記違うやん…。