Как я могу использовать настраиваемые поля вместо заголовков страниц, возвращаемых wp_list_pages? - PullRequest
0 голосов
/ 01 мая 2019

Я пытаюсь использовать боковое меню для навигации, когда страница имеет дочерние страницы. То, что у меня есть сейчас, почти идеально, но вместо использования названий дочерних страниц в меню я хочу использовать настраиваемое поле '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>

Мне просто нужно знать, как я могу заменить заголовок дочерних страниц своим настраиваемым полем.

Ответы [ 2 ]

0 голосов
/ 01 мая 2019

Похоже, что добился цели.

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;
}}
0 голосов
/ 01 мая 2019

Вам нужно использовать функцию 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...