当サイト、Codex 日本語版は今後積極的な更新は行わない予定です。後継となる新ユーザーマニュアルは、https://ja.wordpress.org/support/ にあります。
万が一、当サイトで重大な問題を発見した際などは、フォーラムWordSlack #docs チャンネルでお知らせください。</p>

「テンプレートタグ/wp list pages」の版間の差分

提供: WordPress Codex 日本語版
移動先: 案内検索
(List the Home page)
(残りを和訳(これで全部)。)
 
(2人の利用者による、間の8版が非表示)
1行目: 1行目:
<div id="Description">
+
{{CheckTrans}}
== 説明 ==
+
</div>
+
  
テンプレートタグ '''wp_list_pages()''' は WordPress [[Pages|ページ]]へのリンクのリスト (以下ページリストとする) を表示します。しばしば[[サイドバーのカスタマイズ|サイドバー]]/[[:en:Customizing_Your_Sidebar|en]] や[[Designing_Headers|ヘッダー]]/[[:en:Designing_Headers|en]] をカスタマイズするのに使われますが、他の[[テンプレート]]にも同様に使えるかもしれません。
+
== 説明<span id="Description"></span> ==
  
<div id="Usage">
+
テンプレートタグ [[テンプレートタグ/wp_list_pages|wp_list_pages()]] は[[Pages|固定ページ]]へのリンクのリスト (以下ページリストとする) を表示します。しばしば[[サイドバーのカスタマイズ|サイドバー]]/[[:en:Customizing_Your_Sidebar|en]] や[[Designing_Headers|ヘッダー]]/[[:en:Designing_Headers|en]] をカスタマイズするのに使われますが、他の[[テンプレート]]にも同様に使えるかもしれません。
== 使い方 ==
+
 
</div>
+
== 使い方<span id="Usage"></span> ==
  
 
  <?php wp_list_pages( $args ); ?>
 
  <?php wp_list_pages( $args ); ?>
  
<div id="Examples">
+
== 用例<span id="Examples"></span> ==
== 用例 ==
+
 
</div>
+
=== 初期設定での使用<span id="Default_Usage"></span> ===
  
<div id="Default_Usage">
 
=== 初期設定での使用 ===
 
</div>
 
 
<pre>
 
<pre>
 
