Wordpress - 检查循环是否包含带附件的帖子?

时间:2012-01-11 16:51:59

标签: php wordpress

在Wordpress中,我正在尝试将jQuery库的脚本排入队列,仅用于获取附件的帖子。

我有一个适用于单个帖子的简单功能:

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

当我在functions.php中调用gotImages()时,对于带有附件的单个帖子,它返回true,但如果第一个帖子没有附件,则对于包含多个帖子的主页返回false。

如何修改此功能以便它适用于多个帖子,即在我显示10个帖子的主页上?

谢谢!

2 个答案:

答案 0 :(得分:0)

如果您在显示十个帖子中的每个帖子时都在主页的循环中,那么按原样调用它应该会产生所需的结果。它是否适用于多个帖子取决于您用于运行幻灯片的css选择器。如果您使用的是CSS ID,那么您的HTML将无效,因为您将拥有多个具有相同ID的元素。

答案 1 :(得分: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;

我不确定这个功能的价格有多贵,但是我正在研究它的网站非常小,所以现在它不是很大,它会为处理时间增加几毫秒。