Liner Note

情報(ユーザー中心デザイン・ユーザビリティ)と技術(ウェブプログラミング・ウェブサービス)についてのメモ書き

パーマリンク設計

昔、ブログのURI設計について言及した時に、極力シンプルである(日時とか記事のキーワードとかを混ぜない)のが良いよねということを言いました。それ以来、「ドメイン名+投稿ID」というシンプルなURIで運営してきたんですけども、こういう投稿ID主体のURI設計にも少し気になる問題点がありました

これは大きく3つあって、

  1. 投稿IDは記事IDではないということ
  2. 公開順に投稿IDが振られるわけではない
  3. WordPressの引っ越し時にURIが変わってしまう可能性がある

です。

1つめは、記事以外にも、画像をフォームからアップロードしたりすると、それも1つの投稿IDとしてカウントされちゃう問題。純粋に記事1つ1つで割り振られるわけではないんですね。

2つめは、要するに記事の公開順ではなく、(下書きを含んだ)保存順に投稿IDが振られてしまう問題。つまり、記事を下書きして保存するとその時点で1つの投稿IDが振られるので、先に公開した記事の投稿IDが”150″なのに、綿密に下書きして後に出した記事の投稿IDが”15″とかになっちゃう。コレはひじょーに気持ち悪い。

また、サーバー移転の際にWordPressを引っ越す方法として、引っ越し元のWordpressの管理パネルから記事のエクスポートをして、引っ越し先のそれから記事のインポートをするという方法があると思うのですが、これをすると投稿IDが1から割り振り直されちゃうのですね。つまり、公開日付順に(以前の投稿IDと異なっている可能性のある)投稿IDを割り振られて、URIが変わってしまうのですね。これはイクない。

ということで、投稿IDでURIを設計するのは結構冒険ということになります。加えて、投稿IDはシステムと深く結びついているので安易にプラグインでいじることもできません。

ということで、投稿IDの代わりにそれと独立した記事IDとして投稿スラッグを使うことにしました。投稿スラッグは記事ごとにユーザーが自由に設定できる変数でURIに含めることもできます。

ということで僕は今までの記事の投稿IDと投稿スラッグを同じにした上で、パーマリンク構造を変更してみました。記事もそれほど多くなかったので全部手動で作業。

ただ、新たに記事を公開する時に、最新の記事の記事ID(=投稿スラッグ)を逐一確認してから投稿スラッグに記入するのは煩雑なので、javascriptで自動(半手動)で最新の投稿スラッグを取得できるようにしてみました。面倒なので、プラグイン形式にはしていませんが、気が向いたらパッケージ化してみようと思います。

以下は古い内容です

追加ファイル・コード内容

以下は、あくまで当方の環境のみですが動作を確認しているコードです。

PHPソースコード (extras/latest-articles.php)
<?php
 
$xml = simplexml_load_file("http://note.openvista.jp/feed/");
$url = explode("/", $xml->channel->item[0]->link);
$slug = $url[count($url)-2];
 
$slug++;
echo $slug;
?>
PHPソースコード (wp-admin/edit-page-form.php と wp-admin/edit-form-advanced.php の100行目あたり)
<fieldset id="slugdiv" class="dbx-box">
<h3 id="t891f01" class="dbx-handle"><?php _e('Post Slug') ?></h3>
<div class="dbx-content"><input name="post_name" type="text" size="13" id="post_name" value="<?php echo attribute_escape( $post->post_name ); ?>" />
++ <input value="AddID" onclick="loadText()" type="button">
</div>
</fieldset>
PHPソースコード (wp-admin/admin-header.phpの44行目あたり)
do_action('admin_head');
?>
++ <script type="text/javascript" src="../wp-includes/js/addID.js"></script>
</head>

そして、wp-includes/js/に以下のファイルを配置。

ダウンロード
AddID.js v.0.2 (2008/01/07)

ちなみに、このjavascriptファイルはサイトのRSSを取得して、最新のURLを取得後、記事IDをゲットしているので、URI構造によって一部を変更する必要があります。詳しくは当該ファイルを参照のこと。

というわけで、あんまり汎用性はないかもしれませんが以上です。

ちなみにこのネタは2ちゃんねる ブログ板のWordPress (ワードプレス) その3 PHP MySQL OSSスレ852-856, 859-860, 864, 894)で質問をしたことです。


URI運用方針の変更により、現在はこうした運用はしておりません。

