PHP: Почему мой код работает в index.php, но не в виде виджета?

Я работаю в течение 7 дней подряд, чтобы создать код, который создает подменю на страницах с детьми. Поскольку он был настолько сложным, я решил, что напишу его в своем файле index.php, а затем перенесите его в плагин виджета, как только я его заработаю. Теперь он работает безупречно, но когда я перехожу к моему плагину, он не правильно определяет уровни страниц (родитель / ребенок / внук). Я тестировал плагин, чтобы убедиться, что я не делаю ничего плохого в настройке. Он работает так, как должен.

Вот код, который корректно работает в моем index.php. Я пытаюсь потянуть весь код в тегах <aside> в плагин (исключая jquery), и я получаю страницы первого и второго уровня, где у меня должен быть второй уровень и страницы первого уровня, на которых я должен иметь третий уровень:

 <aside class="sidebar"> <div class="submenu"> <?php if(count(get_post_ancestors($post->ID)) == 1 ) { echo '<ul>'; $args = array( 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => -1, 'post_parent' => $post->post_parent, ); $query = new WP_Query($args); while ($query->have_posts()) { $query->the_post(); $child = get_pages('child_of='.$post->ID); if( count( $child ) != 0 ) : ?> <li class="has-children"><a href="#<?php the_ID(); ?>" class="list-group-item" data-toggle="collapse"><?php the_title(); ?><i class="glyphicon glyphicon-chevron-right"></i></a> <?php $children = wp_list_pages( 'title_li=&child_of='.$post->ID.'&echo=0&depth=1' ); if ( $children) : ?> <ul class="children collapse" id="<?php the_ID(); ?>"> <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?> ><a href="<?php the_permalink(); ?>">Overview</a></li> <?php echo $children; ?> </ul> </li> <?php endif; ?> <?php else : ?> <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php endif; } echo '</ul>'; } elseif (count(get_post_ancestors($post->ID)) == 2 ) { echo '<ul>'; $args = array( 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => -1, 'post_parent' => get_post( $post->post_parent )->post_parent, 'depth' => 1, ); $query = new WP_Query($args); while ($query->have_posts()) { $query->the_post(); $child = get_pages('child_of='.$post->ID); if( count( $child ) != 0 ) : ?> <li class="has-children"><a href="#<?php the_ID(); ?>" class="list-group-item" data-toggle="collapse"><?php the_title(); ?><i class="glyphicon glyphicon-chevron-right"></i></a> <?php $children = wp_list_pages( 'title_li=&child_of='.$post->ID.'&echo=0&depth=1' ); if ( $children) : ?> <ul class="children collapse" id="<?php the_ID(); ?>"> <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?> ><a href="<?php the_permalink(); ?>">Overview</a></li> <?php echo $children; ?> </ul> <?php endif; ?> </li> <?php else : ?> <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php endif; } echo '</ul>'; } elseif (get_pages('child_of='.$post->ID) ) { echo '<ul>'; $args = array( 'post_type' => 'page', 'post_status' => 'publish', 'posts_per_page' => -1, 'post_parent' => $post->ID, 'depth' => 1, ); $query = new WP_Query($args); while ($query->have_posts()) { $query->the_post(); $child = get_pages('child_of='.$post->ID); if( count( $child ) != 0 ) : ?> <li class="has-children"><a href="#<?php the_ID(); ?>" class="list-group-item" data-toggle="collapse"><?php the_title(); ?><i class="glyphicon glyphicon-chevron-right"></i></a> <?php $children = wp_list_pages( 'title_li=&child_of='.$post->ID.'&echo=0&depth=1' ); if ( $children) : ?> <ul class="children collapse" id="<?php the_ID(); ?>"> <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>><a href="<?php the_permalink(); ?>">Overview</a></li> <?php echo $children; ?> </ul> <?php endif; ?> </li> <?php else : ?> <li <?php if(is_page($post->ID )) {?> class="current_page_item" <?php }?>><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a> <?php endif; } echo '</ul>'; } wp_reset_postdata(); ?> <script type="text/javascript"> var $ = jQuery; $(document).ready(function(){ $(function() { $('.list-group-item').on('click', function() { $('.glyphicon', this) .toggleClass('glyphicon-chevron-right') .toggleClass('glyphicon-chevron-down'); }); }); if ( $('.children li').hasClass('current_page_item') ) { $('.list-group-item .glyphicon', this) .toggleClass('glyphicon-chevron-right') .toggleClass('glyphicon-chevron-down'); $('.children', this) .addClass('in'); }; }); </script> </div> </aside> 

Solutions Collecting From Web of "PHP: Почему мой код работает в index.php, но не в виде виджета?"

Возможно, это не тот ответ, который вы просили, но можете ли вы попробовать запустить его в PHP Code Widget и проверить, работает ли он? Если это так, вероятно, что-то не так с кодом генерации виджета. Если это не так, попробуйте добавить это к sidebar.php, а не index.php, и снова проверьте результаты.

Я получил его для работы, добавив global $post; наверху.

Я столкнулся с этим решением, работая с пользователем sisir по устранению неполадок. При попытке выполнить упражнения он предложил мне наткнулся на этот пост: $ post-> ID не работает