wp_list_pages 用法

wp_list_pages 用法

wp_list_pages常用于自定义侧边栏或标题,也常用于其他模板中。在模版中使用的方式为:

<?php wp_list_pages( $args ); ?>

默认参数设置为:

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

具体含义为:
‘depth’ => 0, 显示所有页面和子页面(无深度限制)
‘show_date’ => ”, 不显示创建日期
‘date_format’ => get_option(‘date_format’),
‘child_of’ => 0, 不限制子页面
‘exclude’ => ”, 不排除任何页面
‘include’ => ”, 不包括额外的页面
‘title_li’ => __(‘Pages’), 页面列表的标题为“Pages”
‘echo’ => 1, 结果显示出来
‘authors’ => ”, 不局限于特定作者
‘sort_column’ => ‘menu_order, post_title’, 先按页面顺序再按页面标题排序
‘link_before’ => ”, 按升序排列
‘link_after’ => ”, 以缩进格式显示页面
‘walker’ => ”, 包含所有页面(不按上述所列的默认状态显示)
‘post_type’ => ‘page’, 不局限于特定字段关键字/字段值的页面(不按上述所列的默认状态显示)
‘post_status’ => ‘publish’ 不排除父级/子级树

参数

sort_column

(字符) 排序的字段。默认’post_title’, 页面标题。

§ ‘post_title’ 页面标题的字母顺序排序(默认)

§ ‘menu_order’ 页面顺序(Page Order)进行排序。注意页面顺序和页面编号的区别。页面编号是由WordPress为每篇文章或页面设定的独有的数字,页面顺序是由用户在管理栏的Write>Pages中设置。

§ ‘post_date’ 页面创建日期排序

§ ‘post_modified’ 最后修改时间进行排序

§ ‘ID’ 页面序列编号排序

§ ‘post_author’ 页面创建者的序列编号排序

§ ‘post_name’ 页面别名的字母顺序排序

sort_column参数可按WordPress数据库wp_post table中任意字段的描述符来对页面列表进行排序

sort_order

(字符) 页面列表的排序方式(升序或降序)。默认为升序。可用值为:

§ ‘asc’ 升序, 按从低到高顺序排列(默认)

§ ‘desc’ 降序, 按从高到低顺序排列

exclude

(字符) 排除的页面编号, 用逗号隔开多个编号, 无默认值

exclude_tree

(整数) 与’child_of’相反,’exclude_tree’从结果中移除指定编号的所有子页面。也可用于隐藏指定页面的所有子页面。该参数还可联合’child_of’ 的值以隐藏孙页面

include

(字符) 仅包含的页面编号, 用逗号隔开多个编号, 无默认值

Depth

(整数) 该参数决定wp_list_pages生成的列表中包含的页面层次级数。默认值为0(显示子页面内的所有页面)。

§ 0 以层级方式(缩进)显示所有页面和子页面(默认)

§ -1 以平级方式(不缩进)显示子页面中的页面

§ 1 仅显示最上层页面

§ 2 该值(或更大值)表示需要显示页面内部的层级数

child_of

(整数) 仅显示单个页面的子页面;值为页面编号, 默认值为0(显示所有页面)。注意child_of参数不仅获取直系子页面,也会从已知编号中获取“孙页面”。

§ 0 默认,不限制子页面

show_date

(字符串) 显示或不显示创建或修改日期, 可用值

‘’ 不显示日期(默认)

‘modified’显示最近的修改日期

‘xxx’ 任何非‘modified’的值都表示显示创建日期

date_format

(字符串) 该参数对show_date参数生成的页面日期格式(”l, F j, Y”)进行设置。默认格式为WordPress选项设定的日期格式。参见设置日期和时间格式以及php网站上的页面日期格式。

title_li

(字符串)设置页面列表标题的内容与样式。默认值为“_(’页面’)”,显示结果为“页面”(_()用于本地化)。若传递值为null或为空(),则不显示标题,列表也不会用< ul>,< ul>标签标识

echo

(布尔型) 是否显示所生成的链接列表,或将列表按HTML文本格式返回供PHP使用。默认值为1(显示生成的列表项)。可用的值包括:

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

(字符串) 仅包含指定作者写的文章

number

(整数) 返回的文章个数, 默认没有限制(2.8.0后)

offset

(整数) 文章列表的偏移数, 默认没有偏移

例子
隐藏或改变列表标题

给title_li参数传递一个零值或空值,可以隐藏由wp_list_pages生成的页面列表默认标题。下面的代码可显示所述效果:

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

在下面这个例子中,列表中只包含编号为9,5,23的页面,标题内容被改为“Poetry”,格式为< h2>:

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