ですが、最近までWordPress 2.5で運用していましたやり方を書いておきます。

まず、以下のソースコードのうち設定の部分を自分の環境に合わせたら、latest-articles.phpとUTF-8で保存して、wp-adminフォルダ内に置いておきます(置く場所自体はどこでも良いのですが、一応例として)

PHPソースコード (/wp-includes/latest-articles.php)
<?php
 
// URLを設定
define(url, "http://note.openvista.jp/");
// パーマリンクのタイプを以下から番号で選択
define(type, 2);
/** パーマリンク設定
*** 
*** 1: http://www.example.jp/(ポストスラッグ)
*** 2: http://www.example.jp/(何かの文字)/(ポストスラッグ)
*** 3: http://www.example.jp/(何かの文字)/(何かの文字)/(ポストスラッグ)
*** 
*** 例:http://blog.example.com/year/month/post_slug
*** (この場合は3に該当)
*** 
***/
 
$xml = simplexml_load_file(url."feed/");
$esc1 = array("/", ".");
$esc2 = array("\/","\.");
$url = str_replace($esc1, $esc2, url);
$latest_url = (string) $xml->channel->item[0]->link;
 
switch (type){
  case 1 : $subject = "/".$url."([^\/]+)\/?$/"; break;
  case 2 : $subject = "/".$url."[^\/]+\/([^\/]+)\/?$/"; break;
  case 3 : $subject = "/".$url."[^\/]+\/[^\/]+\/([^\/]+)\/?$/"; break;
  default: exit("Requested URL type is invalid"); break;
}
 
if (preg_match($subject, $latest_url, $match)){
  $slug = preg_replace("/\.(php|html)$/", "", $match[1]);
  $slug++;
  echo $slug;
}
 
?>

次に、wp-admin/edit-form-advanced.phpの86行目あたりのdiv要素直後に以下のpタグで囲われた一文を挿入します。挿入する箇所にあるURLは変更しておいてくださいね。

PHPソースコード (wp-admin/edit-form-advanced.phpの86行目あたり)
<div class="inside">
 
<p><input value="ID追加" onclick="document.getElementById('new-post-slug').value = '<?php echo file_get_contents('http://note.openvista.jp/wp-includes/latest-articles.php'); ?>';" type="button" /></p>

2つのファイルをアップロードすれば設定は終了です。ボタンを押せばIDを設定することが出来ます。

Popularity: 3% [?]

キーワード:

似たもの記事

読者の皆さんの反応サイト内コメントの更新情報(RSSフィード)

読者のコメント

0

ブックマークコメント

0

他サイトの関連記事

3

読者のコメント

コメントはまだ寄せられていません

はてなブックマークでつけられたコメント

他サイトの関連記事

  1. ウェブサイト

    (DxD)∞

    投稿日時
    2008年01月08日
    12時ごろ
    Comment No
    #1

    WordPressのURIを公開順で連番にする方法

    WordPressでは記事に作成順でIDが付けられるのですが、このIDをそのままURIの一部として使うと困ることになります。

    記事のIDは、データベースではauto_increment属性を持つフィールドに保存…

  2. ウェブサイト

    パーマリンク設定

    投稿日時
    2008年05月28日
    12時ごろ
    Comment No
    #2

    [...] WordPressで公開順に投稿IDを振っていく方法 http://note.openvista.jp/2007/wordpress-id/ [...]

  3. ウェブサイト

    Ganesha's Field Notebook - WordPressのパーマリンクを%postname%を使わないで連番にする方法

    投稿日時
    2009年07月17日
    18時ごろ
    Comment No
    #3

    [...] * WordPressで公開順に投稿IDを振っていく方法 – Liner Note [...]


トラックバックとは
この記事に言及したサイトをこちらに掲載する仕組みをトラックバックと言います。ここでは、このサイトに頂いたトラックバックを一覧表示しています。
トラックバックしてくださる方へ
この記事への言及がない記事など、トラックバック受信方針に沿っていないものは、読者にお見せしても仕方ないこともあり削除させていただいることをご了承ください。
トラックバックを受け取るためのURI

コメント書き込みフォーム

  • メールアドレスはウェブ上で公開したり、連絡以外で使うことはありません
  • コメントを公開したくないが、作者に連絡を取りたい場合は メールで連絡してください
  • 本文中にHTMLコードは使用できません(URLはそのままお書きください)