WordPressの条件分岐タグ と リンク取得方法

調べた内容のメモ(WordPressのバージョンは2.8.4-ja)

条件分岐タグとパーマリンク

テンプレートタグ - WordPress Codex 日本語版 に基本的なことはのっている。

is_front_page と is_home

この条件分岐タグを使用すると、 [設定]→[表示設定]→[フロントページの設定]で設定したページを見分けられます。

各ページにおける is_front_page() と is_home() が返す値を下の表にまとめました。

ページの種類is_front_page()is_home()is_page()判定条件
最新の投稿truetruefalseis_front_page() && is_home()
固定ページ:フロントページtruefalsetrueis_front_page() && !is_home()
固定ページ:投稿ページfalsetruefalse!is_front_page() && is_home()

※ただし、固定ページを選択しているのに、固定ページ:フロントページ を設定していないと、is_front_page() は常に FALSE を返します。 もちろん、こんな設定にする意味がないので誰もしないと思いますが。。

パーマリンクの取得方法は… "複数にわたるページ"ではない場合に限りますが フロントページのパーマリンクは trailingslashit( get_bloginfo('url') ) で取得できます。(trailingslashit は コチラを参照して下さい。)

おなじく"複数にわたるページ"ではない場合に限りますが フロントページではないホームページ ( is_home() === TRUE かつ is_front_page() === FALSE のページ ) のパーマリンクは get_page_link( get_option('page_for_posts') ) で取得できます。

get_option('page_for_posts') は オプションの page_for_posts の値を取得します。 page_for_posts などのオプションについては以下の表を見てくださいませ。。

show_on_frontフロントページの表示の設定が 最新の投稿 の場合は string(5) "posts" 固定ページ の場合は string(4) "page"
page_on_frontページIDの数字が文字列型で保存されている。 選択していない場合は string(1) "0"
page_for_postsページIDの数字が文字列型で保存されている。 選択していない場合は string(0) "" (空文字)

たとえば、http://xxxxxx.xxx/hogehoge/ というURLのページをフロントページ http://xxxxxx.xxx/ に指定した場合、http://xxxxxx.xxx/hogehoge/ はそのまま残っていて http://xxxxxx.xxx/ の重複ページになります。

個別投稿・ページ・添付ファイルページ

条件分岐タグは is_single, is_page, is_attachment をまとめた is_singular が便利。 パーマリンクの取得は get_permalink() を使えば取得できますが、get_permalink では複数にわたるページ・コメントページを考慮したURLは取得できません

各アーカイブ

種類条件分岐タグ引数の取得リンク取得関数
カテゴリis_category()intval( get_query_var( 'cat' ) )get_category_link( $category_id )
タグis_tag()intval( get_query_var( 'tag_id' ) )get_tag_link( $tag_id )
著者別is_author()intval( get_query_var( 'author' ) )get_author_posts_url( $author_id, $author_nicename = '')
年別is_year()intval( get_query_var( 'year' ) )get_year_link( $year )
月別is_month()intval( get_query_var( 'monthnum' ) )get_month_link( $year, $month)
日別is_day()intval( get_query_var( 'day' ) )get_day_link( $year, $month, $day)

get_query_var 関数で取得できる値はキチンと取り扱わないと危険です。たとえば、 <?php echo get_query_var('cpage'); ?>というコードを書いてしまうと、 ?cpage=SCRIPT というパラメータをURLにつけると、「SCRIPT」 と、そのまま出力されるのでセキュリティー的にヤバイです

※これも複数にわたるページを考慮したURLは取得できません

検索ページ

条件分岐タグは is_search

  • http://xxxxxx.xxx/page/2?s=クエリ
  • http://xxxxxx.xxx/page/2/?s=クエリ
  • http://xxxxxx.xxx/?s=クエリ&paged=2
  • http://xxxxxx.xxx/search/クエリ/page/2/

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

リンク取得方法は考え中です。

複数にわたるページ

複数にわたるページの 条件分岐タグは is_pagedです。

  • http://xxxxxx.xxx/?paged=1
  • http://xxxxxx.xxx/page/3
  • http://xxxxxx.xxx/tag/tag_name/page/2/

と、このようなURLで表示されるページが "複数にわたるページ" に当たります。 リンク取得方法は考え中です。

保留

is_time()  毎時別、毎分別、毎秒別のアーカイブページが表示されている場合

毎秒…だと…?

is_comments_popup もよく分からなかった。古いバージョンのワードプレス?

基本的なURLの構造

ページの種類デフォルト末尾スラッシュ有り /%postname%/末尾スラッシュ無し /%postname%/hoge
個別投稿?p=123post_name/post_name/hoge
個別投稿 (コメント)?p=123  &cpage=3post_name/  comment-page-3/post_name/hoge/   comment-page-3
添付ファイル?attachment_id=90post_name/  attachment/   file_name/post_name/hoge/  attachment/   file_name
添付ファイル (コメント)?attachment_id=90  &cpage=3post_name/  attachment/   file_name/    comment-page-3/post_name/hoge/  attachment/   file_name/    comment-page-3
ページ?page_id=123post_name/post_name
ページ (Paged)?page_id=123  &paged=2post_name/  page/2/post_name/  page/2
検索ページ?s=query
検索ページ (Paged)?s=query  &paged=2page/2/  ?s=querypage/2  ?s=query
カテゴリ?cat=5category/  cat_name/category/  cat_name
タグ?tag=tag_nametag/  tag_name/tag/  tag_name
著者別?author=5author/  author_name/author/  author_name
時間別?m=200908112009/08/11/2009/08/11
アーカイブ (Paged)?パラメータ=5  &paged=2種類/  名前/   page/2/種類/  名前/   page/2
Share