ワードプレスのパーマリンク構造と末尾のスラッシュ

プラグインを作成の際に調べた、 ワードプレスのパーマリンク構造と末尾のスラッシュについてまとめました。 調べたバージョンは WordPress2.8.4 です。

パーマリンク構造

WordPressには大きく2つのパーマリンク構造あります。 デフォルトカスタム構造 の2つです。 さらにカスタム構造には末尾にスラッシュ 有り・無し の2パターンがあります。

  • デフォルト
  • カスタム構造
    • (末尾スラッシュ有り)
    • (末尾スラッシュ無し)

デフォルトのパーマリンクは、 たとえば http://fernwelt.net/?p=123&cpage=2 といったカタチのURLです。

デフォルト設定のWorpPressブログはあまり見たことがありませんので、 多くのブログがカスタム構造を設定しているかと思います。 カスタム構造(末尾スラッシュ有り) の場合は

http://fernwelt.net/wordpress/trailingslash/

というようなカタチのURLであり、 カスタム構造(末尾スラッシュ無し) の場合は

http://fernwelt.net/wordpress/untrailingslash

というようなカタチのURLとなります。

パーマリンク構造に関連したリンク生成テンプレートタグ

add_query_arg

include/functions.php line1076 WordPress1.5.0~

パーマリンクの設定がデフォルトのときのリンクURL生成に使います。 URLの末尾にパラメータを付ける可変長引数のテンプレートタグです。 たとえば

<?php
$paged = 100;
$url = 'http://fernwelt.net/';
echo add_query_arg( 'paged', $paged, $url );
?>

は、以下の文字列が出力されます。

http://fernwelt.net/?paged=100

私自身がきちんと理解していませんので 詳しい解説は避けます orz

また、$wp_rewrite->using_permalinks()により パーマリンク設定がデフォルトか、そうでないかを判断できます。 $wp_rewrite->using_permalinks() === FALSE の場合はパーマリンク設定はデフォルトです。

user_trailingslashit

wp-include/link-template.php line34 WordPress2.2.0~

user_trailingslashit より先に trailingslashit と untrailingslashit を説明しておきます。 untrailingslashit(wp-include/formatting.php line1091 WordPress2.2.0~) は、 引数の末尾にあるスラッシュを 全て取り除くだけのカンタンなテンプレートタグです。

function untrailingslashit($string) {
  return rtrim($string, '/');
}

trailingslashit(wp-include/formatting.php line1076 WordPress1.2.0~) は、 引数を untrailingslashit して、末尾にスラッシュを一文字つけて返すテンプレートタグです。

function trailingslashit($string) {
  return untrailingslashit($string) . '/';
}

そして user_trailingslashit の中身は以下のようなソースです。

※日本語コメントは私が書き加えました。

function user_trailingslashit($string, $type_of_url = '') {
  //rewrite設定のクラスオブジェクトを global宣言
  global $wp_rewrite;

  // $wp_rewrite->use_trailing_slashes は
  // substr($this->permalink_structure, -1, 1) == '/'
  // が TRUE か FALSE かどうかを返す。
  //( wp-include/rewrite.php line1863を参照 )
  // つまりパーマリンクのカスタム構造の一番後ろの文字が
  // '/'(スラッシュ) か、そうでないかの情報を取得できる
  if ( $wp_rewrite->use_trailing_slashes )
    $string = trailingslashit($string);
  else
    $string = untrailingslashit($string);

  // Note that $type_of_url can be one of following:
  // single, single_trackback, single_feed, single_paged, feed, category, page, year, month, day, paged
  $string = apply_filters('user_trailingslashit', $string, $type_of_url);
  return $string;
}

つまりカスタム構造の末尾がスラッシュならばスラッシュを付け、 スラッシュで無いならばスラッシュを取り除きます。 user_trailingslashit はリンク生成にかかわるテンプレートタグで使われています。 これが含まれるテンプレートタグは、漏れが無ければ以下に挙げるものが全てです。

get_permalink, get_category_link, get_tag_link, get_comment_link, get_trackback_url, get_term_link, wp_link_pages, _get_page_link, get_attachment_link, get_year_link, get_month_link, get_day_link, get_feed_link, get_attachment_link, get_post_comments_feed_link, get_author_feed_link, get_category_feed_link, get_tag_feed_link, get_pagenum_link, get_comments_pagenum_link, paginate_comments_links

Share