是否使用wp_list_ages更改父名称?

时间:2014-08-04 作者:AndrettiMilas

我在输出子页面和父页面的代码中使用以下行。此代码输出父页面的名称。我想用“概述”这个词来代替它

如何在wp\\u list\\u页面中以尽可能少的代码实现这一点?谢谢

$children = wp_list_pages("title_li=yo&include=".$post->post_parent."&echo=0"); // list the parent page
完整代码:

<?php
    if ( is_page() ) {
    $parent = get_post($post->post_parent);
    $parent_title = get_the_title($parent);
    $grandparent = $parent->post_parent;
    $grandparent_title = get_the_title($grandparent);
    $current_page_parent = ( $post->post_parent ? $post->post_parent : $post->ID );

    // is the homepage the granparent? = third level page
    if ($grandparent == is_page(\'0\')) {
        $children = wp_list_pages("title_li=&include=".$post->post_parent."&echo=0"); // list the parent page
        $children .= wp_list_pages("title_li=&child_of=".$post->post_parent."&echo=0"); // append the list of children pages to the same $children variable
        if ($children) {
            ?>
            <ul class="submenu">
              <?php echo $children; /*print list of pages*/ ?>
            </ul>
        <?php
        }

    // is the homepage the parent? = second level page
    } elseif ($post->post_parent ==is_page(\'0\')) {
        $children = wp_list_pages(\'title_li=&child_of=\'.$post->ID.\'&echo=0\');
        if ($children) {
            ?>
            <ul><li class="current_page_item"><a href="<?php echo get_permalink( $parentid ) ?>">Overview</a></li><?php echo $children; ?></ul>
        <?php
        } else {// your else stuff
        } } }
?>

2 个回复
最合适的回答,由SO网友:birgire 整理而成

你当然可以用一些preg_replace() 解决此问题的技巧,但这里有一个小(未经测试)想法,使用the_title 改为筛选:

add_filter( \'the_title\', \'wpse_title\' ); 
$children = wp_list_pages("title_li=&include=".$post->post_parent."&echo=0");    
我们的过滤器回调是:

function wpse_title( $title )
{
    remove_filter( current_filter(), __FUNCTION__ );
    return __( \'Overview\' );
}
备注1:我认为您应该考虑更换wp_list_pages() 生成单亲链接并改为使用的方法get_permalink( $parent_id )get_page_link( $parent_id ) 从父页面ID。然后您可以轻松地从控制链接名称。

 <li>
      <a href="<?php echo get_permalink( $parent_id ); ?>">Overview</a>
 </li>
您已经在其中一个关卡上使用了此选项,那么为什么不在其他关卡上使用呢?

备注2:get_post_ancestors() 帮助您获取当前树级别的位置。

例如:

$ancestors_ids = get_post_ancestors( get_the_ID() );
$level         = count( $ancestors_ids ) ;
然后,您可以通过以下方式获取当前页面的父ID:

$parent_id = ( $level > 0 ) ? array_shift( $ancestors_ids ) : 0;
下面是一个案例$level = 2 可能看起来像:

<ul class="submenu">
    <li>
        <a href="<?php echo get_permalink( $parent_id ); ?>">Overview</a>
    </li>
    <?php echo wp_list_pages("title_li=&child_of=".$parent_id."&echo=0&depth=1"); ?>
</ul>
也许你的$level = 1 可能是:

<ul class="submenu">
    <li>
        <a href="<?php echo get_permalink( $parent_id ); ?>">Overview</a>
    </li>
    <?php echo wp_list_pages("title_li=&child_of=".get_the_ID()."&echo=0&depth=1"); ?>
</ul>
等等。。

SO网友:Chinmoy Kumar Paul

请尝试以下代码片段一次:

$args = array(\'post_type\' => \'page\', \'parent\' => 0);
  $parent_pages = get_pages($args);
  if( $parent_pages ){
    echo \'<ul>\' . "\\n";
    foreach( $parent_pages as $page){
      $children = wp_list_pages("title_li=&child_of=".$page->ID."&echo=0");
      if( $children ) {
        echo \'<li><a href="\'. get_page_link( $page->ID ) .\'">Overview</a></li>\' . "\\n"  ;
        echo \'<ul>\' . "\\n";
        echo $children;
        echo \'</ul>\' . "\\n";
      }else{
        echo \'<li><a href="\'. get_page_link( $page->ID ) .\'">\' . $page->post_title . \'</a></li>\' . "\\n" ;
      }
    }
    echo \'</ul>\' . "\\n";
  }
但我有个问题。子页面的子页面会发生什么情况?如果一个子页被视为父页,则它将转换为overview 文本

结束

相关推荐