ホーム > スポンサー広告 > WordPressのパーマリンクを自動連番にする方法ホーム > WordPress > WordPressのパーマリンクを自動連番にする方法

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
[ --/--/-- ] スポンサー広告 |

WordPressのパーマリンクを自動連番にする方法

記事を投稿する度にスラッグを指定するのは面倒くさい、しかしURLに年月日や日時が含まれるのは嫌・・・ということで、パーマリンク設定を「数字ベース」や「/%category%/%post_id%/」で指定している方も少なくないと思います。

 

しかし、この設定には問題があります。いずれも「投稿固有のID番号」である%post_id%が利用されているため、サーバー移転等を行った場合に思わぬトラブルに巻き込まれる可能性があるのです。

 

そこで今回、投稿スラッグ%postname%に対して自動連番を生成する方法を紹介します。

なお、WordPress 2.x とWordPress 3.0 以降とでは一部異なる部分がありますのでご注意ください。

 

以下のサイトの記事を引用し、補足説明を加えたいと思います。

 

WordPressの投稿スラッグに記事投稿順で自動連番設定する方法(Curo.jp)

 

WordPressの%post_id%の仕様

 

%post_id%は投稿記事だけでなく、ページ投稿・下書き投稿・投稿リビジョン(オートセーブ)・メディアライブラリ(画像のアップロード)にもpost_idが使われるため、連番にはならないのです。

WordPressには初めから連番を作成するための%post_id%が用意されています。ならばそれを使えばよいはずなのですが、実は2つほどの欠陥を抱えているのです。

 

post_idの欠陥について

欠陥? 連番にならない

 

まず一つは引用文にあるように、WordPressが内部的に「post_idの値」を記事投稿以外の場面でも加算しているためパーマリンクで表示される投稿IDは連番にならないという問題です。つまり、投稿ID≠記事IDであるということです。もっと言うと、WordPressには記事IDという概念がありません

 

FC2ブログでも投稿記事には自動連番が付加されたパーマリンクが設定されます。これは記事IDとして管理されており、記事の削除などを行わない限りにおいて連番となることが保障されています。

 

 wppren01

 

WordPressでもFC2同様の連番となることを期待して%post_id%を指定する訳ですが、これが思うようにはならないのです。まだ5つ目の記事なのに投稿IDは18になってる・・・ということもありえます。

 

欠陥? サーバー移転でトラブル

 

WordPressのパーマリンク問題(BLOGRAM)

実は%post_id%にはもっと大きな落とし穴があって、サーバの移転などでデータのエクスポート/インポートを行うと空き番号を詰めてしまうため、一回でも記事の削除をしたことがあるとIDがずれてURLが変わってしまうという、致命的な問題がある。

 

つまりデータベース上での再配置が行われてしまう結果、投稿IDと対応記事との不一致が発生してしまうということです。簡単のため、投稿IDが連番で記事と対応している例で説明します。

 

wppren02

 

元々4つの記事があったとしましょう。しかし、気に入らない部分でもあったのか記事2はある日削除されてしまいました。特にサーバーを移転するのでもなければ、記事を削除したところでその部分が空白になるだけなので全く問題ありません。

 

しかし、この空白部分がある状態でサーバー移転を行おうとすると問題が発生します。データベース(MySQL)よりデータのエクスポート/インポートを行う際に、無駄な空白部分をつめてデータを格納しようとしてしまうのです。その結果、元々の記事と投稿IDの対応関係がくるってしまうのです。

 

すると結果として、記事のパーマリンクが移転前と異なるURLで表示されることになります。

 

後からURLが変ってしまうというのはSEO(サーチエンジン最適化)の視点から非常によくありません。それ以上に、他サイトからの被リンクが切れてしまう方が問題です。

 

いよいよ本題

%post_id%が使えないからといって、%post_name%で手動連番はきつすぎます。そこで%post_name%を使用し、なおかつ自動で連番が入力されるような便利な仕組みが無いかな?と探していましたら、最初に紹介したサイトで示されていました。

 

WordPressの投稿スラッグに自動連番設定

 

これがちょっと面倒で、自分で次の記事の番号を調べて打ちます。手動のため、前と同じ番号を打ってしまったり、欠番になってたりするのです。ダルいわけです。

 

