如果<;a>;链接是一个PDF文件,样式相应


If an <a> link is a PDF file, style accordingly

我正在为一位客户开发一个网站,他是一个考试委员会。他们有许多内容页面,其中包含关于教学大纲的摘要详细信息,并且需要从文本中直接链接到PDF教学大纲文件。还有一个专门用于PDF文件的页面,我目前正在WordPress中制作这些自定义帖子类型,但它们有自己的图标设置,我不想受到我即将描述的PHP规则的影响。(这更像是一个PHP问题,而不是WordPress问题,所以不要担心。)

假设我有一个链接,新教学大纲。使用WordPress,如果不了解HTML,就无法将类添加到链接中,而在我的客户及其相当老的学校员工的情况下,HTML是不存在的。他们将展示如何使用WordPress帖子或页面编辑器中的"添加媒体"按钮添加PDF文件的链接,只需创建一个指向.PDF文件的链接。这里的问题是,它只是一个链接,客户希望用户立即知道它是一个PDF文件,而不是一个页面,以便更容易找到相关的教学大纲文件。因此,我建议创建一个规则,在链接到.pdf文件的任何链接旁边添加一个.png图标,它也会更改链接的颜色。

有人知道我是怎么做到的吗?我一直在寻找能自动做到这一点的WordPress插件,但它们要么已经过时,要么很难使用(即,员工需要HTML知识来重新设计链接的样式。)

我在网上找到了这个代码片段,但不知道它是否是正确的方向。

$whitelist = array(".pdf");
foreach ($whitelist as $item) {
    if (preg_match("/$item'$/i", $_FILES['uploadfile']['name'])) {
    }
    else {
        redirect_to("index.php");
    }
}

想法?

这只需要CSS就可以完成,它支持包括IE7+在内的所有主流浏览器。不需要添加任何额外的类或<img>元素。

下面的CSS将针对.pdf的任何链接,更改链接颜色,给它一些左填充,并在创建的空间中应用背景图像:

a[href$=".pdf"] {
    background: url(images/pdf-icon.png) no-repeat 0 50%;
    padding-left: 25px;
    color: red;
}

演示:http://jsfiddle.net/xuBpG/1/

试试这个:

将此代码添加到functions.php文件中。

add_filter('media_send_to_editor','my_filter_pdf',20,3);

function my_filter_pdf($html, $id) {
    $attachment = get_post($id); //fetching attachment by $id passed through
    $mime_type = $attachment->post_mime_type; //getting the mime-type
    if ($mime_type == 'application/pdf') { //checking mime-type
        $src = wp_get_attachment_url( $id );
        $html = '<a href="'.$src.'" class="any-class-for-pdf-files">File</a>';
        return $html; // return new $html    
    }
        return $html;
}

这是一个函数,当你将pdf文件插入帖子时,它将向.pdf锚标记文件添加一个类。

使用@tw16的答案提供了一种简单而相似的方法来使用Font Awesome图标,而不是静态图像。对于那些希望使用Font真棒或其他支持unicode的图标库的人,请尝试以下操作:

/* MIME TYPE ICONS */
a[href$=".pdf"]::after {
  font-family: "fontawesome";
  content: "'0020'f1c1";
  color: inherit
}
a[href$=".doc"]::after {
  font-family: "fontawesome";
  content: "'0020'f1c2";
  color: inherit
}
a[href$=".xls"]::after {
  font-family: "fontawesome";
  content: "'0020'f1c3";
  color: inherit
}

当然,您可以使用::before::after伪类,这取决于您希望图标的位置(左或右)。

感谢tw16对此采取的简单方法。