Переключение на статический контент на слайдере разрывов домашней страницы - PullRequest
0 голосов
/ 07 ноября 2011

Я работаю над сайтом WordPress, на котором есть ползунок на каждой странице (но только когда я не настроил сайт для использования статической страницы, а не для перечисления моих сообщений на главной странице) - все еще со мной?

Когда на домашней странице (например, www.mysite.com) есть список сообщений в моей базе данных, отображаемых на домашней странице, слайдер работает нормально, но когда я изменяю домашнюю страницу, чтобы использовать статический контент изСтраница, которую я создал, ползунок исчезает.

Вот код:

<?php get_header(); ?>

<!-- begin featured-posts -->   
<div class="break"></div>

<!-- begin featured -->
<div id="featured"> 

    <?php
    $tmp_query = $wp_query;
    query_posts('showposts=3&cat=' . get_cat_ID(dp_settings('featured')));

    if (have_posts()) :

    while (have_posts()) : the_post(); 
    ?>

    <!-- begin post -->
    <div class="content">   
        <a href="<?php the_permalink(); ?>"><?php dp_attachment_image($post->ID,  'alt="' . $post->post_title . '"'); ?></a>     
        <div class="title">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>               
        </div>        
        <p><?php echo dp_clean($post->post_content, 250); ?> <br /><br /> [<a class="readmore" href="#">Read More</a>]</p>            
    <div class="break"></div>
    </div>
    <!-- end post -->

    <?php endwhile; endif; ?>

</div>
<!-- end featured -->


    <!-- BEGIN content -->
<div id="content">
    <?php
    $wp_query = $tmp_query;
    if (have_posts()) :
    while (have_posts()) : the_post(); 
    ?>

    <!-- begin post -->
    <div class="post">
        <a href="<?php the_permalink(); ?>"><?php dp_attachment_image($post->ID, 'thumbnail', 'alt="' . $post->post_title . '"'); ?></a>
        <h1><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h1>
        <p><?php echo dp_clean($post->post_content, 350); ?><br /><br />[<a class="readmore" href="#">Read More</a>]</p>            

                    </div>
    <!-- end post -->

    <div class="break"></div>

    <?php endwhile; ?>
    <div class="postnav">

        <?php if(function_exists('wp_page_numbers')) { wp_page_numbers(); } ?>

    </div>
    <?php else : ?>
    <div class="notfound">
    <h2>Not Found</h2>
    <p>Sorry, but you are looking for something that is not here.</p>
    </div>
    <?php endif; ?>

</div>
<!-- END content -->

<?php get_sidebar(); get_footer(); ?>

Итак, теперь я вижу, что в <div id="featured"> (это ползунок), $wp_queryсохраняется в $tmp_query, а затем повторно используется в основном содержимом страницы.Для меня не имеет смысла, что ползунок не будет отображаться ни на одной странице моего сайта только потому, что я установил статический контент на главной странице.

Я хотел бы отобразитьползунок на каждой странице моего сайта, независимо от того, является ли содержимое этой страницы пост-типом или типом страницы.Может кто-нибудь объяснить, почему контент типа страницы скрывает ползунок (все, что я могу подумать, что if (have_posts()) : возвращает false) и предложить исправление?

Заранее спасибо!

1 Ответ

0 голосов
/ 08 ноября 2011

Когда используется query_posts, вы изменяете запрос, а не взаимодействуете с ним.Причина, по которой это работало, когда на странице были установлены последние публикации, потому что объект $ post уже был глобализирован на основе выполнения основного цикла запросов WordPress.Ваш метод, вероятно, сработает, если вы вызовите global $ post, но лучшим решением будет запуск нового запроса для показанного ползунка, который не изменяет основной запрос.

<!-- begin featured -->
<div id="featured"> 

    <?php
    $cat_id = get_cat_ID(dp_settings('featured'));
    $args = array(
        'cat' => $cat_id,
        'posts_per_page' => 3 

    );

    $feature_query = new WP_Query( $args );


    while ( $feature_query->have_posts() ) : $feature_query->the_post(); ?>


    <!-- begin post -->
    <div class="content">   
        <a href="<?php the_permalink(); ?>"><?php dp_attachment_image($post->ID,  'alt="' . $post->post_title . '"'); ?></a>     
        <div class="title">
            <h2><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h2>               
        </div>        
        <p><?php echo dp_clean($post->post_content, 250); ?> <br /><br /> [<a class="readmore" href="#">Read More</a>]</p>            
    <div class="break"></div>
    </div>
    <!-- end post -->

    <?php endwhile; wp_reset_postdata(); ?>

</div>
<!-- end featured -->

Хороший метод для тестированияпочему любой запрос не работает - это использовать var_dump();

Пример:

$wp_query = $tmp_query;
   var_dump( $tmp_query );
if (have_posts()) :
while (have_posts()) : the_post(); 
 global $post;
 var_dump( $post );

Это даст вам содержимое объекта $ post и то, что находится в текущем запросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...