За последние 24 часа нас посетили 21596 программистов и 1018 роботов. Сейчас ищут 687 программистов ...

Сайдбар на Wordpress

Тема в разделе "Wordpress", создана пользователем ZloY SloN, 23 июн 2018.

  1. ZloY SloN

    ZloY SloN Новичок

    С нами с:
    23 июн 2018
    Сообщения:
    1
    Симпатии:
    0
    Доброго времени суток, уважаемые php-разработчики! Новичку требуется срочная помощь!
    Есть сайт на Wordpress, в теме реализован сайдбар на PHP:


    Код сайдбара в functions.php:

    PHP:
    1. function pvmenu_func(){
    2.     $out = '';
    3.     if (is_page()) {
    4.         $pages = get_pages(array(
    5.             'meta_key' => '_wp_page_template',
    6.             'meta_value' => 'page-cust.php'
    7.         ));
    8.         foreach($pages as $page){
    9.             $pages2[get_field('srpg_sort', $page->ID)] = array('id' => $page->ID);
    10.         };
    11.         ksort($pages2);
    12.      
    13.         $out .= '<section id="nav_menu-2" class="widget widget_nav_menu amr_widget"><div class="menu-department-container"><ul id="menu-department" class="menu">';
    14.         foreach($pages2 as $page){
    15.             $pv_page_id = $page['id'];
    16.             $out .= '<li class="menu-item menu-item-type-post_type menu-item-object-page';
    17.             if ($pv_page_id == get_the_ID()) {$out .= ' current_page_item';};
    18.             $out .= '"><a href="'.get_permalink($page['id']).'">'.get_the_title($page['id']).'</a></li>';
    19.             $posts = get_posts(array(
    20.                 'numberposts'    => -1,
    21.                 'post_type'        => 'post',
    22.                 'meta_key'        => 'srpg',
    23.                 'meta_value'    => $pv_page_id
    24.             ));
    25.             if ($pv_page_id == get_the_ID()) {
    26.                 $out .= '<ul class="sub_menu">';
    27.                 foreach($posts as $post){
    28.                     $out .= '<li class="menu-item menu-item-type-post_type menu-item-object-page"><a href="'.get_permalink($post->ID).'">'.get_the_title($post->ID).'</a></li>';
    29.                 }
    30.                 $out .= '</ul>';
    31.             }
    32.         }
    33.         $out .= '</ul></div></section>';
    34.     } else {
    35.         if (get_field('srpg') != '') {
    36.             $srpg = get_field('srpg');
    37.         }
    38.         if (get_field('srtw') != '') {
    39.          
    40.             $srtw = get_field('srtw');
    41.             $srpg = get_field('srpg', $srtw);
    42.         }
    43.         $pages = get_pages(array(
    44.             'meta_key' => '_wp_page_template',
    45.             'meta_value' => 'page-cust.php'
    46.         ));
    47.         $out .= '<section id="nav_menu-2" class="widget widget_nav_menu amr_widget"><div class="menu-department-container"><ul id="menu-department" class="menu">';
    48.         foreach($pages as $page){
    49.             $pages2[get_field('srpg_sort', $page->ID)] = array('id' => $page->ID);
    50.         };
    51.         ksort($pages2);
    52.         foreach($pages2 as $page){
    53.             $pv_page_id = $page['id'];
    54.             $out .= '<li class="menu-item menu-item-type-post_type menu-item-object-page';
    55.             if ($pv_page_id == $srpg) {$out .= ' current_page_item';};
    56.             $out .= '"><a href="'.get_permalink($page['id']).'">'.get_the_title($page['id']).'</a></li>';
    57.             $posts = get_posts(array(
    58.                 'numberposts'    => -1,
    59.                 'post_type'        => 'post',
    60.                 'meta_key'        => 'srpg',
    61.                 'meta_value'    => $pv_page_id
    62.             ));
    63.             if ($pv_page_id == $srpg) {
    64.                 $out .= '<ul class="sub_menu">';
    65.                 foreach($posts as $post){
    66.                     $pv_post_id = $post->ID;
    67.                     $out .= '<li class="menu-item menu-item-type-post_type menu-item-object-page ';
    68.                         if ($pv_post_id == get_the_ID()) {$out .= ' current_page_item';};
    69.                         if ($pv_post_id == $srtw) {$out .= ' current_page_item';};
    70.                     $out .= '"><a href="'.get_permalink($post->ID).'">'.get_the_title($post->ID).'</a></li>';
    71.                     $child_posts = get_posts(array(
    72.                         'numberposts'    => -1,
    73.                         'post_type'        => 'post',
    74.                         'meta_key'        => 'srtw',
    75.                         'meta_value'    => $pv_post_id
    76.                     ));
    77.                     if ($pv_post_id == get_the_ID() || $pv_post_id == $srtw) {
    78.                         $out .= '<ul class="sub_menu">';
    79.                         foreach($child_posts as $child_post){
    80.                             $out .= '<li class="menu-item menu-item-type-post_type menu-item-object-page ';
    81.                                 if ($child_post->ID == get_the_ID()) {$out .= ' current_page_item';};
    82.                             $out .= '"><a href="'.get_permalink($child_post->ID).'">'.get_the_title($child_post->ID).'</a></li>';
    83.                         };
    84.                         $out .= '</ul>';
    85.                     };
    86.                 }
    87.                 $out .= '</ul>';
    88.             }
    89.         }
    90.         $out .= '</ul></div></section>';
    91.     };
    92.  
    93. return do_shortcode($out);
    94. }
    95. add_shortcode( 'pvmenu', 'pvmenu_func' );


    Еще кусок кода в page-cust.php:

    PHP:
    1. <?php
    2. if (is_page()) {
    3.     $pages = get_pages(array(
    4.         'meta_key' => '_wp_page_template',
    5.         'meta_value' => 'page-cust.php'
    6.     ));
    7.     foreach($pages as $page){
    8.         echo '<!--'.get_the_title($page->ID).get_permalink($page->ID).' -->';
    9.  
    10.         $pv_page_id = $page->ID;
    11.         if ($pv_page_id == get_the_ID()) {echo '<!-- active -->';};
    12.         $posts = get_posts(array(
    13.             'numberposts'    => -1,
    14.             'post_type'        => 'post',
    15.             'meta_key'        => 'srpg',
    16.             'meta_value'    => $pv_page_id
    17.         ));
    18.         if ($pv_page_id == get_the_ID()) {
    19.             foreach($posts as $post){
    20.                 echo '<!-- >>>'.get_the_title($post->ID).get_permalink($post->ID).' -->';
    21.             }
    22.         }
    23.     }
    24. } else {
    25.     $pages = get_pages(array(
    26.         'meta_key' => '_wp_page_template',
    27.         'meta_value' => 'page-cust.php'
    28.     ));
    29.     foreach($pages as $page){
    30.         echo '<!--'.$page->ID.' -->';
    31.         $pv_page_id = $page->ID;
    32.         if ($pv_page_id == get_the_ID()) {echo '<!-- active -->';};
    33.         $posts = get_posts(array(
    34.             'numberposts'    => -1,
    35.             'post_type'        => 'post',
    36.             'meta_key'        => 'srpg',
    37.             'meta_value'    => $pv_page_id
    38.         ));
    39.         foreach($posts as $post){
    40.             echo '<!-- >>>'.$post->ID.' -->';
    41.             $pv_post_id = $post->ID;
    42.             if ($pv_post_id == get_the_ID()) {echo '<!-- active -->';};
    43.             $child_posts = get_posts(array(
    44.                 'numberposts'    => -1,
    45.                 'post_type'        => 'post',
    46.                 'meta_key'        => 'srtw',
    47.                 'meta_value'    => $pv_post_id
    48.             ));
    49.             foreach($child_posts as $child_post){
    50.                 if ($child_post->ID == get_the_ID()) {echo '<!-- active -->';};
    51.                 echo '<!-- >>>-----'.$child_post->ID.' -->';
    52.             };
    53.         }
    54.     }
    55. };
    56. ?>


    Внутренние страницы выводятся через "записи" в админке. С помощью плагина произвольных полей реализовано 2 уровня вложенности меню. За первый отвечает поле 'srpg', за второй уровень - 'srtw'. Проблемы две:

    1)На последнем уровне не отображает текущее положение в меню, то есть меню свернуто. Пример:
    Нужно сделать, чтобы меню раскрывалось и показывало название текущей страницы.

    2)Некоторые страницы первого уровня вложенности не отображают в меню привязанные к ним страницы второго уровня:
    Например, страница:
    Она является родителем трех других страниц, но две из них не отображаются в меню сайдбара, хотя поля 'srtw' этих страниц правильно заполнены.
    Все новые создаваемые страницы тоже не отображаются в меню второго уровня, то есть, поле 'srtw' работает неправильно.

    Буду очень признателен тем, кто поможет решить эти проблемы. Хотя бы дайте подсказку, куда копать. Проблему нужно решить срочно.
     
    #1 ZloY SloN, 23 июн 2018
    Последнее редактирование модератором: 25 июн 2018