我正在建立一個客戶端的Wordpress主題,它不同於我之前建立的任何其他主題,主頁是分散在多個不同的容器和樣式。它應該看起來像一本雜誌,在每個月初,同時發佈9個不同的帖子,每個帖子都屬於不同的類別。和許多職位都是風格不同,我無法用傳統的循環:自定義WordPress的index.php規避循環不能正常工作
<?php if(has_posts()) : while(has_posts)) : the_post(); ?>
// do stuff
<?php endwhile; endif; ?>
首先,我將解釋如何,我想解決這個問題,那麼說明我有問題。
在index.php文件的頂部,我有下面的PHP代碼:
$slugPostMap = array();
$slugs = array(
'art', 'big-idea', 'books', 'educators', 'film',
'ministry-update', 'music', 'parents', 'students',
);
$args = array(
'limitposts' => 1,
'order' => 'date'
);
foreach($slugs as $slug){
$args['category_name'] = $slug;
$post = get_posts($args);
$slugPostMap[$slug] = $post;
}
的$slugs
陣列是每個類別蛞蝓的集合,我需要在查詢 - 每一種將有一個帖子被顯示。我的想法是,我可以遍歷這個數組,並使用一組固定的查詢參數($args
),檢索每個這些slug的單個最新帖子。當我循環播放slug數組時,我將查詢結果存儲在關聯數組($slugPostMap
)中,其中類別slug「指向」實際的帖子。
在頁面正文後面,我使用類別slug索引從$slugPostMap
中獲取所需的帖子。這裏有一個例子:
<?php
foreach($slugPostMap['ministry-update'] as $p):
setup_postdata($p);
?>
<a class="homepageVideoPostTitle" href="<?php the_permalink(); ?>"><?php the_date('F Y','','',true); ?></a>
<div class="homepageVideoPostSubtitle">
<?php the_title(); ?>
</div> <!-- end homepageVideoPostSubtitle -->
<div class="homepageVideoPostContent">
<?php the_excerpt(); ?>
</div>
<?php endforeach; ?>
我使用之初foreach循環的原因是因爲,據我所知,有幾個核心的WordPress模板標籤(the_title()
,the_permalink()
等)的範圍內是唯一可用循環。因爲我在這裏手動調用setup_postdata()
(在循環期間在幕後調用),我還使用foreach來限制任何怪異巫術發生時的範圍,當我致電setup_postdata()
時。
大多數情況下,這是有效的。在上面的示例中,調用the_excerpt()
的結果按預期顯示。但是,其他一些模板標記未返回任何值(具體而言,the_permalink()
和the_title()
)。我沒有收到任何錯誤,並且當我在真實的Wordpress安裝中嘗試此操作時,頁面加載正常。
我假設問題在於我不瞭解如何在這種情況下正確地繞過循環,但事實上沒有任何錯誤或任何其他線索的問題已將我帶到這裏。
這是運行在一些Linux上的Wordpress 3.0。我有很多其他的Wordpress安裝在這個盒子上運行沒有問題,我可以使用這個相同的WordPress的實例與默認主題沒有問題。
謝謝你的時間 - 對小說抱歉。請讓我知道是否有任何我已省略的相關細節。