2012-01-11 20 views
0

Wordpressでは、添付ファイルがある投稿のjQueryギャラリーのスクリプトをエンキューしようとしています。Wordpress - ループに添付ファイル付き投稿が含まれているかどうかを確認しますか?

私は、単一の記事のために働く、このシンプルな機能だ:私はgotImages(呼び出すときのfunctions.phpに、それはいくつかの記事で、ホームページ用のファイルが添付された単一のポストのための真が、falseを返す)

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

を最初の投稿に添付ファイルがない場合。

これを変更して複数の投稿、つまり10個の投稿を表示しているホームページに表示するにはどうすればよいですか?

ありがとうございます!

答えて

0

最後に、粗い作業の解決策を見つけ出しました。おそらく最終版ではありませんが、ここに興味のある人のための私の解決策です。 functions.phpに入れた場合

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); 
} 

この関数は、現在のループの内容を読みと<IMG>タグのためにそれをスキャンします。 1つ以上のタグが見つかった場合は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

10個の投稿のそれぞれを表示しているときにホームページのループに入っている場合、それをそのまま呼び出しても望ましい結果が得られます。複数の投稿で動作するかどうかは、スライドショーの実行に使用しているCSSセレクタによって異なります。 CSS IDを使用している場合、同じIDを持つ複数の要素があるため、HTMLは無効になります。

+0

ループ内の最初の投稿をチェックしているようです。私は1を超える場合、残りの部分をループする方法を考え出す必要があります。関数からの戻り値は、Wordpressがjavascriptをエンキューするかどうかを決定するだけで、クラスまたはIDとは何も関係がありません。 – Brigante

+0

@JohannesあなたのホームページにあなたのPHPを投稿できますか? – dyelawn

+0

今は自分のコンピュータではありませんが、それはデフォルトのTwentyelevenテーマです。 Btw私はfunctions.phpで関数を呼び出しているので、ループの外にあります。 – Brigante

関連する問題