もっと簡単に連番を付与できるだろうと考えてみたところ、以下の方法を思いついた(というほどでもないが)のでメモしておきます。

 

  1. WordPressの新規投稿画面の表示オプションから「投稿スラッグ」にチェックをいれて表示させます。
  2. wp-admin/edit-form-advanced.php 499行目を以下のように(太字のところ)変えます。

<input name="post_name" type="text" size="13" id="post_name" value="<?php echo(get_usernumposts(2) + 1); ?>" />

 

ね、簡単でしょう?

 

素晴らしい。get_usernumpostsが現在の公開記事数を示しているので、それプラス1を「連番用の値」として利用しようという発想ですね。ナイスアイデア!

 

ただし、上記の内容はWordPress 2.x での話であり、WordPress 3.0以降では2番目の項目のソースコードの変更部分が異なります

 

 

1. 新規投稿画面の表示オプションから「投稿スラッグ」にチェックを入れる

wppren06

 

ちなみに私が試した限りでは、スラッグにチェック入れても入れなくても特に何が変るということもありませんでした。チェック入って無くても、スラッグは表示されますし、編集できますし、反映もされました。でも、念のためチェックいれておきましょう。

 

 

2. ソースコードの該当箇所を変更する

 

WordPress 3.0 以降では、WordPress 2.x と比べソースコードの内容やファイル配置が異なっています。以下に変更すべきコードが存在する場所を示します。

 

WordPress 2.x

wp-admin/edit-form-advanced.php 499行目

 

WordPress 3.0 以降

wp-admin/includes/meta-boxes.php 491行目

 

ディレクトリとファイルが異なりますのでご注意ください。

以下の画像は、WordPress 3.0 のケースでTeraPadを使って表示したところです。

 

wppren03

 

それではソースコードの以下の赤字部分の箇所を変更してください。

 

■変更前

<input name="post_name" type="text" size="13" id="post_name" value="<?php echo esc_attr( $post->post_name ); ?>

 

■変更後

<input name="post_name" type="text" size="13" id="post_name" value="<?php echo(get_usernumposts($post->post_author) + 1); ?>

 

 

なお、引用元のサイトではget_usernumposts(2)と指定していましたが、その方法で試したところ不具合が発生してしまいましたので、get_usernumposts($post->post_author) に変えました。

 

以上で設定終了です。

 

 

実際に試してみよう

まず、パーマリンク設定を変更しましょう。管理パネルの左メニューより「設定」→「パーマリンク設定」より以下の画像のようにカスタム構造を選択し、/%postname%/と入力しましょう。

 

 wppren05

 

ちなみに、左に/blogと付いているのは、私がWordPress 3.0 のマルチサイト機能を使用しているためです。その機能を有効化していない場合は/blogは表示されません。なお、WordPress 3.0 以降に加わったマルチサイト機能に興味がある方は、1つのWordPressで複数のブログを管理する方法に詳しい解説がありますのでご参照ください。

 

では、テスト投稿してみましょう。

 

wppren07

 

スラッグの部分に自動で1と数値が設定されているのが確認できます。これが確認できれば取り合えず成功したと考えてよいでしょう。もちろん投稿後URLが正しく表示されているかご確認ください。

 

以降は記事を投稿するたびに自動で連番が作成されていきます。

例:

http://○○○.biz/blog/1/

http://○○○.biz/blog/2/

http://○○○.biz/blog/3/

 

なお、記事を下書き保存した場合、連番になってくれるはずの部分がハイフン付きで表示されてしまいますのでご注意ください。

 

wppren08

 

wppren09

 

http://○○○.biz/blog/4/ (←下書き保存)

http://○○○.biz/blog/4-2/

 

 

また、スラッグを手動で入力した場合は、連番の方ではなくそのスラッグが優先されますので安心です。

 

wppren10

 

wppren11

 

http://○○○.biz/blog/5/

http://○○○.biz/blog/toukoufive/ (←スラッグ手動変更)

 

以上です。お疲れ様でした。

 

 

追記:Windows Live Writerを利用する場合の注意

 

記事投稿にWordPress管理画面上のエディタを利用するのではなく、Windows Live Writerを使用する場合は、このエントリーで説明した自動連番にする方法が使えません

 

これはWindows Live Writerが、自動的に投稿スラッグを設定してしまうためですが、詳しくはWindows Live Writerを使って投稿してみる(WordPress編)をご覧ください。

[ 2010/12/11 ] WordPress |

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。