Allied ArchitectsAllied ArchitectsEngineer Blog

WordPressのURLの構造で(標準では)出来ない事

2013/06/27 Wordpress

どーも、青山です。

最近は自社サービスの比率がゼロになり、受託案件を主に担当しています。
昨年末から、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を

http://tech.aainc.co.jp/category/

としたくなるのが人情じゃないですか。
(そんな事は無いと思った方は、さようなら、ここまで読んでくださってありがとうございまいした。)
あら、残念。これが、出来ません。

さて、何ででしょうか。
デフォルトのURLを見て下さい。
index.phpが省略されていますが、Wordpressは基本的に、index.phpにどのページを表示しろという
クエリを渡して、指定されたページを表示しているんです。

それでは、「デフォルト」以外を選択した場合はどうなんでしょう。
「.htaccess」の編集権限があればWordpressが勝手に以下の内容を追記していると思います。

# BEGIN 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構造にするかは
よく考える必要がありますね、というお話でした。

最後に
アライドアーキテクツでは、エンジニアを募集中です。
一緒に働いてくれる、仲間になってくれる方はこちらからご応募ください。

よろしくお願いします。

aoyama
  • aoyama
  • Webエンジニア
  • 受託案件を担当しています。 Javascript, Wordpressなどテーマはその時々で変わりますが、役に立つ情報を提供できればと思います。

RELATION ENTRY

メンテナンス表示中に、特定のIPアドレスでサイト確認を行う方法

メンテナンス表示中に、特定のIPアドレス...

2014/08/20 Tips

ごあいさつ どーも、aoyamaです。 前回の記事から、半年近く間が空いてしまいました。 毎日暑いですね。夏ですものね。8月ですものね。 私は、弊社内では、マイナーな立場の受託案件を担当しております。 自社のサービスでないと、限られた環境、選択肢の中で問題解決の 提示をしなく...

続きを読む

iOS7.0.4でSSL領域のBasic認証時にSafariがフリーズする

iOS7.0.4でSSL領域のBasic...

2014/03/10 Tips

どーも、青山です。 開発合宿ではAnglarJSに挑戦したりしたんですが、ブログ記事にできるようなネタがありません。 そこで、今回は最近出くわして、困った現象について共有したいと思います。 つまり、あんまり技術に関連した内容といった感じではなく、小ネタです。 現象...

続きを読む

aoyamaさんの記事一覧へ

ページTOPへ