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

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

提供: WordPress Codex 日本語版
移動先: 案内検索
(en:Template Tags/wp_list_pages 2007年12月14日 (金) 19:06 Kchrist 版)
 
(残りを和訳(これで全部)。)
 
(6人の利用者による、間の24版が非表示)
1行目: 1行目:
== Description ==
+
{{CheckTrans}}
The Template Tag, '''wp_list_pages()''', displays a list of WordPress [[Pages]] as links. It is often used to customize the [[Customizing_Your_Sidebar|Sidebar]] or [[Designing_Headers|Header]], but may be used in other [[Templates]] as well.
+
  
This [[Template Tags|Template Tag]] is available for WordPress versions 1.5 and newer.
+
== 説明<span id="Description"></span> ==
  
== Usage ==
+
テンプレートタグ [[テンプレートタグ/wp_list_pages|wp_list_pages()]] は[[Pages|固定ページ]]へのリンクのリスト (以下ページリストとする) を表示します。しばしば[[サイドバーのカスタマイズ|サイドバー]]/[[:en:Customizing_Your_Sidebar|en]] や[[Designing_Headers|ヘッダー]]/[[:en:Designing_Headers|en]] をカスタマイズするのに使われますが、他の[[テンプレート]]にも同様に使えるかもしれません。
%%% <?php wp_list_pages('arguments'); ?> %%%
+
  
== Examples ==
+
== 使い方<span id="Usage"></span> ==
 +
 
 +
<?php wp_list_pages( $args ); ?>
 +
 
 +
== 用例<span id="Examples"></span> ==
 +
 
 +
=== 初期設定での使用<span id="Default_Usage"></span> ===
  
===Default Usage===
 
 
<pre>
 
<pre>
$defaults = array(
+
<?php $args = array(
    'depth'       => 0,  
+
'authors'     => '',
    'show_date'   => '',
+
'child_of'     => 0,
    'date_format' => get_option('date_format'),
+
'date_format' => get_option( 'date_format' ),
    'child_of'   => 0,  
+
'depth'       => 0,
    'exclude'     => '',
+
'echo'        => 1,
    'title_li'    => __('Pages'),  
+
'exclude'     => '',
    'echo'       => 1,
+
'include'      => '',
    'authors'     => '',
+
'link_after'  => '',
    'sort_column' => 'menu_order, post_title');
+
'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
 +
); ?>
 
</pre>
 
</pre>
  
By default, the usage shows:
+
デフォルトでは以下のように動作します。
* All Pages and sub-pages are displayed (no depth restriction)
+
* すべてのページとサブページを表示します (階層制限はありません)
* Date created is not displayed
+
* ページの作成日は表示しません
* Is not restricted to the child_of any Page
+
* すべてのページの子ページに関する制限はありません
* No pages are excluded
+
* 除外されるページはありません
* The title of the pages listed is "Pages"
+
* リストの見出しが「ページ」となります
* Results are echoed (displayed)
+
* 結果は echo されます (表示されます)
* Is not restricted to any specific author
+
* ページの作成者による制限はありません
* Sorted by Page Order then Page Title.
+
* ページのタイトル順にソートされます
* Sorted in ascending order (not shown in defaults above)
+
* 昇順にソートされます (上述の例には載っていません)
* Pages displayed in a hierarchical indented fashion (not shown in defaults above)
+
* Includes all Pages (not shown in defaults above)
+
* Not restricted to Pages with specific meta key/meta value (not shown in defaults above)
+
+
wp_list_pages();
+
  
=== Hiding or Changing the List Heading ===
+
* ページの親子関係をインデントして表示します (上述の例には載っていません)
The default heading of the list ("Pages") of Pages generated by ''wp_list_pages'' can be hidden by passing a null or empty value to the '''title_li''' parameter. The following example displays no heading text above the list.
+
* すべてのページが含まれます (上述の例には載っていません)
 +
* 特定のメタキーやメタ情報による制限はありません (上述の例には載っていません)
 +
* 親子関係のないツリーを除く
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
 
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
 
<tt>
 
&lt;ul&gt; <br />
 
&lt;?php<br />
 
wp_list_pages('title_li='); ?&gt; <br />
 
&lt;/ul&gt;
 
</tt>
 
