检查页面/帖子是否有任何链接到图像jpg/gif/png的锚点

时间:2012-05-29 作者:Andrew

我的目标是将fancybox添加到我正在开发的站点中,但我只想在页面/帖子需要时将JS/CSS等排队。

我的想法是,我需要检查帖子或页面上的所有锚定标签,如果锚定标签链接到任何形式的图像(jpg、png、gif),那么我将把必要的资产排队。

这似乎是正确的方法吗?这是正则表达式的工作吗,不知何故应用于\\u内容的过滤器?

我对其他一切都没问题,只是需要测试。

下面的代码添加了.fancybox 类来创建链接到指定文件类型的所有锚点,以便我可以以某种方式检查类名?PS我不想使用插件来加载fancybox,我更愿意自己来做。

jQuery("a[href$=\'.jpg\'],a[href$=\'.png\'],a[href$=\'.gif\']").fancybox();
Update: 这是一个简单的检查,我到目前为止将检查锚的内容。只是需要适应有一个类名,我想我在那里,似乎工作正常。

function content_image_check( $content ) {

if( strpos( $content, "<a" ) ) {
   echo \'yes\';
} else {
   echo \'no\'; 
}

return $content;
}

add_filter(\'the_content\', \'content_image_check\'); 

Update 4

我正在使用XPath查询。这是我迄今为止最接近的一次。只有当页面上有包含图像的锚点时,它才会将css和js排队。我想修改查询,以便它可以找到类为“fancybox”的锚,但由于某些原因,当我尝试使用时,查询无法看到从jQuery添加的“fancybox”类名$hrefs = $xp->query("//a/img/../@class[\'fancybox\']");

另一个选项是使用文件名以结尾的href按锚点排序。jpg。gif,png。我会很高兴的。

function content_image_check( $content ) {


$dom = new DOMDocument();
$dom->loadHTML($content);

$xp = new DOMXPath( $dom );
$hrefs = $xp->query("//a/img/../@href");


$count = $hrefs->length;
print_r( $count);

return $content;
}

if ( $count ) {
    wp_enqueue_script( \'fancybox\' ); // js
    wp_enqueue_style( \'fancybox\' ); // css
}

add_filter(\'the_content\', \'content_image_check\'); 
很明显,我已经在其他地方注册了css和js,并且只在需要时将其排队。

1 个回复
SO网友:Chris_O

此方法过去用于检查页面上是否存在短代码。您必须对其进行测试,看看它是否能及时触发以将javascript排入队列>

add_filter(\'the_posts\', \'c3_image_check\'); 
function c3_image_check($posts){
    if (empty($posts)) return $posts;
    $img_found = false; 
    foreach ($posts as $post) {
        if (stripos($post->post_content, \'<img src=\')) {
            $img_found = true; // bingo!
            break;
        }
    }
    if ($img_found) {
        wp_enqueue_script( \'jquery.fancybox\', LIB .\'/jquery.fancybox.min.js\', array( \'jquery\' ) );
    }

    return $posts;
}

结束

相关推荐

Attachments without images

我正在使用Attachments 插件,但我相信这个问题适用于常规媒体库。我想做的是有一个“附件”(元数据、标题、标题),但没有与之关联的图像。原因是,我想将附件视为“项目项”,可以是图像或文本块。这可能吗?