<?php $args = array(
 
<?php $args = array(
 
'authors'      => '',
 
'authors'      => '',
 
'child_of'    => 0,
 
'child_of'    => 0,
'date_format'  => get_option('date_format'),
+
'date_format'  => get_option( 'date_format' ),
 
'depth'        => 0,
 
'depth'        => 0,
 
'echo'        => 1,
 
'echo'        => 1,
33行目: 28行目:
 
'show_date'    => '',
 
'show_date'    => '',
 
'sort_column'  => 'menu_order, post_title',
 
'sort_column'  => 'menu_order, post_title',
        'sort_order'  => '',
+
'sort_order'  => '',
 
'title_li'    => __('Pages'),  
 
'title_li'    => __('Pages'),  
 
'walker'      => new Walker_Page
 
'walker'      => new Walker_Page
56行目: 51行目:
  
  
<div id="Parameters">
+
== パラメータ<span id="Parameters"></span> ==
== パラメータ ==
+
</div>
+
  
Note: generically, arguments are inherited from [[Function_Reference/get_pages#Parameters|get_pages]].
+
'''参考:''' ほとんどの引数は <tt>[[関数リファレンス/get_pages#Parameters|get_pages()]]</tt> から引き継いでいます。
  
 
; '''sort_column''' : (''文字列'') ページのリストをいろいろな順序で並び替えます。デフォルトでは'ページタイトルのアルファベット順''に並び替えます
 
; '''sort_column''' : (''文字列'') ページのリストをいろいろな順序で並び替えます。デフォルトでは'ページタイトルのアルファベット順''に並び替えます
 
:* <tt>'post_title'</tt> - (タイトルを) アルファベット順に並び替えます - デフォルト
 
:* <tt>'post_title'</tt> - (タイトルを) アルファベット順に並び替えます - デフォルト
:* <tt>'menu_order'</tt> - ページ順序によって並び替えます。''要注意'': ''ページ順序''と''ページ ID'' に注意してください。ページ ID はそれぞれの記事やページにつけられた唯一の番号です。ページ順序は [[管理画面#Pages|ページ]] > [[Pages Add New SubPanel|ページ->編集]]画面でユーザーがつける番号のことです。[[#List Pages by Page Order|上述の例]]をお読みください
+
:* <tt>'menu_order'</tt> - ページ順序によって並び替えます。'''要注意:''' ''ページ順序''と''ページ ID'' に注意してください。ページ ID はそれぞれの記事やページにつけられた唯一の番号です。ページ順序は [[管理画面#Pages|ページ]] > [[Pages Add New SubPanel|ページ編集]]画面でユーザーがつける番号のことです。[[#List Pages by Page Order|上述の例]]をお読みください
 
:* <tt>'post_date'</tt> - 作成日順に並び替えます
 
:* <tt>'post_date'</tt> - 作成日順に並び替えます
 
:* <tt>'post_modified'</tt> - 最終更新日順に並び替えます
 
:* <tt>'post_modified'</tt> - 最終更新日順に並び替えます
79行目: 72行目:
  
 
; '''exclude_tree'''
 
; '''exclude_tree'''
: (''文字列'') 除外したい親ページID をカンマ区切りで指定します。指定した親ページとその子ページ全てを除外するには、このパラメータを使います。<tt>'exclude_tree=5'</tt> とすれば、ページID 5 と、ページID 5 を親とする子ページ全て(子も孫も全て)が除外されます。
+
: (''文字列'') 除外したい親ページの ID をカンマ区切りで指定します。指定した親ページとその子ページ全てを除外するには、このパラメータを使います。<tt>'exclude_tree=5'</tt> とすれば、ページ ID 5と、ページ ID 5を親とする子ページ全て(子も孫も全て)が除外されます。
: このパラメータは [[Version 2.7|バージョン 2.7]] で追加され、and it does not function as described as of version 2.8.1 - [http://core.trac.wordpress.org/ticket/8683 See bug report].)
+
: (なお、このパラメータは [[Version 2.7|バージョン 2.7]] で追加されましたが、バージョン 2.8.1 の説明通りには動作しません - [http://core.trac.wordpress.org/ticket/8683 バグ報告を見てください])
  
 
; '''include''' : (''文字列'') ''wp_list_pages'' で生成されるリストに特定のページだけを含めます。'''exclude''' と同様に、このパラメータもコンマで ID を区切ったリストで定義します。[[#Include Pages in List|特定のページだけを含める例]]をお読みください
 
; '''include''' : (''文字列'') ''wp_list_pages'' で生成されるリストに特定のページだけを含めます。'''exclude''' と同様に、このパラメータもコンマで ID を区切ったリストで定義します。[[#Include Pages in List|特定のページだけを含める例]]をお読みください
93行目: 86行目:
  
 
; '''show_date''' : (''文字列'') それぞれのページの作成日または最終更新日を表示します。デフォルト値は''空''です (日付を表示しません)。
 
; '''show_date''' : (''文字列'') それぞれのページの作成日または最終更新日を表示します。デフォルト値は''空''です (日付を表示しません)。
:* <tt>'<nowiki></nowiki>'</tt> - 日付を表示しません (デフォルト)
+
:* <tt><nowiki>''</nowiki></tt> - 日付を表示しません (デフォルト)
 
:* <tt>'modified'</tt> - 最終更新日を表示します
 
:* <tt>'modified'</tt> - 最終更新日を表示します
:* <tt>'xxx'</tt> - ''modified'' 以外の値は作成日 ('''post_date''') を表示します。[[#Sort Pages by Post Date|上述の例]]をお読みください
+
:* 上記以外 - ''modified'' 以外の値は作成日 ('''post_date''') を表示します。[[#Sort Pages by Post Date|上述の例]]をお読みください
  
; '''date_format''' : (''文字列'') '''show_date''' パラメータで使うページの日付の書式を設定します (例: "<tt><nowiki>l, F j, Y</nowiki></tt>")。このパラメータは WordPress の管理画面で設定した日付フォーマットをデフォルトとします。[[Formatting Date and Time|日付と時刻の書式]]と [http://www.php.net/manual/ja/function.date.php PHPマニュアルの日時の書式化のページ]をお読みください
+
; '''date_format''' : (''文字列'') '''show_date''' パラメータで使うページの日付の書式を設定します (例: <code><nowiki>"l, F j, Y"</nowiki></code>)。このパラメータは WordPress の管理画面で設定した日付フォーマットをデフォルトとします。[[Formatting Date and Time|日付と時刻の書式]]と [http://www.php.net/manual/ja/function.date.php PHPマニュアルの日時の書式化のページ]をお読みください
  
; '''title_li''' : (''文字列'') ページリストの見出しのテキストとスタイルを設定します。デフォルトは「<tt>__('Pages')</tt>」です。ブログ上では「ページ」と表示されます (<tt>__(&#039;&#039;)</tt> は[[WordPress の翻訳|ローカライゼーション]]のためのものです)。空の値のとき (<tt>&#039;&#039;</tt>) は見出しを表示しません。また、リストは <tt><nowiki><ul></nowiki>, <nowiki></ul></nowiki></tt> タグで包まれていません。[[#Hiding or Changing the List Heading|見出しの例]]をお読みください
+
; '''title_li''' : (''文字列'') ページリストの見出しのテキストとスタイルを設定します。デフォルトは <code>__('Pages')</code> です。ブログ上では「ページ」と表示されます (<code><nowiki>__('')</nowiki></code> は[[WordPress の翻訳|ローカライゼーション]]のためのものです)。空の値のとき (<code><nowiki>''</nowiki></code>) は見出しを表示しません。また、リストは <tt><nowiki><ul></nowiki>, <nowiki></ul></nowiki></tt> タグで包まれていません。[[#Hiding or Changing the List Heading|見出しの例]]をお読みください
  
 
; '''echo''' : (''論理値'') ページリストを表示するか、PHP で使うために HTML テキストとして返すかを設定します。デフォルト値は '''1''' (リストを表示) です。
 
; '''echo''' : (''論理値'') ページリストを表示するか、PHP で使うために HTML テキストとして返すかを設定します。デフォルト値は '''1''' (リストを表示) です。
113行目: 106行目:
 
; meta_value : (''文字列'') ここに記述したカスタムフィールド値を持つページだけを表示します (meta_key フィールドと同時に使います)。
 
; meta_value : (''文字列'') ここに記述したカスタムフィールド値を持つページだけを表示します (meta_key フィールドと同時に使います)。
  
; '''link_before''' : ''文字列''<a> タグリンクの前に表示されるテキストまたは HTML (バージョン [[Version 2.7|2.7.0]で追加されたパラメータ )
+
; '''link_before''' : (''文字列'') <a> タグリンクの前に表示されるテキストまたは HTML ([[Version 2.7|バージョン2.7.0]]で追加されたパラメータ )
; '''link_after''' : (''文字列''): <a> タグリンクの後に表示されるテキストまたは HTML (バージョン [[Version 2.7|2.7.0]で追加されたパラメータ )
+
; '''link_after''' : (''文字列'') <a> タグリンクの後に表示されるテキストまたは HTML ([[Version 2.7|バージョン2.7.0]]で追加されたパラメータ )
; '''authors''' : ''文字列''指定した著者 ID (複数の場合はカンマで区切る) のページのみを表示します。指定しない場合は全著者が対象になります。
+
; '''authors''' : (''文字列'') 指定した著者 ID (複数の場合はカンマで区切る) のページのみを表示します。指定しない場合は全著者が対象になります。
; '''number''' : ''文字列''表示するページの数を指定します。SQL LIMIT 値を指定します。デフォルト値は no LIMIT です。[[Version 2.8|バージョン 2.8]] で追加されました。注意: こちらは現在動作しません。 [http://core.trac.wordpress.org/ticket/10230 http://core.trac.wordpress.org/ticket/10230]をお読みください。
+
; '''number''' : (''文字列'') 表示するページの数を指定します。SQL LIMIT 値を指定します。デフォルト値は「制限無し」です。[[Version 2.8|バージョン2.8]]で追加されました。'''注意:''' これは現在動作しません。[http://core.trac.wordpress.org/ticket/10230 Trac ticket #10230]をお読みください。
; '''offset''' : ''文字列'') ページの取得開始位置を飛ばす数です。デフォルト値は no OFFSETです。(バージョン [[Version 2.8|2.8]で追加されたパラメータ )
+
; '''offset''' : (''文字列'') ページの取得開始位置を飛ばす数です。デフォルト値は、オフセット無しです。([[Version 2.8|バージョン2.8]]で追加されたパラメータ )
  
; '''post_type''': (''string'') List posts associated with a certain hierarchical [[Post Types|Post Type]]. Default is 'page'. Valid values include:
+
; '''post_type''': (''文字列'') 階層を持つ種類の、指定された[[Post Types|投稿タイプ]]の投稿をリストします。デフォルトは 'page' です。有効な値は:
:* '<tt>page</tt>' - a page.
+
:* '<tt>page</tt>' - 固定ページ。
:* '<tt>revision</tt>' - a revision.
+
:* '<tt>revision</tt>' - リビジョン。
:* Hierarchical Custom Post Types.
+
:* 階層を持つカスタム投稿タイプ。
  
; '''post_status''': a comma-separated list of all post status types to return. For example: <tt>'publish,private,draft'</tt>
+
; '''post_status''': (''文字列'') 返したい投稿のステータスのタイプをコンマ区切りでリストにします。例えば: <code>'publish,private,draft'</code>
  
 +
== 用例<span id="Examples"></span> ==
  
<div id="Examples">
+
=== リストの見出しを隠す、変える<span id="Hiding_or_Changing_the_List_Heading"></span> ===
== 用例 ==
+
</div>
+
  
<div id="Hiding_or_Changing_the_List_Heading">
+
''wp_list_pages()'' が表示するページリストのデフォルトの見出し (「ページ」) は '''title_li''' パラメータに空の値を入れると非表示にできます。以下の例はページリストの上に見出しのテキストを表示しません。
=== リストの見出しを隠す、変える ===
+
</div>
+
 
+
''wp_list_pages'' が表示するページリストのデフォルトの見出し (「ページ」) は '''title_li''' パラメータに空の値を入れると表示しなくすることができます。以下の例はページリストの上に見出しのテキストを表示しません。
+
  
 
<pre><ul>
 
<pre><ul>
<?php wp_list_pages('title_li='); ?>
+
<?php wp_list_pages( array( 'title_li' => '' ) ); ?>
 
</ul></pre>
 
</ul></pre>
  
144行目: 132行目:
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('include=5,9,23&title_li=<h2>' . __('Poetry') . '</h2>' ); ?>
+
<?php wp_list_pages( array(
 +
    'include=> array( 5, 9, 23 ),
 +
    'title_li' => '<h2>' . __('Poetry') . '</h2>'
 +
) ); ?>
 
</ul></pre>
 
</ul></pre>
  
<div id="List_Pages_by_Page_Order">
+
=== リストの順序を変える<span id="List_Pages_by_Page_Order"></span> ===
=== リストの順序を変える ===
+
</div>
+
  
 
下の例では [[管理パネル#Pages|ページ]] > [[Pages Add New SubPanel|新規追加]] で設定された'''ページ順序'''に従ってページリストを表示します。
 
下の例では [[管理パネル#Pages|ページ]] > [[Pages Add New SubPanel|新規追加]] で設定された'''ページ順序'''に従ってページリストを表示します。
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('sort_column=menu_order'); ?>
+
    <?php wp_list_pages( array( 'sort_column' => 'menu_order' ) ); ?>
 
</ul></pre>
 
</ul></pre>
  
160行目: 149行目:
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('sort_column=menu_order&title_li=<h2>' . __('Prose') . '</h2>' ); ?>
+
    <?php wp_list_pages(
 +
        'sort_column=menu_order&title_li=<h2>' . __('Prose') . '</h2>'
 +
    ); ?>
 
</ul></pre>
 
</ul></pre>
  
166行目: 157行目:
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('sort_column=menu_order&title_li='); ?>
+
    <?php wp_list_pages( 'sort_column=menu_order&title_li=' ); ?>
 
</ul></pre>
 
</ul></pre>
  
<div id="Sort_Pages_by_Post_Date">
+
=== 作成日順に並び替える<span id="Sort_Pages_by_Post_Date"></span> ===
=== 作成日順に並び替える ===
+
 
</div>
+
 
この例はページの作成日でソートし、その日付をページごとに表示します。
 
この例はページの作成日でソートし、その日付をページごとに表示します。
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('sort_column=post_date&show_date=created'); ?>
+
    <?php wp_list_pages( 'sort_column=post_date&show_date=created' ); ?>
 
</ul></pre>
 
</ul></pre>
  
<div id="Exclude_Pages_from_List">
+
=== 特定のページを除外する<span id="Exclude_Pages_from_List"></span> ===
=== 特定のページを除外する ===
+
 
</div>
+
'''exclude''' パラメータを使うと、''wp_list_pages()'' が表示するページリストから特定のページを除外することができます。
'''exclude''' パラメータを使うと、''wp_list_pages'' が表示するページリストから特定のページを除外することができます。
+
 
<!-- '''Note''': Page numbers must be in ascending order (i.e. <tt>'exclude=17,38'</tt> and not <tt>'exclude=38,17'</tt>).  Note this isn't true at least as 2.1.3 -->
 
<!-- '''Note''': Page numbers must be in ascending order (i.e. <tt>'exclude=17,38'</tt> and not <tt>'exclude=38,17'</tt>).  Note this isn't true at least as 2.1.3 -->
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('exclude=17,38' ); ?>
+
    <?php wp_list_pages( 'exclude=17,38' ); ?>
 
</ul></pre>
 
</ul></pre>
  
<div id="Include_Pages_in_List">
+
=== 特定のページだけを含める<span id="Include_Pages_in_List"></span> ===
=== 特定のページだけを含める ===
+
</div>
+
  
 
特定のページだけをリストに含めたい場合 (例えば ID が 35, 7 ,26, 13 のページ) は、'''include''' パラメータを使用します。
 
特定のページだけをリストに含めたい場合 (例えば ID が 35, 7 ,26, 13 のページ) は、'''include''' パラメータを使用します。
196行目: 183行目:
  
 
<pre><ul>
 
<pre><ul>
  <?php wp_list_pages('include=7,13,26,35&title_li=<h2>' . __('Pages') . '</h2>' ); ?>
+
    <?php wp_list_pages(
  </ul>
+
        'include=7,13,26,35&title_li=<h2>' . __('Pages') . '</h2>'
</pre>
+
    ); ?>
 +
</ul></pre>
  
 
<div id="List_Sub-Pages_.28versions_prior_to_Wordpress_2.0.1.29">
 
<div id="List_Sub-Pages_.28versions_prior_to_Wordpress_2.0.1.29">
206行目: 194行目:
  
 
<pre><ul>
 
<pre><ul>
  <?php
+
    <?php
  global $id;
+
    global $id;
  wp_list_pages("title_li=&child_of=$id&show_date=modified
+
    wp_list_pages(
  &date_format=$date_format"); ?>
+
        "title_li=&child_of=$id&show_date=modified&date_format=$date_format"
 +
    ); ?>
 
</ul></pre>
 
</ul></pre>
  
220行目: 209行目:
  
 
<pre><ul>
 
<pre><ul>
  <?php
+
    <?php
  wp_list_pages('title_li=&child_of='.$post->ID.'&show_date=modified
+
    wp_list_pages(
  &date_format=$date_format'); ?>
+
        'title_li=&child_of='.$post->ID.'&show_date=modified&date_format=$date_format'
  </ul>
+
    ); ?>
</pre>
+
</ul></pre>
 +
 
 
以下の例は表示中のページに子ページ (表示中のページを親ページと設定しているページ) が存在する場合のみリストを表示します。
 
以下の例は表示中のページに子ページ (表示中のページを親ページと設定しているページ) が存在する場合のみリストを表示します。
  
 
<pre><?php
 
<pre><?php
  $children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');
+
$children = wp_list_pages( 'title_li=&child_of='.$post->ID.'&echo=0' );
  if ($children) { ?>
+
if ( $children ) { ?>
  <ul>
+
    <ul>
  <?php echo $children; ?>
+
        <?php echo $children; ?>
  </ul>
+
    </ul>
  <?php } ?>
+
<?php } ?>
 
</pre>
 
</pre>
  
241行目: 231行目:
 
上述の例では親ページでは子ページを表示しますが、子ページでは表示しません。次のコードは親ページでも子ページでも、子ページのリストを表示します。
 
上述の例では親ページでは子ページを表示しますが、子ページでは表示しません。次のコードは親ページでも子ページでも、子ページのリストを表示します。
  
(注) このコードは、サイドバーのウィジェットブロックの後ろに置くと動作しません。
+
'''注:''' このコードは、サイドバーのウィジェットブロックの後ろに置くと動作しません。
  
 
<pre><?php
 
<pre><?php
  if($post->post_parent)
+
if ( $post->post_parent )
  $children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
+
    $children = wp_list_pages( "title_li=&child_of=".$post->post_parent."&echo=0" );
  else
+
else
  $children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
+
    $children = wp_list_pages( "title_li=&child_of=".$post->ID."&echo=0" );
  if ($children) { ?>
+
if ($children) { ?>
  <ul>
+
    <ul>
  <?php echo $children; ?>
+
        <?php echo $children; ?>
  </ul>
+
    </ul>
  <?php } ?>
+
<?php } ?>
 
</pre>
 
</pre>
  
代用手段として、このページはsidebar.phpの中にあり、トップ階層のページにのみ表示されます。しかし子ページを持つ(もしくはそのページ自身が子ページである)ページを参照するとき、その親ページの子ページのみを表示します。
+
次の例は別の方法です。このコードは sidebar.php の中にあり、トップ階層のページにのみ表示されます。しかし子ページを持つ(もしくはそのページ自身が子ページである)ページを参照するとき、その親ページの子ページのみを表示します。
  
 
* メインページを参照するとき、全てのトップ階層のページはサイドバーの中にリスト化されます。
 
* メインページを参照するとき、全てのトップ階層のページはサイドバーの中にリスト化されます。
* 子ページを持たないトップ階層のページを参照するとき、全てのトップ階層のページはリスト化されます。
+
* 子ページを持たないトップ階層のページを参照するとき、全てのトップ階層のページがリスト化されます。
 
* 子ページを持つトップ階層のページを参照するとき、子ページとそれよりも下層のページがリスト化されます。
 
* 子ページを持つトップ階層のページを参照するとき、子ページとそれよりも下層のページがリスト化されます。
 
* 親ページの子ページとそれよりも下層ページを参照するとき、リスト化されます。
 
* 親ページの子ページとそれよりも下層ページを参照するとき、リスト化されます。
  
<pre>
+
<pre><?php
<?php
+
$output = wp_list_pages( 'echo=0&depth=1&title_li=<h2>Top Level Pages </h2>' );
$output = wp_list_pages('echo=0&depth=1&title_li=<h2>Top Level Pages </h2>' );
+
if ( is_page() ) {
if (is_page( )) {
+
    $page = $post->ID;
  $page = $post->ID;
+
    if ( $post->post_parent ) {
  if ($post->post_parent) {
+
        $page = $post->post_parent;
    $page = $post->post_parent;
+
    }
  }
+
    $children = wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );
  $children=wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );
+
    if ( $children ) {
  if ($children) {
+
        $output = wp_list_pages ( 'echo=0&child_of=' . $page . '&title_li=<h2>Child Pages</h2>' );
    $output = wp_list_pages ('echo=0&child_of=' . $page . '&title_li=<h2>Child Pages</h2>');
+
    }
  }
+
 
}
 
}
 
echo $output;
 
echo $output;
?>
+
?></pre>
</pre>
+
  
==== List all top-level pages and subpages only of this parent ====
+
==== 指定した親のすべての子孫ページをリストする<span id="List all top-level pages and subpages only of this parent"></span> ====
  
The following lists all top-level pages and
+
次の例はすべてのトップレベルページと下記のページをリストします。
:* if on a top level page - children of only this page
+
:* トップレベルページを指定すると - そのページの子ページ
:* if on a subpage - its siblings but not children of other top pages
+
:* サブページを指定すると - その兄弟ページ、ただし他のトップページの子ではないもの
  
 
<pre>
 
<pre>
 
<?php
 
<?php
$ancestor_id=1843;//this code is wrong
+
$ancestor_id = 1843; //このコードは仮のもの。
$descendants = get_pages(array('child_of' => $ancestor_id));
+
$descendants = get_pages( array( 'child_of' => $ancestor_id ) );
 
$incl = "";
 
$incl = "";
  
foreach ($descendants as $page) {
+
foreach ( $descendants as $page ) {
  if (($page->post_parent == $ancestor_id) ||
+
if ( ( $page->post_parent == $ancestor_id ) ||
      ($page->post_parent == $post->post_parent) ||
+
( $page->post_parent == $post->post_parent ) ||
      ($page->post_parent == $post->ID))
+
( $page->post_parent == $post->ID ) )
  {
+
{
      $incl .= $page->ID . ",";
+
$incl .= $page->ID . ",";
  }
+
}
 
}?>
 
}?>
  
 
<ul>
 
<ul>
  <?php wp_list_pages(array("child_of" => $ancestor_id, "include" => $incl, "link_before" => "", "title_li" => "", "sort_column" => "menu_order"));?>
+
<?php wp_list_pages( array(
 +
"child_of" => $ancestor_id,  
 +
"include" => $incl,  
 +
"link_before" => "",  
 +
"title_li" => "",  
 +
"sort_column" => "menu_order" ) ); ?>
 
</ul>
 
</ul>
 
</pre>
 
</pre>
  
==== List whole subpages ====
+
==== 全てのサブページをリスト表示<span id="List whole subpages"></span> ====
  
This is how to get the whole subpages list
+
次の例はすべてのサブページをリスト表示します。
  
<pre>
+
<pre><?php
<?php
+
if( ! $post->post_parent ) {
if(!$post->post_parent){
+
    // Will display the subpages of this top level page.
// will display the subpages of this top level page
+
    $children = wp_list_pages( array(
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
+
        'title_li' => '',
 +
        'child_of' => $post->ID,
 +
        'echo'    => 0
 +
    ) );
 +
} else {
 +
    if ( $post->ancestors ) {
 +
        /*
 +
        * Now you can get the the top ID of this page. WordPress is putting the ids DESC,
 +
        * thats why the top level ID is the last one.
 +
        */
 +
        $ancestors = get_post_ancestors( $this_page );
 +
        $children  = wp_list_pages( array(
 +
            'title_li' => '',
 +
            'child_of' => $ancestors,
 +
            'echo'    => 0
 +
        ) );
 +
    }
 
}
 
}
else{
+
 +
if ( $children ) : ?>
 +
    <ul>
 +
        <?php echo $children; ?>
 +
    </ul>
 +
<?php endif; ?>
 +
</pre>
  
if($post->ancestors) {
+
==== 親ページとすべての子孫ページを表示<span id="List parent Page and all descendant Pages"></span> ====
// now you can get the the top ID of this page
+
// wp is putting the ids DESC, thats why the top level ID is the last one
+
$ancestors = get_post_ancestors($this_page);
+
$children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0");
+
}
+
}
+
 
+
if ($children) { ?>
+
<ul>
+
<?php echo $children; ?>
+
</ul>
+
<?php } ?>
+
</pre>
+
  
==== List parent Page and all descendant Pages ====
+
特定の親ページから始まるツリー (親と全世代の子孫ページ) を表示する指定方法は [[テンプレートタグ/wp_list_pages|wp_list_pages()]] にありません。そこで次の例は、ある親ページのすべての子ページを [[関数リファレンス/get_pages|get_pages()]] を使って取得した後、[[テンプレートタグ/wp_list_pages|wp_list_pages()]] を使って「家系図」を表示します。
Since there's no way to tell [[Template Tags/wp list pages|wp_list_pages]] to display a particular parent tree (parent and all generations displayes) this example uses [[Function_Reference/get_pages|get_pages]] to get all the descendants for a parent, then use [[Template Tags/wp list pages|wp_list_pages]] to display the 'family tree'.
+
  
 
<pre>
 
<pre>
 
<?php  
 
<?php  
// use wp_list_pages to display parent and all child pages all generations (a tree with parent)
+
// wp_list_pages を使ってある親ページとすべての世代の子ページをツリー表示する。
 
$parent = 93;
 
$parent = 93;
$args=array(
+
$args   = array( 'child_of' => $parent );
  'child_of' => $parent
+
$pages = get_pages( $args );
);
+
   
$pages = get_pages($args);   
+
if ( $pages ) {
if ($pages) {
+
    $pageids = array();
  $pageids = array();
+
    foreach ( $pages as $page ) {
  foreach ($pages as $page) {
+
        $pageids[] = $page->ID;
    $pageids[]= $page->ID;
+
    }
  }
+
 
+
    $args = array(
  $args=array(
+
        'title_li' => sprintf( __( 'Tree of Parent Page %s', 'textdomain' ), $parent ),
    'title_li' => 'Tree of Parent Page ' . $parent,
+
        'include' =>  $parent . ',' . implode( ",", $pageids )
    'include' =>  $parent . ',' . implode(",", $pageids)
+
    );
  );
+
    wp_list_pages( $args );
  wp_list_pages($args);
+
 
}
 
}
?>
+
?></pre>
</pre>
+
 
 +
==== 現在のページと先祖ページと子ページをリスト表示<span id="List current Page with its ancestors and children"></span> ====
  
 +
次の例は現在の固定ページと、そのページの先祖ページおよび子ページをリスト表示します。
 +
<tt>child_of</tt> はすべての子孫ページを表示するので、代わりに wpdb を使って直接の子ページだけを取得します。<!-- This example will list current Page, ancestors of current page, and children of current page, Since child_of displays all children, wpdb is used instead, along with include to not display everything 'and the kitchen sink'. -->
  
==== List current Page with its ancestors and children ====
+
<pre><?php
This example will list current Page, ancestors of current page, and children of current page,
+
// 親ページがある場合。
Since child_of displays all children, wpdb is used instead, along with include to not display everything 'and the kitchen sink'.
+
if( $post->post_parent ) {
<pre>
+
    // 先祖ページを取得。
<?php
+
    $relations = get_post_ancestors( $post->ID );
//if the post has a parent
+
if($post->post_parent){
+
    // 直接の子ページを取得。
  //collect ancestor pages
+
    $result = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM wp_posts WHERE post_parent = %s AND post_type = %s", $post->ID, 'page' ) );
  $relations = get_post_ancestors($post->ID);
+
    if ( $result ) {
  //get child pages
+
        foreach ( $result as $page ) {
  $result = $wpdb->get_results( "SELECT ID FROM wp_posts WHERE post_parent = $post->ID AND post_type='page'" );
+
            array_push( $relations, $page->ID );
  if ($result){
+
        }
    foreach($result as $pageID){
+
      array_push($relations, $pageID->ID);
+
 
     }
 
     }
  }
+
  //add current post to pages
+
    // 現在のページをリストへ追加。
  array_push($relations, $post->ID);
+
    array_push( $relations, $post->ID );
  //get comma delimited list of children and parents and self
+
  $relations_string = implode(",",$relations);
+
    // 子と先祖と自ページをコンマ区切りリストにする。
  //use include to list only the collected pages.
+
    $relations_string = implode( ",",$relations );
  $sidelinks = wp_list_pages("title_li=&echo=0&include=".$relations_string);
+
}else{
+
    // include を使って集めたページだけをリスト表示する。
  // display only main level and children
+
    $sidelinks = wp_list_pages( array(
  $sidelinks = wp_list_pages("title_li=&echo=0&depth=1&child_of=".$post->ID);
+
        'title_li' => '',
 +
        'echo'    => 0,
 +
        'include=> $relations_string
 +
    ) );
 +
} else {
 +
    // ルートレベルのページと直接の子ページだけを表示。
 +
    $sidelinks = wp_list_pages( array(
 +
        'title_li' => '',
 +
        'echo'    => 0,
 +
        'depth'    => 1,
 +
        'child_of' => $post->ID
 +
    ) );
 
}
 
}
 
+
if ($sidelinks) { ?>
+
if ( $sidelinks ) : ?>
  <h2><?php the_title(); ?></h2>
+
    <h2><?php the_title(); ?></h2>
  <ul>
+
    <ul>
    <?php //links in <li> tags
+
        <?php
    echo $sidelinks; ?>
+
        // リンクは <li> タグで囲まれている。
  </ul>         
+
        echo $sidelinks;
<?php } ?>
+
        ?>
 +
    </ul>         
 +
<?php endif; ?>
 
</pre>
 
</pre>
  
 +
==== 最上位の祖先ページとその直接の子ページをリスト表示<span id="List topmost ancestor and its immediate children"></span> ====
  
==== List topmost ancestor and its immediate children ====
+
次の例は現在のページに関して、最上位の先祖ページとその直接の子ページを表示します。これはすっきりした二次サブナビゲーションに役立ちます。
This method will show the topmost ancestor of the current page as well as the topmost ancestor's immediate children. This can be used for clean secondary subnavigation.
+
  
First, create the following function (preferably in functions.php, assuming this is for a theme):
+
まず、下記の関数を作成します (テーマで使うなら functions.php に記述するのが良いでしょう):
  
 
<pre>
 
<pre>
if(!function_exists('get_post_top_ancestor_id')){
+
if ( ! function_exists( 'wpdocs_get_post_top_ancestor_id' ) ) {
 
/**
 
/**
  * Gets the id of the topmost ancestor of the current page. Returns the current
+
  * Gets the id of the topmost ancestor of the current page.
  * page's id if there is no parent.
+
  *
 +
* Returns the current page's id if there is no parent.
 
  *  
 
  *  
* @uses object $post
+
  * @return int ID of the top ancestor page.
  * @return int  
+
 
  */
 
  */
function get_post_top_ancestor_id(){
+
function wpdocs_get_post_top_ancestor_id() {
    global $post;
+
     if ( ! $post = get_post() ) {
   
+
         return;
     if($post->post_parent){
+
        $ancestors = array_reverse(get_post_ancestors($post->ID));
+
         return $ancestors[0];
+
 
     }
 
     }
      
+
   
     return $post->ID;
+
     $top_ancestor = $post->ID;
}}
+
     if ( $post->post_parent ) {
 +
        $ancestors = array_reverse( get_post_ancestors( $post->ID ) );
 +
        $top_ancestor = $ancestors[0];
 +
    }
 +
   
 +
    return $top_ancestor;
 +
}
 +
} // Exists.
 
</pre>
 
</pre>
  
Next, add the following code to your theme (wherever you want the menu to appear):
+
次に、テーマへ下記のコードを追加します (メニューを表示したいところへ):
 +
 
 
<pre>
 
<pre>
 
<ul class="clearfix">
 
<ul class="clearfix">
     <?php wp_list_pages( array('title_li'=>'','include'=>get_post_top_ancestor_id()) ); ?>
+
     <?php
     <?php wp_list_pages( array('title_li'=>'','depth'=>1,'child_of'=>get_post_top_ancestor_id()) ); ?>
+
    wp_list_pages( array(
 +
        'title_li' => '',
 +
        'include' => wdocs_get_post_top_ancestor_id()
 +
    ) );
 +
   
 +
     wp_list_pages( array(
 +
        'title_li' => '',
 +
        'depth'   => 1,
 +
        'child_of' => wpdocs_get_post_top_ancestor_id()
 +
    ) );
 +
    ?>
 
</ul>
 
</ul>
 
</pre>
 
</pre>
  
<div id="List the Home page">
+
=== ホームページのリスト<span id="List the Home page"></span> ===
=== ホームページのリスト ===
+
</div>
+
If you want a link to the blog page as well use [[テンプレートタグ/wp_page_menu | wp_page_menu()]].
+
  
=== List members of a custom post type ===
+
ブログページへのリンクを同様に表示したい場合は [[テンプレートタグ/wp_page_menu | wp_page_menu()]] を使ってください。
If a given custom post type is hierarchical in nature, then [[Function_Reference/wp_list_pages|wp_list_pages()]] can be used to list the member of that custom post type.  In this example the custom post type Portfolio is listed:
+
  
<pre>
+
=== カスタム投稿タイプのリストのメンバー<span id="List members of a custom post type"></span> ===
<?php  
+
 
 +
階層を持つカスタム投稿タイプであれば、[[テンプレートタグ/wp_list_pages|wp_list_pages()]] を使ってそのリストを表示できます。次の例はカスタム投稿タイプ Portfolio を表示します:
 +
 
 +
<pre><?php  
 
$args = array(
 
$args = array(
  'post_type'=>'portfolio',
+
    'post_type' => 'portfolio',
  'title_li'=> __('Portfolio')
+
    'title_li' => __( 'Portfolio', 'textdomain' )
 
);
 
);
wp_list_pages( $args );  
+
wp_list_pages( $args );
?>  
+
?> </pre>
</pre>
+
  
 +
=== ページアイテムのマークアップとデザイン<span id="Markup_and_styling_of_page_items"></span> ===
  
<div id="Markup_and_styling_of_page_items">
+
デフォルトでは、[[テンプレートタグ/wp_list_pages|wp_list_pages()]] は [[管理パネル#Pages|ページ]] > [[Pages Add New SubPanel|新規追加]] で作成した WordPress ページを入れ子で順不同のリストに表示します。あなたは最外部のアイテム (<tt>li.pagenav</tt>) をなくすことも、<var>title_li</var> パラメータを空の値にすることもできます。
=== ページアイテムのマークアップとデザイン ===
+
</div>
+
デフォルトでは、'''wp_list_pages()''' は [[管理パネル#Pages|ページ]] > [[Pages Add New SubPanel|新規追加]] で作成した WordPress ページを入れ子で順不同のリストに表示します。あなたは最外部のアイテム (<tt>li.pagenav</tt>) をなくすことも、<var>title_li</var> パラメータを空の値にすることもできます。
+
  
 
'''wp_list_pages()''' が表示するすべてのリストアイテム (<tt>li</tt>) には <tt>page_item</tt> というクラスが付けられています。'''wp_list_pages()''' をページ表示時に呼び出すと、そのページを指すリストアイテムには <tt>current_page_item</tt> というクラスが追加されます。
 
'''wp_list_pages()''' が表示するすべてのリストアイテム (<tt>li</tt>) には <tt>page_item</tt> というクラスが付けられています。'''wp_list_pages()''' をページ表示時に呼び出すと、そのページを指すリストアイテムには <tt>current_page_item</tt> というクラスが追加されます。
484行目: 509行目:
 
</pre>
 
</pre>
  
== 注意 ==
+
== 参考 ==
  
 
* 合わせて読む: [[テンプレートタグ/wp_page_menu|wp_page_menu()]], [[関数リファレンス/get_pages | get_pages()]]
 
* 合わせて読む: [[テンプレートタグ/wp_page_menu|wp_page_menu()]], [[関数リファレンス/get_pages | get_pages()]]
495行目: 520行目:
 
== ソースファイル ==
 
== ソースファイル ==
  
<tt>wp_list_pages()</tt> は {{Trac|wp-includes/post-template.php}}にあります。
+
<tt>wp_list_pages()</tt> は {{Trac|wp-includes/post-template.php}} にあります。
 
+
  
 
<div id="Related">
 
<div id="Related">
508行目: 532行目:
 
{{Tag Footer}}
 
{{Tag Footer}}
  
{{NeedTrans|一部}}
+
{{原文|Template Tags/wp_list_pages|150442}} <!-- 17:19, 30 March 2015 Eliorivero  版 -->
 
+
{{原文|Template Tags/wp_list_pages|150442}}<!-- 17:19, 30 March 2015‎ Eliorivero  版 -->
+
  
 
{{DEFAULTSORT:Wp_list_pages}}
 
{{DEFAULTSORT:Wp_list_pages}}

2017年10月26日 (木) 23:18時点における最新版

この項目「テンプレートタグ/wp list pages」は、翻訳チェック待ちの項目です。加筆、訂正などを通して、Codex ドキュメンテーションにご協力下さい。

説明

テンプレートタグ wp_list_pages()固定ページへのリンクのリスト (以下ページリストとする) を表示します。しばしばサイドバー/enヘッダー/en をカスタマイズするのに使われますが、他のテンプレートにも同様に使えるかもしれません。

使い方

<?php wp_list_pages( $args ); ?>

用例

初期設定での使用

<?php $args = array(
	'authors'      => '',
	'child_of'     => 0,
	'date_format'  => get_option( 'date_format' ),
	'depth'        => 0,
	'echo'         => 1,
	'exclude'      => '',
	'include'      => '',
	'link_after'   => '',
	'link_before'  => '',
	'post_type'    => 'page',
	'post_status'  => 'publish',
	'show_date'    => '',
	'sort_column'  => 'menu_order, post_title',
	'sort_order'   => '',
	'title_li'     => __('Pages'), 
	'walker'       => new Walker_Page
); ?>

デフォルトでは以下のように動作します。

  • すべてのページとサブページを表示します (階層制限はありません)
  • ページの作成日は表示しません
  • すべてのページの子ページに関する制限はありません
  • 除外されるページはありません
  • リストの見出しが「ページ」となります
  • 結果は echo されます (表示されます)
  • ページの作成者による制限はありません
  • ページのタイトル順にソートされます
  • 昇順にソートされます (上述の例には載っていません)
  • ページの親子関係をインデントして表示します (上述の例には載っていません)
  • すべてのページが含まれます (上述の例には載っていません)
  • 特定のメタキーやメタ情報による制限はありません (上述の例には載っていません)
  • 親子関係のないツリーを除く


パラメータ

参考: ほとんどの引数は get_pages() から引き継いでいます。

sort_column 
(文字列) ページのリストをいろいろな順序で並び替えます。デフォルトでは'ページタイトルのアルファベット順に並び替えます
  • 'post_title' - (タイトルを) アルファベット順に並び替えます - デフォルト
  • 'menu_order' - ページ順序によって並び替えます。要注意: ページ順序ページ ID に注意してください。ページ ID はそれぞれの記事やページにつけられた唯一の番号です。ページ順序は ページ > ページ編集画面でユーザーがつける番号のことです。上述の例をお読みください
  • 'post_date' - 作成日順に並び替えます
  • 'post_modified' - 最終更新日順に並び替えます
  • 'ID' - ページ ID 順に並び替えます
  • 'post_author' - ページ作成者の ID 順に並び替えます
  • 'post_name' - ページスラッグ (パーマリンク) のアルファベット順に並び替えます
注意: sort_column パラメータは WordPress のデータベースの wp_post テーブル内のあらゆるフィールドの記述子を使ってページのリストを並び替えることができます。
sort_order 
(文字列) ページリストの並び順を変更します (昇順または降順)。デフォルトは昇順です
  • 'ASC' - 低いほうから高いほうへ並び替えます(デフォルト)
  • 'DESC' - 高いほうから低いほうへ並び替えます
exclude 
(文字列) リストから除外したいページの ID をコンマで区切ったリストで定義します (例: 'exclude=3,7,31')。デフォルト値はありません。特定のページを除外する例をお読みください。
exclude_tree
文字列) 除外したい親ページの ID をカンマ区切りで指定します。指定した親ページとその子ページ全てを除外するには、このパラメータを使います。'exclude_tree=5' とすれば、ページ ID 5と、ページ ID 5を親とする子ページ全て(子も孫も全て)が除外されます。
(なお、このパラメータは バージョン 2.7 で追加されましたが、バージョン 2.8.1 の説明通りには動作しません - バグ報告を見てください。)
include 
(文字列) wp_list_pages で生成されるリストに特定のページだけを含めます。exclude と同様に、このパラメータもコンマで ID を区切ったリストで定義します。特定のページだけを含める例をお読みください
depth 
(整数) このパラメータは wp_list_pages で生成されるリストに含めるページの階層レベルを設定します。デフォルト値は 0 です (すべてのページとサブページを表示します)。
  • 0 - ページとサブページを親子関係を維持して (インデントして) 表示します (デフォルト)
  • -1 - ページとサブページを同列に (インデントなし) 表示します
  • 1 - トップレベルのページのみ表示します
  • 2, 3 - 2 (または3以上) の深さ (レベル) のページを表示します
child_of 
(整数) ページ ID を値としてそのページのサブページのみを表示します。デフォルト値は 0 です (すべてのページを表示)。
show_date 
(文字列) それぞれのページの作成日または最終更新日を表示します。デフォルト値はです (日付を表示しません)。
  • '' - 日付を表示しません (デフォルト)
  • 'modified' - 最終更新日を表示します
  • 上記以外 - modified 以外の値は作成日 (post_date) を表示します。上述の例をお読みください
date_format 
(文字列) show_date パラメータで使うページの日付の書式を設定します (例: "l, F j, Y")。このパラメータは WordPress の管理画面で設定した日付フォーマットをデフォルトとします。日付と時刻の書式PHPマニュアルの日時の書式化のページをお読みください
title_li 
(文字列) ページリストの見出しのテキストとスタイルを設定します。デフォルトは __('Pages') です。ブログ上では「ページ」と表示されます (__('')ローカライゼーションのためのものです)。空の値のとき ('') は見出しを表示しません。また、リストは <ul>, </ul> タグで包まれていません。見出しの例をお読みください
echo 
(論理値) ページリストを表示するか、PHP で使うために HTML テキストとして返すかを設定します。デフォルト値は 1 (リストを表示) です。
  • 1 (True) - デフォルト
  • 0 (False)
hierarchical 
(論理値) サブページを親ページの下にインデントして表示するかインラインで表示するかを設定します。デフォルトは true です (サブページを親ページの下にインデントして表示)
  • 1 (True) - デフォルト
  • 0 (False)
meta_key 
(文字列) ここに記述したカスタムフィールドキーを持つページだけを表示します (meta_value フィールドと同時に使います)。
meta_value 
(文字列) ここに記述したカスタムフィールド値を持つページだけを表示します (meta_key フィールドと同時に使います)。
link_before 
(文字列) <a> タグリンクの前に表示されるテキストまたは HTML (バージョン2.7.0で追加されたパラメータ )
link_after 
(文字列) <a> タグリンクの後に表示されるテキストまたは HTML (バージョン2.7.0で追加されたパラメータ )
authors 
(文字列) 指定した著者 ID (複数の場合はカンマで区切る) のページのみを表示します。指定しない場合は全著者が対象になります。
number 
(文字列) 表示するページの数を指定します。SQL LIMIT 値を指定します。デフォルト値は「制限無し」です。バージョン2.8で追加されました。注意: これは現在動作しません。Trac ticket #10230をお読みください。
offset 
(文字列) ページの取得開始位置を飛ばす数です。デフォルト値は、オフセット無しです。(バージョン2.8で追加されたパラメータ )
post_type
(文字列) 階層を持つ種類の、指定された投稿タイプの投稿をリストします。デフォルトは 'page' です。有効な値は:
  • 'page' - 固定ページ。
  • 'revision' - リビジョン。
  • 階層を持つカスタム投稿タイプ。
post_status
(文字列) 返したい投稿のステータスのタイプをコンマ区切りでリストにします。例えば: 'publish,private,draft'

用例

リストの見出しを隠す、変える

wp_list_pages() が表示するページリストのデフォルトの見出し (「ページ」) は title_li パラメータに空の値を入れると非表示にできます。以下の例はページリストの上に見出しのテキストを表示しません。

<ul>
<?php wp_list_pages( array( 'title_li' => '' ) ); ?>
</ul>

下記の例では ID が 9, 5, 23 のページだけを表示し、見出しのテキストを「Poetry」に置き換え、タグを <h2> に変更しています。

<ul>
<?php wp_list_pages( array(
    'include'  => array( 5, 9, 23 ),
    'title_li' => '<h2>' . __('Poetry') . '</h2>'
) ); ?>
</ul>

リストの順序を変える

下の例では ページ > 新規追加 で設定されたページ順序に従ってページリストを表示します。

<ul>
    <?php wp_list_pages( array( 'sort_column' => 'menu_order' ) ); ?>
</ul>

もしページ順序に従ってページリストを表示し、サイドバーに表示される見出しを「Prose」 (h2 タグスタイルで) と表示したい場合は、下のコードを sidebar.php ファイルに追加してください (サイドバーウィジェットを使用している場合は管理画面から)。

<ul>
    <?php wp_list_pages(
        'sort_column=menu_order&title_li=<h2>' . __('Prose') . '</h2>'
    ); ?>
</ul>

以下のコードを使うと、見出しなしでページ順序に従い表示します。

<ul>
    <?php wp_list_pages( 'sort_column=menu_order&title_li=' ); ?>
</ul>

作成日順に並び替える

この例はページの作成日でソートし、その日付をページごとに表示します。

<ul>
    <?php wp_list_pages( 'sort_column=post_date&show_date=created' ); ?>
</ul>

特定のページを除外する

exclude パラメータを使うと、wp_list_pages() が表示するページリストから特定のページを除外することができます。

<ul>
    <?php wp_list_pages( 'exclude=17,38' ); ?>
</ul>

特定のページだけを含める

特定のページだけをリストに含めたい場合 (例えば ID が 35, 7 ,26, 13 のページ) は、include パラメータを使用します。

<ul>
    <?php wp_list_pages(
        'include=7,13,26,35&title_li=<h2>' . __('Pages') . '</h2>'
    ); ?>
</ul>

サブページの表示 (WordPress 2.0.1 以前)

使用中の WordPress のテーマの page.php テンプレートの the_post() セクション内の the_content() の後にこれを追加するか、サブページがあるページの page.php テンプレートのコピーに追加します。

<ul>
    <?php
    global $id;
    wp_list_pages(
        "title_li=&child_of=$id&show_date=modified&date_format=$date_format"
    ); ?>
</ul>

注意: この例は WordPress 2.0.1 以降ではページテンプレートに追加しても $id というグローバル変数がセットされていないので機能しません。替わりに以下のコードを使用してください。

サブページの表示 (WordPress 2.0.1 以降)

注意: サブページがない場合でも、HTML タグ (<ul><ol>) が表示されます。スタイルシートを使ってリストのデザインをしている場合はこのことを覚えておいてください。

<ul>
    <?php
    wp_list_pages(
        'title_li=&child_of='.$post->ID.'&show_date=modified&date_format=$date_format'
    ); ?>
</ul>

以下の例は表示中のページに子ページ (表示中のページを親ページと設定しているページ) が存在する場合のみリストを表示します。

<?php
$children = wp_list_pages( 'title_li=&child_of='.$post->ID.'&echo=0' );
if ( $children ) { ?>
    <ul>
        <?php echo $children; ?>
    </ul>
<?php } ?>

サブページの中でもサブページのリストを表示する

上述の例では親ページでは子ページを表示しますが、子ページでは表示しません。次のコードは親ページでも子ページでも、子ページのリストを表示します。

注: このコードは、サイドバーのウィジェットブロックの後ろに置くと動作しません。

<?php
if ( $post->post_parent )
    $children = wp_list_pages( "title_li=&child_of=".$post->post_parent."&echo=0" );
else
    $children = wp_list_pages( "title_li=&child_of=".$post->ID."&echo=0" );
if ($children) { ?>
    <ul>
        <?php echo $children; ?>
    </ul>
<?php } ?>

次の例は別の方法です。このコードは sidebar.php の中にあり、トップ階層のページにのみ表示されます。しかし子ページを持つ(もしくはそのページ自身が子ページである)ページを参照するとき、その親ページの子ページのみを表示します。

  • メインページを参照するとき、全てのトップ階層のページはサイドバーの中にリスト化されます。
  • 子ページを持たないトップ階層のページを参照するとき、全てのトップ階層のページがリスト化されます。
  • 子ページを持つトップ階層のページを参照するとき、子ページとそれよりも下層のページがリスト化されます。
  • 親ページの子ページとそれよりも下層ページを参照するとき、リスト化されます。
<?php
$output = wp_list_pages( 'echo=0&depth=1&title_li=<h2>Top Level Pages </h2>' );
if ( is_page() ) {
    $page = $post->ID;
    if ( $post->post_parent ) {
        $page = $post->post_parent;
    }
    $children = wp_list_pages( 'echo=0&child_of=' . $page . '&title_li=' );
    if ( $children ) {
        $output = wp_list_pages ( 'echo=0&child_of=' . $page . '&title_li=<h2>Child Pages</h2>' );
    }
}
echo $output;
?>

指定した親のすべての子孫ページをリストする

次の例はすべてのトップレベルページと下記のページをリストします。

  • トップレベルページを指定すると - そのページの子ページ
  • サブページを指定すると - その兄弟ページ、ただし他のトップページの子ではないもの
<?php
$ancestor_id = 1843;	//このコードは仮のもの。
$descendants = get_pages( array( 'child_of' => $ancestor_id ) );
$incl = "";

foreach ( $descendants as $page ) {
	if ( ( $page->post_parent == $ancestor_id ) ||
		 ( $page->post_parent == $post->post_parent ) ||
		 ( $page->post_parent == $post->ID ) )
	{
		 $incl .= $page->ID . ",";
	}
}?>

<ul>
	<?php wp_list_pages( array(
		"child_of" => $ancestor_id, 
		"include" => $incl, 
		"link_before" => "", 
		"title_li" => "", 
		"sort_column" => "menu_order" ) ); ?>
</ul>

全てのサブページをリスト表示

次の例はすべてのサブページをリスト表示します。

<?php
if( ! $post->post_parent ) {
    // Will display the subpages of this top level page.
    $children = wp_list_pages( array(
        'title_li' => '',
        'child_of' => $post->ID,
        'echo'     => 0
    ) );
} else {
    if ( $post->ancestors ) {
        /*
         * Now you can get the the top ID of this page. WordPress is putting the ids DESC,
         * thats why the top level ID is the last one.
         */
        $ancestors = get_post_ancestors( $this_page );
        $children  = wp_list_pages( array(
            'title_li' => '',
            'child_of' => $ancestors,
            'echo'     => 0
        ) );
    }
}
 
if ( $children ) : ?>
    <ul>
        <?php echo $children; ?>
    </ul>
<?php endif; ?>

親ページとすべての子孫ページを表示

特定の親ページから始まるツリー (親と全世代の子孫ページ) を表示する指定方法は wp_list_pages() にありません。そこで次の例は、ある親ページのすべての子ページを get_pages() を使って取得した後、wp_list_pages() を使って「家系図」を表示します。

<?php 
// wp_list_pages を使ってある親ページとすべての世代の子ページをツリー表示する。
$parent = 93;
$args   = array( 'child_of' => $parent );
$pages  = get_pages( $args );
 
if ( $pages ) {
    $pageids = array();
    foreach ( $pages as $page ) {
        $pageids[] = $page->ID;
    }
 
    $args = array(
        'title_li' => sprintf( __( 'Tree of Parent Page %s', 'textdomain' ), $parent ),
        'include'  =>  $parent . ',' . implode( ",", $pageids )
    );
    wp_list_pages( $args );
}
?>

現在のページと先祖ページと子ページをリスト表示

次の例は現在の固定ページと、そのページの先祖ページおよび子ページをリスト表示します。 child_of はすべての子孫ページを表示するので、代わりに wpdb を使って直接の子ページだけを取得します。

<?php
// 親ページがある場合。
if( $post->post_parent ) {
    // 先祖ページを取得。
    $relations = get_post_ancestors( $post->ID );
 
    // 直接の子ページを取得。
    $result = $wpdb->get_results( $wpdb->prepare( "SELECT ID FROM wp_posts WHERE post_parent = %s AND post_type = %s", $post->ID, 'page' ) );
    if ( $result ) {
        foreach ( $result as $page ) {
            array_push( $relations, $page->ID );
        }
    }
 
    // 現在のページをリストへ追加。
    array_push( $relations, $post->ID );
 
    // 子と先祖と自ページをコンマ区切りリストにする。
    $relations_string = implode( ",",$relations );
 
    // include を使って集めたページだけをリスト表示する。
    $sidelinks = wp_list_pages( array(
        'title_li' => '',
        'echo'     => 0,
        'include'  => $relations_string
    ) );
} else {
    // ルートレベルのページと直接の子ページだけを表示。
    $sidelinks = wp_list_pages( array(
        'title_li' => '',
        'echo'     => 0,
        'depth'    => 1,
        'child_of' => $post->ID
    ) );
}
 
if ( $sidelinks ) : ?>
    <h2><?php the_title(); ?></h2>
    <ul>
        <?php
        // リンクは <li> タグで囲まれている。
        echo $sidelinks;
        ?>
    </ul>         
<?php endif; ?>

最上位の祖先ページとその直接の子ページをリスト表示

次の例は現在のページに関して、最上位の先祖ページとその直接の子ページを表示します。これはすっきりした二次サブナビゲーションに役立ちます。

まず、下記の関数を作成します (テーマで使うなら functions.php に記述するのが良いでしょう):

if ( ! function_exists( 'wpdocs_get_post_top_ancestor_id' ) ) {
/**
 * Gets the id of the topmost ancestor of the current page.
 *
 * Returns the current page's id if there is no parent.
 * 
 * @return int ID of the top ancestor page.
 */
function wpdocs_get_post_top_ancestor_id() {
    if ( ! $post = get_post() ) {
        return;
    }
     
    $top_ancestor = $post->ID;
    if ( $post->post_parent ) {
        $ancestors = array_reverse( get_post_ancestors( $post->ID ) );
        $top_ancestor = $ancestors[0];
    }
     
    return $top_ancestor;
}
} // Exists.

次に、テーマへ下記のコードを追加します (メニューを表示したいところへ):

<ul class="clearfix">
    <?php
    wp_list_pages( array(
        'title_li' => '',
        'include'  => wdocs_get_post_top_ancestor_id()
    ) );
     
    wp_list_pages( array(
        'title_li' => '',
        'depth'    => 1,
        'child_of' => wpdocs_get_post_top_ancestor_id()
    ) );
    ?>
</ul>

ホームページのリスト

ブログページへのリンクを同様に表示したい場合は wp_page_menu() を使ってください。

カスタム投稿タイプのリストのメンバー

階層を持つカスタム投稿タイプであれば、wp_list_pages() を使ってそのリストを表示できます。次の例はカスタム投稿タイプ Portfolio を表示します:

<?php 
$args = array(
    'post_type' => 'portfolio',
    'title_li'  => __( 'Portfolio', 'textdomain' )
);
wp_list_pages( $args );
?> 

ページアイテムのマークアップとデザイン

デフォルトでは、wp_list_pages()ページ > 新規追加 で作成した WordPress ページを入れ子で順不同のリストに表示します。あなたは最外部のアイテム (li.pagenav) をなくすことも、title_li パラメータを空の値にすることもできます。

wp_list_pages() が表示するすべてのリストアイテム (li) には page_item というクラスが付けられています。wp_list_pages() をページ表示時に呼び出すと、そのページを指すリストアイテムには current_page_item というクラスが追加されます。

<li class="pagenav">
Pages [title_li]
  <ul>
    <!-- Output starts here if 'title_li' parameter is empty -->
    <li class="page-item-2 page_item current_page_ancestor current_page_parent">
      [parent of the current Page]
      <ul>
        <li class="page-item-21 page_item current_page_item">
          [the current Page]
        </li>
      </ul>
    </li>
    <li class="page-item-3 page_item">
      [another Page]
    </li>
  </ul>
</li>

これらは CSS セレクタでデザインできます。

.pagenav { … } /* the outermost list item; contains whole list */
.page-item-2 { … } /* item for Page ID 2 */
.page_item { … } /* any Page item */
.current_page_item { … } /* the current Page */
.current_page_parent { … } /* parent of the current Page */
.current_page_ancestor { … } /* any ancestor of the current Page */

参考

変更履歴

  • 2.8 : パラメータ 'number', 'offset' が追加されました。
  • 2.7 : パラメータ 'link_before', 'link_after', 'exclude_tree' が追加されました。
  • 1.5 : 新規テンプレートタグ

ソースファイル

wp_list_pages()wp-includes/post-template.php にあります。


リスト・ドロップダウン関数: wp_list_authors(), wp_list_categories(), wp_list_pages(), wp_list_bookmarks(), wp_list_comments(), wp_get_archives(), wp_page_menu(), wp_dropdown_pages(), wp_dropdown_categories(), wp_dropdown_users()


記事

コードドキュメンテーション

  • クラス: WP_Query - WP_Query クエリの詳細概要
  • オブジェクト: $wpdb - $wpdb オブジェクトの使い方概要
  • 関数: get_query_var()
  • 関数: query_posts() - 追加カスタムクエリの作成
  • 関数: get_post() - 項目の ID を使ってその投稿のレコードをデータベースから取得する
  • 関数: get_posts() - 項目の配列を返す特別な関数。
  • 関数: get_pages() - ページの配列を返す特別な関数。
  • 関数: have posts() - クエリが記事を返すかどうか判断する条件分岐。
  • 関数: the_post() - クエリの後に自動的にループを設定するのに使われる。
  • 関数: rewind_posts() - 現在のループをクリアする。
  • 関数: setup_postdata() - ループ内で単一クエリ結果のデータを設定する。
  • 関数: wp_reset_postdata() - 以前のクエリを復元する(通常、ループ内のもう一つのループで使われる)。
  • 関数: wp_reset_query()
  • 関数: is_main_query() - 変更するのがメインクエリであるよう保証する。
  • アクションフック: pre_get_posts - 実行される前に WordPress クエリを変更する。
  • アクションフック: the_post - 投稿オブジェクトをクエリの後に変更する。
  • フィルターフック: found_posts - found_posts WP_Query オブジェクトの値を変更する


関連

固定ページ: get_all_page_ids(), get_ancestors(), get_page_link(), get_page_by_path(), get_page_by_title(), get_page_children(), get_page_hierarchy(), get_page_uri() /en, get_pages(), is_page(), page_uri_index() /en, wp_list_pages(), wp_page_menu()


リスト・ドロップダウン関数: wp_list_authors(), wp_list_categories(), wp_list_pages(), wp_list_bookmarks(), wp_list_comments(), wp_get_archives(), wp_page_menu(), wp_dropdown_pages(), wp_dropdown_categories(), wp_dropdown_users()


関数リファレンステンプレートタグ目次もご覧ください。


最新英語版: WordPress Codex » Template Tags/wp_list_pages最新版との差分