如何使用自定义字段而不是 wp_list_pages 返回的页面标题?

How can I use custom fields instead of the page titles returned by wp_list_pages?

当页面有 child 个页面时,我正在尝试使用侧边菜单进行导航。 我目前拥有的几乎是完美的,但我不想使用菜单中 child 页面的标题,而是想使用自定义字段 'sidebar_title'.

我目前 运行 我发现的这个功能:

function wpb_list_child_pages() { 

    global $post; 

    if ( is_page() && $post->post_parent )
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
    else
        $childpages = wp_list_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );
    if ( $childpages ) {
        $string = '
        <nav class="sidenav">
               <ul>
                   <li><a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a></li>'
                   .$childpages.
               '</ul>
        </nav>';
    }
    return $string;
}

这给了我这个结果:

<nav class="sidenav">
  <ul>
    <li><a href="page URL">Parent Page</a></li>
    <li><a href="page URL">Child Page</a></li>
    <li><a href="page URL">Child Page</a></li>
  </ul>
</nav>

我只需要知道如何用我的自定义字段替换 child 页面的标题。

您需要使用 get_pages 函数才能控制布局。您现在使用的函数是 wp_list_pages,它基于 get_pages,因此您无需在主请求中进行任何更改。所以您的完整代码将如下所示:

$childpages = get_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );

if ( $childpages ) {
   $string = '<nav class="sidenav"><ul><li><a href="'.get_permalink($post->post_parent).'">'.get_the_title($post->post_parent).'</a></li>'

   foreach( $childpages as $page ) {
      $string .= '<li><a href="' . get_permalink($page->ID) . '">' . get_post_meta($page->ID, 'sidebar_title', true) . '</a></li>';
   }

   $string .= '</ul></nav>';

   return $string;
}

这似乎成功了。

function wpb_list_child_pages() { 

    global $post; 

    if ( is_page() && $post->post_parent )
        $childpages = get_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->post_parent . '&echo=0' );
    else
        $childpages = get_pages( 'sort_column=menu_order&title_li=&child_of=' . $post->ID . '&echo=0' );

    if ( $childpages ) {
        $string = '<nav class="sidenav"><ul><li><a href="'.get_permalink($post->post_parent).'">'.get_field(sidebar_title, ($post->post_parent)).'</a></li>';

        foreach( $childpages as $page ) {
        $string .= '<li><a href="' . get_permalink($page->ID) . '">' . get_post_meta($page->ID, 'sidebar_title', true) . '</a></li>';
    }

    $string .= '</ul></nav>';

    return $string;
}}