</div>
 
  
In the following example, only Pages with IDs 9, 5, and 23 are included in the list and the heading text has been changed to the word "Poetry", with a heading style of <tt><nowiki><h2></nowiki></tt>:
+
== パラメータ<span id="Parameters"></span> ==
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
'''参考:''' ほとんどの引数は <tt>[[関数リファレンス/get_pages#Parameters|get_pages()]]</tt> から引き継いでいます。
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
<tt>
+
&lt;ul&gt; <br />
+
&lt;?php<br />
+
wp_list_pages('include=5,9,23&title_li=&lt;h2&gt;' . __('Poetry') . '&lt;/h2&gt;' ); ?&gt; <br />  
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
=== List Pages by Page Order ===
+
; '''sort_column''' : (''文字列'') ページのリストをいろいろな順序で並び替えます。デフォルトでは'ページタイトルのアルファベット順''に並び替えます
The following example lists the Pages in the order defined by the '''Page Order''' settings for each Page in the [[Administration_Panels#Write_Page|Write]] > [[Write_Page_SubPanel|Page]] administrative panel.
+
:* <tt>'post_title'</tt> - (タイトルを) アルファベット順に並び替えます - デフォルト
 +
:* <tt>'menu_order'</tt> - ページ順序によって並び替えます。'''要注意:''' ''ページ順序''と''ページ ID'' に注意してください。ページ ID はそれぞれの記事やページにつけられた唯一の番号です。ページ順序は [[管理画面#Pages|ページ]] > [[Pages Add New SubPanel|ページ編集]]画面でユーザーがつける番号のことです。[[#List Pages by Page Order|上述の例]]をお読みください
 +
:* <tt>'post_date'</tt> - 作成日順に並び替えます
 +
:* <tt>'post_modified'</tt> - 最終更新日順に並び替えます
 +
:* <tt>'ID'</tt> - ページ ID 順に並び替えます
 +
:* <tt>'post_author'</tt> - ページ作成者の ID 順に並び替えます
 +
:* <tt>'post_name'</tt> - [[用語集#Slug|ページスラッグ]] (パーマリンク) のアルファベット順に並び替えます
 +
: '''注意''':  '''sort_column''' パラメータは WordPress のデータベースの [[データベース概要#Table:_wp_posts|wp_post テーブル]]内のあらゆるフィールドの記述子を使ってページのリストを並び替えることができます。
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
; '''sort_order''' : (''文字列'') ページリストの並び順を変更します (昇順または降順)。デフォルトは''昇順''です
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
:* <tt>'ASC'</tt> - 低いほうから高いほうへ並び替えます(デフォルト)
<tt>
+
:* <tt>'DESC'</tt> - 高いほうから低いほうへ並び替えます
&lt;ul&gt; <br />
+
&lt;?php<br />
+
wp_list_pages('sort_column=menu_order'); ?&gt; <br />
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
If you wanted to sort the list by Page Order and display the word "Prose" as the list heading (in h2 style) on a Sidebar, you could add the following code to the sidebar.php file:
+
; '''exclude''' : (''文字列'') リストから除外したいページの ID をコンマで区切ったリストで定義します (例: <tt>'exclude=3,7,31'</tt>)。デフォルト値はありません。[[#Exclude Pages from List|特定のページを除外する例]]をお読みください。
  
<div style="padding: 1em; border: 1px dashed #2f6fab;  
+
; '''exclude_tree'''
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
: (''文字列'') 除外したい親ページの ID をカンマ区切りで指定します。指定した親ページとその子ページ全てを除外するには、このパラメータを使います。<tt>'exclude_tree=5'</tt> とすれば、ページ ID 5と、ページ ID 5を親とする子ページ全て(子も孫も全て)が除外されます。
<tt>
+
: (なお、このパラメータは [[Version 2.7|バージョン 2.7]] で追加されましたが、バージョン 2.8.1 の説明通りには動作しません - [http://core.trac.wordpress.org/ticket/8683 バグ報告を見てください]。)
&lt;ul&gt; <br />
+
&lt;?php<br />
+
wp_list_pages('sort_column=menu_order&title_li=&lt;h2&gt;' . __('Prose') . '&lt;/h2&gt;' ); ?&gt; <br />
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
Using the following piece of code, the Pages will display without heading and in ''Page Order'':
+
; '''include''' : (''文字列'') ''wp_list_pages'' で生成されるリストに特定のページだけを含めます。'''exclude''' と同様に、このパラメータもコンマで ID を区切ったリストで定義します。[[#Include Pages in List|特定のページだけを含める例]]をお読みください
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
; '''depth''' : (''整数'') このパラメータは ''wp_list_pages'' で生成されるリストに含めるページの階層レベルを設定します。デフォルト値は '''0''' です (すべてのページとサブページを表示します)。
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
:* <tt>0</tt> - ページとサブページを親子関係を維持して (インデントして) 表示します (デフォルト)
<tt>
+
:* <tt>-1</tt> - ページとサブページを同列に (インデントなし) 表示します
&lt;ul&gt; <br />
+
:* <tt>1</tt> - トップレベルのページのみ表示します
&lt;?php<br />
+
:* <tt>2</tt>, <tt>3</tt> - 2 (または3以上) の深さ (レベル) のページを表示します
wp_list_pages('sort_column=menu_order&title_li='); ?&gt; <br />  
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
=== Sort Pages by Post Date===
+
; '''child_of''' : (''整数'') ページ ID を値としてそのページのサブページのみを表示します。デフォルト値は '''0''' です (すべてのページを表示)。
This example displays Pages sorted by (creation) date, and shows the date next to each Page list item.
+
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
; '''show_date''' : (''文字列'') それぞれのページの作成日または最終更新日を表示します。デフォルト値は''空''です (日付を表示しません)。
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
:* <tt><nowiki>''</nowiki></tt> - 日付を表示しません (デフォルト)
<tt>
+
:* <tt>'modified'</tt> - 最終更新日を表示します
&lt;ul&gt; <br />
+
:* 上記以外 - ''modified'' 以外の値は作成日 ('''post_date''') を表示します。[[#Sort Pages by Post Date|上述の例]]をお読みください
&lt;?php<br />
+
wp_list_pages('sort_column=post_date&show_date=created'); ?&gt; <br />  
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
=== Exclude Pages from List ===
+
; '''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マニュアルの日時の書式化のページ]をお読みください
Use the '''exclude''' parameter hide certain Pages from the list to be generated by ''wp_list_pages''. Excluding a Page will also exclude all of its sub-pages from the list to be generated. <!-- '''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 -->
+
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
; '''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|見出しの例]]をお読みください
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
<tt>
+
&lt;ul&gt; <br />
+
&lt;?php<br />
+
wp_list_pages('exclude=17,38' ); ?&gt; <br />  
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
=== Include Pages in List ===
+
; '''echo''' : (''論理値'') ページリストを表示するか、PHP で使うために HTML テキストとして返すかを設定します。デフォルト値は '''1''' (リストを表示) です。
To include only certain Pages in the list, for instance, Pages with ID numbers 35, 7, 26 and 13, use the '''include''' parameter. <!--'''Note''': Page numbers must be in ascending order (i.e. <tt>'include=7,13,26,35'</tt> and not <tt>'include=35,7,26,13'</tt>).  this does not seem to be true at least at 2.1.3-->
+
:* <tt>1 (True)</tt> - デフォルト
 +
:* <tt>0 (False)</tt>
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
; hierarchical : (''論理値'') サブページを親ページの下にインデントして表示するかインラインで表示するかを設定します。デフォルトは ''true'' です (サブページを親ページの下にインデントして表示)
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
:* <tt>1 (True)</tt> - デフォルト
<tt>
+
:* <tt>0 (False)</tt>
&lt;ul&gt; <br />
+
&lt;?php<br />
+
wp_list_pages('include=7,13,26,35&title_li=&lt;h2>' . __('Pages') . '&lt;/h2>' ); ?&gt; <br />  
+
&lt;/ul&gt;
+
</tt>
+
</div>
+
  
=== List Sub-Pages (versions prior to Wordpress 2.0.1)===
+
; meta_key : (''文字列'') ここに記述したカスタムフィールドキーを持つページだけを表示します (meta_value フィールドと同時に使います)
Put this inside the <tt>the_post()</tt> section of the page.php template of your WordPress theme after <tt>the_content()</tt>, or put it in a copy of the page.php template that you use for pages that have sub-pages:
+
  
<div style="padding: 1em; border: 1px dashed #2f6fab;  
+
; meta_value : (''文字列'') ここに記述したカスタムフィールド値を持つページだけを表示します (meta_key フィールドと同時に使います)。
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
 
<tt>
+
; '''link_before''' : (''文字列'') <a> タグリンクの前に表示されるテキストまたは HTML ([[Version 2.7|バージョン2.7.0]]で追加されたパラメータ )
&lt;ul&gt; <br />
+
; '''link_after''' : (''文字列'') <a> タグリンクの後に表示されるテキストまたは HTML ([[Version 2.7|バージョン2.7.0]]で追加されたパラメータ )
&lt;?php<br />
+
; '''authors''' : (''文字列'') 指定した著者 ID (複数の場合はカンマで区切る) のページのみを表示します。指定しない場合は全著者が対象になります。
global $id;
+
; '''number''' : (''文字列'') 表示するページの数を指定します。SQL LIMIT 値を指定します。デフォルト値は「制限無し」です。[[Version 2.8|バージョン2.8]]で追加されました。'''注意:''' これは現在動作しません。[http://core.trac.wordpress.org/ticket/10230 Trac ticket #10230]をお読みください。
// teensy bit insane, sorry <br />
+
; '''offset''' : (''文字列'') ページの取得開始位置を飛ばす数です。デフォルト値は、オフセット無しです。([[Version 2.8|バージョン2.8]]で追加されたパラメータ )
$date_format = '<\b\r /><\s\p\a\n '.
+
 
'\s\t\y\l\e="\f\o\n\t-\s\i\z\e: \s\m\a\l\l\e\r">'.
+
; '''post_type''': (''文字列'') 階層を持つ種類の、指定された[[Post Types|投稿タイプ]]の投稿をリストします。デフォルトは 'page' です。有効な値は:
'\l\a\s\t\m\o\d Y-n-j</\s\p\a\n>';
+
:* '<tt>page</tt>' - 固定ページ。
wp_list_pages("title_li=&child_of=$id&show_date=modified<br />
+
:* '<tt>revision</tt>' - リビジョン。
&date_format=$date_format"); ?&gt; <br />  
+
:* 階層を持つカスタム投稿タイプ。
&lt;/ul&gt;
+
 
</tt>
+
; '''post_status''': (''文字列'') 返したい投稿のステータスのタイプをコンマ区切りでリストにします。例えば: <code>'publish,private,draft'</code>
</div>
+
 
 +
== 用例<span id="Examples"></span> ==
 +
 
 +
=== リストの見出しを隠す、変える<span id="Hiding_or_Changing_the_List_Heading"></span> ===
 +
 
 +
''wp_list_pages()'' が表示するページリストのデフォルトの見出し (「ページ」) は '''title_li''' パラメータに空の値を入れると非表示にできます。以下の例はページリストの上に見出しのテキストを表示しません。
 +
 
 +
<pre><ul>
 +
<?php wp_list_pages( array( 'title_li' => '' ) ); ?>
 +
</ul></pre>
 +
 
 +
下記の例では ID が 9, 5, 23 のページだけを表示し、見出しのテキストを「Poetry」に置き換え、タグを <tt><nowiki><h2></nowiki></tt> に変更しています。
 +
 
 +
<pre><ul>
 +
<?php wp_list_pages( array(
 +
    'include'  => array( 5, 9, 23 ),
 +
    'title_li' => '<h2>' . __('Poetry') . '</h2>'
 +
) ); ?>
 +
</ul></pre>
 +
 
 +
=== リストの順序を変える<span id="List_Pages_by_Page_Order"></span> ===
 +
 
 +
下の例では [[管理パネル#Pages|ページ]] > [[Pages Add New SubPanel|新規追加]] で設定された'''ページ順序'''に従ってページリストを表示します。
 +
 
 +
<pre><ul>
 +
    <?php wp_list_pages( array( 'sort_column' => 'menu_order' ) ); ?>
 +
</ul></pre>
 +
 
 +
もしページ順序に従ってページリストを表示し、サイドバーに表示される見出しを「Prose」 (h2 タグスタイルで) と表示したい場合は、下のコードを sidebar.php ファイルに追加してください (サイドバーウィジェットを使用している場合は管理画面から)。
 +
 
 +
<pre><ul>
 +
    <?php wp_list_pages(
 +
        'sort_column=menu_order&title_li=<h2>' . __('Prose') . '</h2>'
 +
    ); ?>
 +
</ul></pre>
 +
 
 +
以下のコードを使うと、見出しなしで''ページ順序''に従い表示します。
 +
 
 +
<pre><ul>
 +
    <?php wp_list_pages( 'sort_column=menu_order&title_li=' ); ?>
 +
</ul></pre>
 +
 
 +
=== 作成日順に並び替える<span id="Sort_Pages_by_Post_Date"></span> ===
 +
 
 +
この例はページの作成日でソートし、その日付をページごとに表示します。
 +
 
 +
<pre><ul>
 +
    <?php wp_list_pages( 'sort_column=post_date&show_date=created' ); ?>
 +
</ul></pre>
 +
 
 +
=== 特定のページを除外する<span id="Exclude_Pages_from_List"></span> ===
 +
 
 +
'''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 -->
 +
 
 +
<pre><ul>
 +
    <?php wp_list_pages( 'exclude=17,38' ); ?>
 +
</ul></pre>
 +
 
 +
=== 特定のページだけを含める<span id="Include_Pages_in_List"></span> ===
  
<span style="color:#c00;">NOTE: This example does not work with Wordpress 2.0.1 or newer if placed in a page template because the global $id is not set. Use the following code</span>
+
特定のページだけをリストに含めたい場合 (例えば ID が 35, 7 ,26, 13 のページ) は、'''include''' パラメータを使用します。
 +
<!--'''Note''': Page numbers must be in ascending order (i.e. <tt>'include=7,13,26,35'</tt> and not <tt>'include=35,7,26,13'</tt>).  this does not seem to be true at least at 2.1.3-->
  
=== List Sub-Pages (Wordpress 2.0.1 or newer)===
+
<pre><ul>
NOTE: Requires an HTML tag (either <tt><nowiki><ul></nowiki></tt> or <tt><nowiki><ol></nowiki></tt>) even if  there are no subpages. Keep this in mind if you are using css to style the list.
+
    <?php wp_list_pages(
 +
        'include=7,13,26,35&title_li=<h2>' . __('Pages') . '</h2>'
 +
    ); ?>
 +
</ul></pre>
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
<div id="List_Sub-Pages_.28versions_prior_to_Wordpress_2.0.1.29">
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
=== サブページの表示 (WordPress 2.0.1 以前) ===
<tt>
+
&lt;ul&gt; <br />
+
&lt;?php<br />
+
wp_list_pages('title_li=&child_of='.$post->ID.'&show_date=modified<br />
+
&date_format=$date_format'); ?&gt; <br />
+
&lt;/ul&gt;
+
</tt>
+
 
</div>
 
</div>
 +
使用中の WordPress のテーマの page.php テンプレートの <tt>the_post()</tt> セクション内の <tt>the_content()</tt> の後にこれを追加するか、サブページがあるページの page.php テンプレートのコピーに追加します。
  
The following example will generate a list only if there are child (Pages that designate the current page as a Parent) for the current Page:
+
<pre><ul>
 +
    <?php
 +
    global $id;
 +
    wp_list_pages(
 +
        "title_li=&child_of=$id&show_date=modified&date_format=$date_format"
 +
    ); ?>
 +
</ul></pre>
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
<p class="important">注意: この例は WordPress 2.0.1 以降ではページテンプレートに追加しても $id というグローバル変数がセットされていないので機能しません。替わりに以下のコードを使用してください。</p>
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
 
<tt>
+
<div id="List_Sub-Pages_.28Wordpress_2.0.1_or_newer.29">
&lt;?php<br />
+
=== サブページの表示 (WordPress 2.0.1 以降) ===
$children = wp_list_pages('title_li=&child_of='.$post->ID.'&echo=0');<br />
+
if ($children) { ?&gt; <br />
+
&lt;ul&gt; <br />
+
&lt;?php echo $children; ?&gt; <br />
+
&lt;/ul&gt; <br />
+
&lt;?php } ?&gt;
+
</tt>
+
 
</div>
 
</div>
 +
注意: サブページがない場合でも、HTML タグ (<tt><nowiki><ul></nowiki></tt> や <tt><nowiki><ol></nowiki></tt>) が表示されます。スタイルシートを使ってリストのデザインをしている場合はこのことを覚えておいてください。
  
=== List subpages even if on a subpage ===
+
<pre><ul>
The above examples will only show the children from the parent page, but not when actually on a child page.  This code will show the child pages, and only the child pages, when on a parent or on one of the children.
+
    <?php
 +
    wp_list_pages(
 +
        'title_li=&child_of='.$post->ID.'&show_date=modified&date_format=$date_format'
 +
    ); ?>
 +
</ul></pre>
  
** warning ** This code will not work if placed after a widget block in the sidebar.
+
以下の例は表示中のページに子ページ (表示中のページを親ページと設定しているページ) が存在する場合のみリストを表示します。
  
 +
<pre><?php
 +
$children = wp_list_pages( 'title_li=&child_of='.$post->ID.'&echo=0' );
 +
if ( $children ) { ?>
 +
    <ul>
 +
        <?php echo $children; ?>
 +
    </ul>
 +
<?php } ?>
 +
</pre>
  
<div style="padding: 1em; border: 1px dashed #2f6fab;
+
<div id="List_subpages_even_if_on_a_subpage">
color: Black; background-color: #f9f9f9; line-height: 1.1em; font-size: 0.9em;">
+
=== サブページの中でもサブページのリストを表示する ===
<tt>
+
&lt;?php<br />
+
if($post->post_parent)<br />
+
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
+
else<br />
+
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");<br />
+
if ($children) { ?&gt;<br />
+
&lt;ul&gt; <br />
+
&lt;?php echo $children; ?&gt; <br />
+
&lt;/ul&gt; <br />
+
&lt;?php } ?&gt;
+
</tt>
+
 
</div>
 
</div>
 +
上述の例では親ページでは子ページを表示しますが、子ページでは表示しません。次のコードは親ページでも子ページでも、子ページのリストを表示します。
  
=== Markup and styling of page items ===
+
'''注:''' このコードは、サイドバーのウィジェットブロックの後ろに置くと動作しません。
  
By default, '''wp_list_pages()''' generates a nested, unordered list of WordPress [[Pages]] created with the [[Administration_Panels#Write_Page|Write]] > [[Write_Page_SubPanel|Page]] admin panel. You can remove the outermost item (<tt>li.pagenav</tt>) and list (<tt>ul</tt>) by setting the <var>title_li</var> parameter to an empty string.
+
<pre><?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 } ?>
 +
</pre>
  
All list items (<tt>li</tt>) generated by '''wp_list_pages()''' are marked with the class <tt>page_item</tt>. When '''wp_list_pages()''' is called while displaying a Page, the list item for that Page is given the additional class <tt>current_page_item</tt>.
+
次の例は別の方法です。このコードは sidebar.php の中にあり、トップ階層のページにのみ表示されます。しかし子ページを持つ(もしくはそのページ自身が子ページである)ページを参照するとき、その親ページの子ページのみを表示します。
 +
 
 +
* メインページを参照するとき、全てのトップ階層のページはサイドバーの中にリスト化されます。
 +
* 子ページを持たないトップ階層のページを参照するとき、全てのトップ階層のページがリスト化されます。
 +
* 子ページを持つトップ階層のページを参照するとき、子ページとそれよりも下層のページがリスト化されます。
 +
* 親ページの子ページとそれよりも下層ページを参照するとき、リスト化されます。
 +
 
 +
<pre><?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;
 +
?></pre>
 +
 
 +
==== 指定した親のすべての子孫ページをリストする<span id="List all top-level pages and subpages only of this parent"></span> ====
 +
 
 +
次の例はすべてのトップレベルページと下記のページをリストします。
 +
:* トップレベルページを指定すると - そのページの子ページ
 +
:* サブページを指定すると - その兄弟ページ、ただし他のトップページの子ではないもの
  
 
<pre>
 
<pre>
<li class="pagenav">
+
<?php
  Pages
+
$ancestor_id = 1843; //このコードは仮のもの。
  <ul>
+
$descendants = get_pages( array( 'child_of' => $ancestor_id ) );
    <li class="page_item current_page_parent">
+
$incl = "";
      [parent of the current page]
+
 
      <ul>
+
foreach ( $descendants as $page ) {
        <li class="page_item current_page_item">
+
if ( ( $page->post_parent == $ancestor_id ) ||
          [the current page]
+
( $page->post_parent == $post->post_parent ) ||
        </li>
+
( $page->post_parent == $post->ID ) )
      </ul>
+
{
    </li>
+
$incl .= $page->ID . ",";
    <li class="page_item">
+
}
      [another page]
+
}?>
    </li>
+
 
  </ul>
+
<ul>
</li>
+
<?php wp_list_pages( array(
 +
"child_of" => $ancestor_id,
 +
"include" => $incl,
 +
"link_before" => "",
 +
"title_li" => "",
 +
"sort_column" => "menu_order" ) ); ?>
 +
</ul>
 
</pre>
 
</pre>
  
They can be styled with [[Glossary#CSS|CSS selectors]]:
+
==== 全てのサブページをリスト表示<span id="List whole subpages"></span> ====
  
  .pagenav { ... }
+
次の例はすべてのサブページをリスト表示します。
  .page_item { ... }
+
  .current_page_item { ... }
+
  .current_page_parent { ... }
+
  
== Parameters ==
+
<pre><?php
; '''sort_column''' (''string''):Sorts the list of Pages in a number of different ways. The default setting is ''sort alphabetically by Page title''.
+
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; ?>
 +
</pre>
  
:* <tt>'post_title'</tt> - Sort Pages alphabetically (by title) - default
+
==== 親ページとすべての子孫ページを表示<span id="List parent Page and all descendant Pages"></span> ====
:* <tt>'menu_order'</tt> - Sort Pages by Page Order. ''N.B.'' Note the difference between ''Page Order'' and ''Page ID''. The Page ID is a unique number assigned by WordPress to every post or page. The Page Order can be set by the user in the [[Write_Page_SubPanel|Write>Pages]] administrative panel. See the [[#List Pages by Page Order|example]] below.
+
:* <tt>'post_date'</tt> - Sort by creation time.
+
:* <tt>'post_modified'</tt> - Sort by time last modified.
+
:* <tt>'ID'</tt> - Sort by numeric Page ID.
+
:* <tt>'post_author'</tt> - Sort by the Page author's numeric ID.
+
:* <tt>'post_name'</tt> - Sort alphabetically by Post [[Glossary#Slug|slug]].
+
----
+
'''Note:''' The '''sort_column''' parameter can be used to sort the list of Pages by the descriptor of any field in the [[Database Description#Table:_wp_posts|wp_post table]] of the WordPress database. Some useful examples are listed here.
+
----
+
  
; '''sort_order''' (''string''):Change the sort order of the list of Pages (either ascending or descending). The default is ''ascending''. Valid values:
+
特定の親ページから始まるツリー (親と全世代の子孫ページ) を表示する指定方法は [[テンプレートタグ/wp_list_pages|wp_list_pages()]] にありません。そこで次の例は、ある親ページのすべての子ページを [[関数リファレンス/get_pages|get_pages()]] を使って取得した後、[[テンプレートタグ/wp_list_pages|wp_list_pages()]] を使って「家系図」を表示します。
:* <tt>'asc'</tt> - Sort from lowest to highest (Default).
+
:* <tt>'desc'</tt> - Sort from highest to lowest.
+
  
; '''exclude''' (''string''):Define a comma-separated list of Page IDs to be excluded from the list (example: <tt>'exclude=3,7,31'</tt>). There is no default value. See the [[#Exclude Pages from List|Exclude Pages from List]] example below.
+
<pre>
 +
<?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 );
 +
}
 +
?></pre>
  
; '''include''' (''string''):Only include certain Pages in the list generated by ''wp_list_pages''. Like '''exclude''', this parameter takes a comma-separated list of Page IDs. There is no default value. See the [[#Include Pages in List|Include Pages in List]] example below.
+
==== 現在のページと先祖ページと子ページをリスト表示<span id="List current Page with its ancestors and children"></span> ====
  
; '''depth''' (''integer''):This parameter controls how many levels in the hierarchy of pages are to be included in the list generated by ''wp_list_pages''. The default value is ''0'' (display all pages, including all sub-pages).
+
次の例は現在の固定ページと、そのページの先祖ページおよび子ページをリスト表示します。
:* <tt>0</tt> - Pages and sub-pages displayed in hierarchical (indented) form (Default).
+
<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'. -->
:* <tt>-1</tt> - Pages in sub-pages displayed in flat (no indent) form.
+
 
:* <tt>1</tt>  - Show only top level Pages
+
<pre><?php
:* <tt>2</tt>  - Value of 2 (or greater) specifies the depth (or level) to descend in displaying Pages.
+
// 親ページがある場合。
 +
if( $post->post_parent ) {
 +
    // 先祖ページを取得。
 +
    $relations = get_post_ancestors( $post->ID );
 
   
 
   
; '''child_of''' (''integer''):Displays the sub-pages of a single Page only; uses the ID for a Page as the value. Defaults to ''0'' (displays all Pages).
+
    // 直接の子ページを取得。
 +
    $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; ?>
 +
</pre>
  
; '''show_date''' (''string''):Display creation or last modified date next to each Page. The default value is the ''null value'' (do not display dates). Valid values:
+
==== 最上位の祖先ページとその直接の子ページをリスト表示<span id="List topmost ancestor and its immediate children"></span> ====
:* <tt>'<nowiki></nowiki>'</tt> - Display no date (Default).
+
:* <tt>'modified'</tt> - Display the date last modified.
+
:* <tt>'xxx'</tt> - Any value other than ''modified'' displays the date ('''post_date''') the Page was first created. See the [[#Sort Pages by Post Date|example]] below.
+
  
; '''date_format''' (''string''):Controls the format of the Page date set by the '''show_date''' parameter (example: "<tt><nowiki>l, F j, Y</nowiki></tt>"). This parameter defaults to the date format configured in your WordPress options. See [[Formatting Date and Time]] and the [http://php.net/date date format page on the php web site].
+
次の例は現在のページに関して、最上位の先祖ページとその直接の子ページを表示します。これはすっきりした二次サブナビゲーションに役立ちます。
  
; '''title_li''' (''string''):Set the text and style of the Page list's heading. Defaults to <tt>'__('Pages')'</tt>, which displays "Pages" (the <tt>__(&#039;&#039;)</tt> is used for [[Localization|localization purposes]]). If passed a null or empty value (<tt>&#039;&#039;</tt>), no heading is displayed, and the list will not be wrapped with <tt>&lt;ul>, &lt;/ul></tt> tags. See the example for [[#Hiding or Changing the List Heading|Headings]].
+
まず、下記の関数を作成します (テーマで使うなら functions.php に記述するのが良いでしょう):
  
; '''echo''' (''boolean''):Toggles the display of the generated list of links or return the list as an HTML text string to be used in PHP. The default value is ''1'' (display the generated list items). Valid values:
+
<pre>
:* <tt>1 (true)</tt> - default
+
if ( ! function_exists( 'wpdocs_get_post_top_ancestor_id' ) ) {
:* <tt>0 (false)</tt>
+
/**
 +
* 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.
 +
</pre>
  
; hierarchical : (''boolean'') Display sub-Pages in an indented manner below their parent or list the Pages inline.  The default is ''true'' (display sub-Pages indented below the parent list item). Valid values:
+
次に、テーマへ下記のコードを追加します (メニューを表示したいところへ):
:* <tt>1 (true)</tt> - default
+
:* <tt>0 (false)</tt>
+
  
; meta_key : (''string'') Only include the Pages that have this Custom Field Key (use in conjunction with the meta_value field).
+
<pre>
; meta_value : (''string'') Only include the Pages that have this Custom Field Value (use in conjuntion with the meta_key field).
+
<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>
 +
</pre>
 +
 
 +
=== ホームページのリスト<span id="List the Home page"></span> ===
 +
 
 +
ブログページへのリンクを同様に表示したい場合は [[テンプレートタグ/wp_page_menu | wp_page_menu()]] を使ってください。
 +
 
 +
=== カスタム投稿タイプのリストのメンバー<span id="List members of a custom post type"></span> ===
 +
 
 +
階層を持つカスタム投稿タイプであれば、[[テンプレートタグ/wp_list_pages|wp_list_pages()]] を使ってそのリストを表示できます。次の例はカスタム投稿タイプ Portfolio を表示します:
 +
 
 +
<pre><?php
 +
$args = array(
 +
    'post_type' => 'portfolio',
 +
    'title_li'  => __( 'Portfolio', 'textdomain' )
 +
);
 +
wp_list_pages( $args );
 +
?> </pre>
 +
 
 +
=== ページアイテムのマークアップとデザイン<span id="Markup_and_styling_of_page_items"></span> ===
 +
 
 +
デフォルトでは、[[テンプレートタグ/wp_list_pages|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> というクラスが追加されます。
 +
 
 +
<pre><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></pre>
 +
 
 +
これらは [[用語集#CSS|CSS セレクタ]]でデザインできます。
 +
 
 +
<pre>.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 */
 +
</pre>
 +
 
 +
== 参考 ==
 +
 
 +
* 合わせて読む: [[テンプレートタグ/wp_page_menu|wp_page_menu()]], [[関数リファレンス/get_pages | get_pages()]]
 +
 
 +
== 変更履歴 ==
 +
* [[Version 2.8|2.8]] : パラメータ 'number', 'offset' が追加されました。
 +
* [[Version 2.7|2.7]] : パラメータ 'link_before', 'link_after', 'exclude_tree' が追加されました。
 +
* [[:Category:バージョン|1.5]] : 新規テンプレートタグ
 +
 
 +
== ソースファイル ==
 +
 
 +
<tt>wp_list_pages()</tt> は {{Trac|wp-includes/post-template.php}} にあります。
 +
 
 +
<div id="Related">
 +
== 関連 ==
 +
</div>
  
== Related ==
+
{{Lists Tags}}
  
 
{{Tag General Tags}}
 
{{Tag General Tags}}
  
{{Query String Tag Footer}}
+
{{Tag Footer}}
  
{{Copyedit}}
+
{{原文|Template Tags/wp_list_pages|150442}} <!-- 17:19, 30 March 2015 Eliorivero  版 -->
  
{{原文|Template Tags/wp_list_pages|46181}}
+
{{DEFAULTSORT:Wp_list_pages}}
 +
[[Category:wp2.7]]
 +
[[Category:wp2.8]]
  
 
[[en:Template Tags/wp_list_pages]]
 
[[en:Template Tags/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最新版との差分