轻松获取wordpress特色图片URL地址的两种方法

继上篇文章wordpress文章编辑器加入特色图像支持的完美方法,Parallelism主题加入特色图片功能后,我又遇到了一个问题,如下图,我们可以通过函数 php the_post_thumbnail(); 来调用相应的文章缩略图,但我又想点击缩略图后将该图放大显示,这就需要调用特色图片的完整URl了。
QQ截图20170313225930

怎么办呢?上百度啊,百度上的教程也挺多的,扒了好几波代码都不管用,不过最后还是被我扒到了一些两种方法。

方法1.使用WordPress函数the_post_thumbnail_url()获取特色图片缩略图URL

wordpress英文官方网站对the_post_thumbnail_url()函数的描述是这样的:

Gets the direct image URL for the featured image of the current post, or the given Post ID.

This tag must be used within The Loop.

Use has_post_thumbnail() to check whether a Feature Image has been added to the post.

翻译成中文就是:

获当前文章的特色图片直接URL,也可以获取指定POST_ID的文章特色图片直接URL。

它必须在循环中使用。

在使用之前先检查文章是否添加特色图片,检查函数为has_post_thumbnail()。
最终的代码如下,直接添加到要调用特色图片URl的地方即可:

1
<?php if ( has_post_thumbnail( ) ) { the_post_thumbnail_url('codilight_lite_single_medium' );} ?>

方法2.使用WordPress函数the_post_thumbnail_url()获取特色图片缩略图URL

这个方法大概就是把特殊图片里面的SRC链接地址提取出来,这样,我们就有了对于的URL地址,那么就有了下面这段代码:

1
2
3
$html = get_the_post_thumbnail();
preg_match_all("/<img.*src\s*=\s*[\"|\']?\s*([^>\"\'\s]*)/i", $html, $matches);
$imgsrc=$matches[1][0];

当然,我们这样做逻辑还不够完整。应该是在有特殊图片的时候调用图片的URL,没有特殊图片的时候调用文章的第一个插入的图片,还没有的话就只能留空或者自定义个URL地址了。整合下,我们就得到以下代码,放在主题的functions.php下即可:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
/**
* 函数名称:post_thumbnail_url
* 函数作用:输出特殊图片中的图片链接地址
*/
function post_thumbnail_url(){
    global $post, $posts;
    if (has_post_thumbnail()) {
        $html = get_the_post_thumbnail();
        preg_match_all("/<img.*src\s*=\s*[\"|\']?\s*([^>\"\'\s]*)/i", $html, $matches);
        $imgsrc=$matches[1][0];
    }else{
        $content = $post->post_content;
        preg_match_all('/<img.+src=[\'"]([^\'"]+)[\'"].*>/i',$post->post_content,$matches);
        $imgsrc=$matches[1][0];
        if($imgsrc==""){ 
        // 如果无图片则显示none,当然也可以自定义个URL地址
            $imgsrc="none";
        }
    }
    echo "$imgsrc";
}

调用还是很简单的,直接在相应页面输出就可以了:

1
<?php post_thumbnail_url(); ?>

这个函数可以直接输出URL地址,当然,如果您也可以把里面的none参数修改成您所需要的URL地址。它是在所有地址都无法实现后所提取的默认图片显示地址。当然,也可以增加一个随机函数,调用不同的图片,这个功能就留给大家自我思考吧。

发表一条评论:

电子邮件地址不会被公开。 必填项已用*标注