将页面按页面顺序排列

下面的例子将页面按管理栏中页面>编辑页面中 定义的页面顺序进行排列。

<ul>
 
<?php wp_list_pages('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>

显示列表中特定页面

若仅希望在列表中显示特定页面,例如编号为35,7,26和13的页面,可使用include参数。

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

显示子页面

2.0.1之前版本:

将以下代码存入WordPress主题page.php模板中the_content( )之后的the_post版块中,或存入page.php模板的副本中,供含有子页面的页面使用:

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

由于未设置全局变量$id,本代码无法在WordPress2.0.1及之后版本的页面模板中运行。2.0.1及之后版本中可使用下面介绍的代码。
WordPress 2.0.1及之后版本

注意:即使没有子页面,HTML标签也是必要的(< ul>或< ol>)。用css设置列表时需要将这一点谨记在心。

<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 } ?>

在子页面上列出子页面

上述示例都是在父级页面上展示子页面,却没有说明如何在子页面上进行展示。可用下列代码在某一父页面或其中一个子页面上展示子页面。

将本代码放在侧边栏的widget区块后,代码将无法运行。

<?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
 
if($post->post_parent) {
 
$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
 
$titlenamer = get_the_title($post->post_parent);
 
}
 
else {
 
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
 
$titlenamer = get_the_title($post->ID);
 
}
 
if ($children) { ?>
  <h2>
<?php echo $titlenamer; ?> </h2>
  <ul>
 
<?php echo $children; ?>
  </ul>
<?php } ?>

显示整个子页面列表

<?php
if(!$post->post_parent){
        
// will display the subpages of this top level page
        
$children = wp_list_pages("title_li=&child_of=".$post->ID."&echo=0");
}else{
        
// diplays only the subpages of parent level
        
//$children = wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0");
        
if($post->ancestors)
        
{
                
// 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 = end($post->ancestors);
                
$children = wp_list_pages("title_li=&child_of=".$ancestors."&echo=0");
                
// you will always get the whole subpages list
        
}
}
if ($children) { ?>
         <ul>
                
<?php echo $children; ?>
         </ul>
<?php } ?>

页面选项标记与格式

默认情况下,wp_list_pages( )生成一个嵌套的、由管理栏页面>编辑页面生成的无序WordPress页面列表。将title_li参数设为任意空字符后可除去最外围选项(li.pagenav)和列表(ul)。

所有wp_list_pages( )生成的列表项(li)都被标上page_item类。显示页面时将调用wp_list_pages( ),这时该页面的列表项被赋予附加类current_page_item。

<?php
<
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 */

显示键鼠式效果

.pagenav ul ul,

.pagenav .current_page_item ul ul,

.pagenav .current_page_ancestor ul ul,

.pagenav .current_page_ancestor .current_page_item ul ul,

.pagenav .current_page_ancestor .current_page_ancestor ul ul {display: none;}

.pagenav .current_page_item ul,

.pagenav .current_page_ancestor ul,

.pagenav .current_page_ancestor .current_page_item ul,

.pagenav .current_page_ancestor .current_page_ancestor ul,

.pagenav .current_page_ancestor .current_page_ancestor .current_page_item ul,

.pagenav .current_page_ancestor .current_page_ancestor .current_page_ancestor ul {display: block;}

显示父页面和子页面

<?php
// use wp_list_pages to display parent and all child pages all generations (a tree with parent)
$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' => 'Tree of Parent Page ' . $parent,
    
'include' =>  $parent . ',' . implode(",", $pageids)
 
);
 
wp_list_pages($args);
}
?>

显示当前页面的前景辈级及后辈级页面

<?php
//if the post has a parent
if($post->post_parent){
 
//collect ancestor pages
 
$relations = get_post_ancestors($post->ID);
 
//get child pages
 
$result = $wpdb->get_results( "SELECT ID FROM wp_posts WHERE post_parent = $post->ID AND post_type='page'" );
 
if ($result){
    
foreach($result as $pageID){
      
array_push($relations, $pageID->ID);
    
}
 
}
 
//add current post to pages
 
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.
 
$sidelinks = wp_list_pages("title_li=&echo=0&include=".$relations_string);
}else{
 
// display only main level and children
 
$sidelinks = wp_list_pages("title_li=&echo=0&depth=1&child_of=".$post->ID);
}
if ($sidelinks) { ?>
  <h2>
<?php the_title(); ?></h2>
  <ul>
    
<?php //links in <li> tags
    
echo $sidelinks; ?>
  </ul>         
<?php } ?>

显示主页页面

请使用wp_page_menu().
显示指定类型的所有页面

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

Leave a Comment

You must be logged in to post a comment.