2012-01-11 46 views
0

在WordPress的我試圖排隊的jQuery畫廊的腳本只適用於有附件的帖子。WordPress的 - 檢查循環是否包含附件的帖子?

我得到這個簡單的功能,對於單個職位的工作原理:

function gotImages() 
{ 
    $attachments = get_children(array('post_parent' => get_the_ID(), 'post_type' => 'attachment', 'post_mime_type' => 'image')); 
    return (!empty($attachments) ? true : false); 
} 

當我打電話gotImages()中的functions.php返回與幾個職位的主頁單篇文章帶有附件的事實,但假如果第一篇文章沒有附件。

我該如何修改它,使其適用於多個帖子,即在顯示10個帖子的主頁上?

謝謝!

回答

0

最後算出了一個粗略的工作解決方案。這可能不是最終版本,但對於任何可能感興趣的人來說,這都是我的解決方案。

function gotImages() 
{ 
    global $wp_query; 
    $posts = $wp_query->posts; 

    if (empty($posts)) 
    return $posts; 

    $searchImages = '~<img [^>]* />~'; 

    foreach ($posts as $post) { 
     $content = $post->post_content; 
     preg_match_all($searchImages, $content, $countImages); 
     $images += count($countImages[0]); 
    } 
    return ($images >= 1 ? true : false); 
} 

要是放的functions.php將通過電流回路的內容讀取和掃描它<IMG>標籤此功能。如果找到一個或多個標籤,則返回true,否則返回false。

現在我可以使用它來有條件地排隊腳本或樣式表,具體取決於帖子是否有任何圖像。

例如像這樣:

if(!is_admin() && gotImages() == true) : 
    wp_register_script('fancybox', get_stylesheet_directory_uri() . '/libs/fancybox/jquery.fancybox.pack.js', array('jquery'), false, true); 
    wp_register_script('fancybox.init', get_stylesheet_directory_uri() . '/js/init/lightbox.init', array('fancybox'), false, true); 

    wp_enqueue_script('fancybox'); 
    wp_enqueue_script('fancybox.init'); 
endif; 

我還沒有確定「昂貴」這個功能是如何,但我的工作就可以了現場非常小所以現在不是它的一個大問題處理時間增加了幾個ms。

0

如果您在顯示每篇帖子的時候在主頁上進行循環,那麼將其視爲是應該產生期望的結果。它是否適用於多個帖子取決於您用來運行幻燈片的css選擇器。如果您使用的是CSS ID,那麼您的HTML將無效,因爲您將擁有多個具有相同ID的元素。

+0

它似乎只是檢查循環中的第一篇文章。如果超過1,我需要弄清楚如何循環其餘部分。函數的返回值只是決定Wordpress是否應該將javascript排入隊列,因此與類或ID無關。 – Brigante 2012-01-11 17:19:40

+0

@Johannes你可以發佈你的PHP的主頁? – dyelawn 2012-01-11 17:35:36

+0

現在不在我的電腦,但它是默認的Twentyeleven主題。順便說一句我在functions.php中調用函數,所以它在循環之外。 – Brigante 2012-01-11 18:04:56

相關問題