2010-07-28 41 views
2

我正在建立一個客戶端的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的實例與默認主題沒有問題。

謝謝你的時間 - 對小說抱歉。請讓我知道是否有任何我已省略的相關細節。

回答

0

就你的情況而言,我不知道會發生什麼奇怪的巫術,但是如果你改變你的主題代碼以使用在循環之外工作的函數呢? get_permalink($id)single_post_title() 應該做你需要的。

0

這些模板函數使用:global $post;來訪問發佈信息。

取而代之的是:

foreach($slugPostMap['ministry-update'] as $p):

你應該能夠簡單地使用$崗位作爲孩子變量:

foreach($slugPostMap['ministry-update'] as $post):