どーも、青山です。
最近は自社サービスの比率がゼロになり、受託案件を主に担当しています。
昨年末から、Wordpressを触る様になりましたが、まだまだ知識が足りないことが
多く、その都度、はまったり、調べたりの連続です。
CMSはMTを触っていた事もあり、同じような感覚で、これは出来るだろうと思って
いた事が出来なかったりする事もあり、Wordpressの仕組みを考えれば、
「普通では無理」と分かるのですが、うっかりして勘違することも。
そんな中で、今回は「WordpressのURLの構造で(標準では)出来ない事」について書こうと思います。
Wordpressについて良くご存知の方は、「当たり前の事」だと思いますが、
「出来る事」についてはよく記事を見かけますが、「出来ない事」に焦点があたっている
ことは、少ないので、何かの役に立てばと思います。
さて、前置きがながくなりましたが、まずは、標準のURLのおさらいから。
(このブログのURLを例に挙げます。)
http://tech.aainc.co.jp/?page_id=###
▼著者ページ
http://tech.aainc.co.jp/?author=###
▼年月アーカイブ
http://tech.aainc.co.jp/?m=yyyymm
▼カテゴリーアーカイブ
http://tech.aainc.co.jp/?cat=###
▼タグアーカイブ
http://tech.aainc.co.jp/?tag=slug
▼パーマリンク
http://tech.aainc.co.jp/?p=###
この記事のURL(パーマリンク)を見て、違うじゃんというツッコミ
をいれて下さった方、ありがとうございます。
これも、皆さん当たり前の様にご存知だと思いますが、
Wordpressの管理画面 > 設定 > パーマリンク設定
で
「数字ベース」を選んでいるからです。
数字ベースを選ぶと各種ページのURLは下記のような感じになります。
http://tech.aainc.co.jp/slug
▼著者ページ
http://tech.aainc.co.jp/author/username
▼年月アーカイブ
http://tech.aainc.co.jp/archives/date/yyyymm
▼カテゴリーアーカイブ
http://tech.aainc.co.jp/category/slug
▼タグアーカイブ
http://tech.aainc.co.jp/tag/slug
▼パーマリンク(数字ベース)
http://tech.aainc.co.jp/archives/###
他にも、パーマリンク設定には「カスタム設定」と言うものがあり、パーマリンクをデフォルト
以外を選択する時に分かると思いますが、カテゴリーを表す「%category%」構造タグを使って
URLの構造を指定可能です。
http://tech.aainc.co.jp/%year%/%monthnum%/%day%/%postname%/
▼月と投稿名
http://tech.aainc.co.jp/%year%/%monthnum%/%postname%/
▼数字ベース
http://tech.aainc.co.jp/archives/%post_id%
▼投稿名
http://tech.aainc.co.jp/%postname%/
となかなか本題に入って行かなかったのですが、ようやく本題です。
出来ると思って、出来なかったこと、それはパーマリンクを下記の様に
カテゴリーに属するような形にした時の話です。
http://tech.aainc.co.jp/category/%category%/%post_id%/
▼カテゴリベース
category
を指定し、下記のようなURL構造の実現を期待。
▼カテゴリA(cata)を指定した投稿のパーマリンク
http://tech.aainc.co.jp/category/cata/###/
▼カテゴリA(cata)のアーカイブ
http://tech.aainc.co.jp/category/cata/
各カテゴリのアーカイブが上記のような場合、
全てのカテゴリーを横断したページのURLを
としたくなるのが人情じゃないですか。
(そんな事は無いと思った方は、さようなら、ここまで読んでくださってありがとうございまいした。)
あら、残念。これが、出来ません。
さて、何ででしょうか。
デフォルトのURLを見て下さい。
index.phpが省略されていますが、Wordpressは基本的に、index.phpにどのページを表示しろという
クエリを渡して、指定されたページを表示しているんです。
それでは、「デフォルト」以外を選択した場合はどうなんでしょう。
「.htaccess」の編集権限があればWordpressが勝手に以下の内容を追記していると思います。
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
# END WordPress
.htaccessやmod_rewriteの話をするとますます長くなるので、割愛しますが、
ようは、実ファイルや実ディレクトリが無ければ、index.phpにrewrite(書き換えて)
index.phpが呼ばれたことにするって感じです。
その後、指定されたURIとパーマリンク設定から指定されたページを特定しています。
そのため、「固定ページ」「カテゴリーページ」「パーマリンク」の設定が入り乱れていると
うまくパーマリンクが認識されないことになります。
Codex 日本語版 パーマリンクの使い方にも
「構成タグあるいは構成タグの組み合わせのみを使用してください。 」
と書いてありますね。
実際、この問題は、無理矢理 .htaccessやfunctions.phpに力技で設定をして実現したのですが、
管理画面に表示されるパーマリンクのURL、プレビューのURLが実際のものと異なるので、
積極的にはお勧めしません。
※「WP No Category Base」というプラグインがあり、その名の通り、強制的にURLに入ってくる
カテゴリーベース(デフォルトではcategory)を消すことができます。
このプラグインを使い、さらに、「category」というカテゴリを作り、すべてのカテゴリをその子カテゴリ
として登録すれば、上記でやろうとしていたことは可能です。
そんな訳で、Wordpressでプログ以外のサイトを構築する際に、どういうURL構造にするかは
よく考える必要がありますね、というお話でした。
最後に
アライドアーキテクツでは、エンジニアを募集中です。
一緒に働いてくれる、仲間になってくれる方はこちらからご応募ください。
よろしくお願いします。
受託案件を担当しています。 Javascript, Wordpressなどテーマはその時々で変わりますが、役に立つ情報を提供できればと思います。