2014-02-08 57 views
0

我有一個頁面上的多個循環。第一個循環獲取update帖子類型的帖子,第二個循環獲取頁面鏈接,第三個獲取post帖子類型,第四個獲取特定頁面鏈接,然後是最後一個獲取當前頁面數據的循環。即我有類似以下內容:WordPress的 - 頁面上的多個環

獲取更新

<?php $updates = get_posts(array('post_type' => 'update', 'post_per_page' => 4)); ?> 
<?php foreach ($updates as $update): ?> 
    <?php setup_postdata($update); ?> 
    <li> 
     <span><?php the_time(get_option('date_format')); ?></span> 
     <h4><a href="<?php echo $update->guid; ?>"><?php echo get_post_meta($update->ID, 'msp_onhome_title', true); ?></a></h4> 
    </li> 
<?php endforeach ?> 

抓取news頁面鏈接:

<?php 
    $the_slug = 'news'; 
    $args=array(
     'name' => $the_slug, 
     'post_type' => 'page', 
     'post_status' => 'publish', 
     'numberposts' => 1 
    ); 
    $blog_page = get_posts($args); 

    if($blog_page) : 
?> 
    <span class="stylish-extend"> 
     <a href="<?php echo $blog_page[0]->guid; ?>">More News &rarr;</a></span>          
<?php endif; ?> 

取帖子:

<?php $color_classes = array('dark-blue', 'dark-red', 'black', 'maroone', 'light-blue'); ?> 

<?php $posts = get_posts(array('post_type' => 'post', 'post_per_page' => 5)); ?> 
<?php foreach ($posts as $post): ?> 
    <?php setup_postdata($post); ?> 
    <li> 
     <article class="blog-post"> 
      <header> 
       <p class="post-title dark-blue"> 
        <a href="<?php echo $post->guid; ?>"><?php the_title(); ?></a> 
        <span>Posted in <i><?php the_category(', '); ?></i> by <i><?php the_author(); ?></i></span> 
       </p> 
      </header> 
     </article> 
    </li> 
    <!-- <span><?php the_time(get_option('date_format')); ?></span> --> 
<?php endforeach ?> 

抓取頁面鏈接

<?php 
    $the_slug = 'blog'; 
    $args=array(
     'name' => $the_slug, 
     'post_type' => 'page', 
     'post_status' => 'publish', 
     'numberposts' => 1 
    ); 
    $blog_page = get_posts($args); 

    if($blog_page) : 
?> 
     <a href="<?php echo $blog_page[0]->guid; ?>">Head to blog &raquo;</a> 

<?php endif; ?> 

獲取實際的頁面內容(當前頁面)

<!-- Problem here --> 
<section id="meet" class="light"> 
    <?php if (have_posts()): while(have_posts()) : the_post(); ?> 
     <?php the_content(); ?> 
    <?php endwhile; endif; ?> 
</section> 

問題就出在這裏,即它並不顯示實際的頁面內容。奇怪的是,當我把這個循環放在最上面的所有循環上時,它會正確顯示頁面數據。我在每個循環之後嘗試過wp_reset_query()wp_reset_post_data()(或者它是wp_reset_postdata()?),但它不起作用。我試圖另一件事,在可變保存在$wp_query的參考,所執行的循環,然後恢復$wp_query即如下所示:

global $wp_query; 
$temp_wpquery = $wp_query; 

// perform all the loops and stuff 

global $wp_query; 
$wp_query = $temp_wpquery; 

// perform the stuff 

仍然結果是相同的。請問任何人都可以告訴我我在這裏做錯了什麼?爲什麼它不顯示最後一個循環中的當前頁面數據?

回答

0

什麼爲我工作的,存儲$post某些變量,進行所有的東西,分配存儲$post值回$post,之後我用setup_postdata($post)然後,不使用任何循環。就是這樣。以下是示例代碼:

global $post; 
$temp_post = $post; 

//..... 
// Every thing else 
//... 

//Before the actual page content 
<?php $post = $temp_post; ?> 

<section id="meet" class="light"> 
    <?php setup_postdata($post); ?> 
     <?php the_content(); ?> 
</section> 
+0

所以我錯過了'setup_postdata()'嗯。 –

+0

是的,並添加了一個額外的循環;) –

0

你並不需要保存$wp_query參考,而不是節約的global $post;

參考在最頂端後get_header()

插入這段代碼:

global $post; 
$originalpost = $post; 

//.... Then 
//All your awesome stuff here 
//... 

//Before the actual page contents 
<?php $post = $originalpost; ?> 

<section id="meet" class="light"> 
    <?php if (have_posts()): while(have_posts()) : the_post(); ?> 
     <?php the_content(); ?> 
    <?php endwhile; endif; ?> 
</section> 
+0

謝謝,但那也沒用。 –

+0

@KamranAhmed你還在每個'foreach'迭代之後放置了'wp_reset_postdata()'嗎? –

+0

不是當我嘗試你的建議,但在此之前,我曾嘗試過,並沒有工作 –

0

你需要在setup_postdata()中專門使用變量名稱$post(不是另一個變量名稱),否則它將無法工作。

試圖改變這樣的代碼:

<?php $updates = get_posts(array('post_type' => 'update', 'post_per_page' => 4)); ?> 
<?php foreach ($updates as $post): ?> 
    <?php setup_postdata($post); ?> 
    <li> 
     <span><?php the_time(get_option('date_format')); ?></span> 
     <h4><a href="<?php echo $post->guid; ?>"><?php echo get_post_meta($post->ID, 'msp_onhome_title', true); ?></a></h4> 
    </li> 
<?php wp_reset_query(); endforeach ?> 

根據您正在使用setup_postdata()在哪裏(如果不是在主迴路,或在功能/側邊欄小工具,例如),您可能還需要申報 - global $post;

0

以下對於我們有條件地包括各種PHP文件,這些PHP文件具有以該帖子的主帖子的帖子標籤或其他元數據爲依據的子循環。正如之前的建議之一,包括wp_reset_postdata()是必要的。像你一樣閱讀至少應該基於你當前的設計在最後一個內容循環之前運行wp_reset_postdata()。

案例1:只需引用全局$ wp_query變量。

global $wp_query; 
if (have_posts()) { 
    while(have_posts()) : 
     $wp_query->the_post(); 
     the_content(); 
    endwhile; 
} 
wp_reset_postdata(); 

案例2:運行額外的查詢

$the_query = new WP_Query('page_id=1369'); 
while ($the_query->have_posts()) : 
    $the_query->the_post(); 
     the_content(); 
endwhile; 
wp_reset_postdata(); 
相關問題