2016-03-01 2 views
2

Так что я надеюсь, что заголовок не слишком запутан, позвольте мне попытаться сломать его.WP; get_sidebar не играет хорошо с get_content, когда внутри цикла запрашивает страницы

У меня есть файл content-page.php, в котором есть функции get_content и get_sidebar. Если я перейду к этой странице в интерфейсе, я увижу как мой контент, так и боковую панель.

На странице home.php, я загружаю серию страниц с помощью $ the_query = новый WP_Query, а затем внутри этого запроса с помощью цикла и внутри этого цикла, называя контент-page.php.

Проблема в том, что если страница, загружаемая на домашнюю страницу home.php, имеет боковую панель, по какой-то причине после боковой панели ничего не загружается, т.е. get_content() возвращает ничего, comments_template() возвращает ничего, и т.д.

Здесь нет (очень) упрощенная версия разметки, Домашняя страница:

$the_query = new WP_Query(array(
    'post_type' => 'page')); 
    $x = 0; 
    while ($the_query->have_posts()) : 
     $the_query->the_post(); 

     get_template_part('content', 'page'); 

    $x++; 
    endwhile; 
wp_reset_query(); 

контента page.php:

<article <?php post_class(); ?>> 
    <header> 
     <h1><?php the_title(); ?></h1> 
    </header> 

    <div class="entry-content"> 
     <?php include(TEMPLATEPATH . '/sidebar.php'); ?> 
     <?php the_content(); ?> 
    </div><!-- .entry-content --> 
</article><!-- #post-<?php the_ID(); ?> --> 

sidebar.php :

<div id="secondary" class="widget-area" role="complementary"> 
    <?php do_action('before_sidebar'); 
    dynamic_sidebar('sidebar-1'); ?> 
</div><!-- #secondary .widget-area --> 

Есть ли что-то очевидное, что я здесь отсутствует? Некоторое время работал над этим. Как всегда, любая помощь очень ценится.

+0

Я пытаюсь понять вашу проблему ... Вы говорите, что проблема заключается в том, что если страница, загружаемая на домашнюю страницу home.php, имеет боковую панель, по какой-то причине после боковой панели ничего не загружается, т.е. get_content() ничего не возвращает, comment_template() ничего не возвращает и т. д. «Что вы имеете в виду? Содержимое, возвращаемое из цикла, не будет содержать боковую панель. Боковая панель будет частью шаблона страницы и, как правило, не будет связана с содержанием любого сообщения. –

+0

Привет, Джим, это точно. Вот почему я загружаю боковую панель в цикле. Это тема, которую я создаю там, где я предоставляю пользователю возможность выбрать ту боковую панель, которую они хотят отображать на каждой странице/почте. Таким образом, у него может быть 1-й зарегистрированный боковой экран на странице-x и 2-й дисплей на странице-y. Все это отлично работает, когда вы просто заходите на страницу. Но если я просматриваю все страницы домашней страницы с помощью 'WP_Query', чтобы фильтровать только страницы, количество страниц и т. Д., Вызывающий боковую панель, похоже, останавливает другие функции от загрузки - то есть' get_content() ' –

+0

Ну, я думаю вы просто ответили на свой вопрос! Wordpress не предназначен для вызова боковой панели несколько раз из цикла. –

ответ

0

В Wordpress существует два типа общих запросов цикла: 1) основной запрос, который задается на основе HTTP-запроса, и 2) «вспомогательные циклы», которые могут изменять основной запрос. Поскольку основной запрос контролирует многие вещи, например «есть ли боковая панель?» или «какой шаблон страницы следует использовать?» вы можете подать только один из этих типов. Вы не можете вызывать отдельную боковую панель (или вызывать отдельный шаблон страницы, если на то пошло) изнутри подцифрового цикла. Чтобы сделать это, вам придется переделать основную боковую панель Wordpress. Я считаю, что лучший выбор для того, что вы пытаетесь сделать, - это обслуживать только какой-то динамический контент и называть его боковой панелью. Другими словами, Wordpress уже решил, что происходит с боковой панелью при первом вызове , У системы нет способа по умолчанию для обработки вызова боковой панели снова и снова. Вероятно, с помощью shoftcodes или фильтра после каждой итерации подзаголовка.

0

Закрыть ")" открыть скобки.

$the_query = new WP_Query(array('post_type' => 'page')); 
+0

ok, можете ли вы изменить название своей страницы Home.php на другое, потому что его использование по умолчанию для списка сообщений в Wordpress, поэтому после проверки, изменив имя страницы. – meet

+0

У этого есть аффект, но не желаемый. Теперь, если нет сообщений, все правильно отображается для первой страницы, показанной на домашней странице (front.php), но боковые панели не срабатывают по следующим. Если есть сообщения, ни одно содержимое не отображается для первой страницы, показанной на домашней странице (front.php), только на боковой панели. –

+0

Другими словами, содержимое вызывается каждый раз, но боковая панель вызывается только для первого экземпляра цикла. –

0

Вставьте этот код в контент-page.php

<?php get_template_part('sidebar'); ?> 
     <?php the_content(); ?> 

Попробуйте удалить do_action('before_sidebar');

+0

К сожалению, нет никакой разницы, когда я делаю это редактирование, Пракаш. –

0

Вы можете попробовать:

include(locate_template('content-page.php', false, false));

вместо:

get_template_part('content', 'page');

+0

Приветствия, fostertime, к сожалению, не привели к каким-либо изменениям. –

+0

@ EricBrockman hmm, поэтому 'post_class();' и 'the_title();' загружаются должным образом. Это просто 'the_content();' который не загружается на данный момент? Если 'the_content();' находится непосредственно в инструкции 'while', загружается ли она обязательно? – fostertime

+0

Итак, я добавил этот код в проект dev, который у меня есть, и все работает отлично. Пара вопросов ... 1) является вашим 'content-page.php' в корне вашего проекта или находится в подкаталоге? Mine находится в 'template-parts/content'. 2) есть ли конкретная причина, по которой вы добавляете 'do_action' перед вызовом боковой панели? – fostertime

Смежные вопросы