为没有设置缩略图的文章随机显示缩略图

in #thumbnail7 years ago

博客首页显示的文章图片是特色图像,如果需要显示特定的图片,需要在添加文章时单独设置,而一般情况下,我们不可能为每篇文章都设置特色图像。也因此,出现了两种比较流行的设置特色图像的简便方法:第一种是假如没有手动设置特色图像就自动设置文章里出现的第一张图片为特色图像,第二种是假如没有手动设置特色图像就设置一张默认的图片为特色图像。也有两者的结合,通过条件语句,如果有图片就第一种,如果没有图片就第二种。

我是不太喜欢第一种,毕竟,并不是所有的第一张图片都适合作为特色图像。而第二种也有问题,假如没有图片的文章较多,则显示的特色图像就都是一样的。我需要的是假如不手动设置特色图像则在准备好的多张图片中随机显示一张,如果稍微多准备一点特色图片,那么重复的可能性就会低。

这种方法网上并不多见,完整代码如下:

/**

  • 为没有设置缩略图的文章随机显示缩略图
    /
    if ( function_exists('add_theme_support') )add_theme_support('post-thumbnails');
    //让你的主题开启特色图像功能
    function post_thumbnail_src(){
    global $post;
    if( $values = get_post_custom_values("thumb") ) {//输出自定义域图片地址
    $values = get_post_custom_values("thumb");
    $post_thumbnail_src = $values [0];
    } elseif( has_post_thumbnail() ){//如果有特色缩略图,则输出缩略图地址
    $thumbnail_src = wp_get_attachment_image_src(get_post_thumbnail_id($post->ID),'thumbnail');
    //其中full可以修改的,可以为thumbnail, medium, large or full(分别代表最小的缩略图、中等、大和原始尺寸)
    $post_thumbnail_src = $thumbnail_src [0];
    } else {//如果没有设置特色缩略图,则输出第一张图片为特色缩略图
    $post_thumbnail_src = '';
    ob_start();
    ob_end_clean();
    $output = preg_match_all('/<img.+src='"['"].
    >/i', $post->post_content, $matches);
    $post_thumbnail_src = $matches [1] [0]; //获取该图片 src
    if(empty($post_thumbnail_src)){ //如果日志中没有图片,则显示随机图片
    $random = mt_rand(1, 10);//根据实际准备的图片数量修改
    echo get_bloginfo('template_url');
    echo '/images/pic/'.$random.'.jpg';//根据实际情况修改图片路径
    //如果日志中没有图片,则显示默认图片。我用的是随机显示,所以把下面一行的方法注释掉了
    //echo '/images/default_thumb.jpg';
    }
    };
    echo $post_thumbnail_src;
    }
    逻辑是如果设置了特色图像则输出特色图像,如果没有设置特色图像则设置第一张图片为特色图像,如果文章连图片也没有,则显示随机图像为特色图像或者显示一张默认图片为特色图像(二选一)。

之前说了,并不是所有的第一张图片都适合作为特色图像,所以,我用的逻辑是:如果设置了特色图像则输出特色图像,如果没有设置,则显示随机图像为特色图像。把代码中的这段去掉就可以了。

$post_thumbnail_src = '';
ob_start();
ob_end_clean();
$output = preg_match_all('/<img.+src='"['"].*>/i', $post->post_content, $matches);
$post_thumbnail_src = $matches [1] [0]; //获取该图片 src

然后在需要的地方调用即可。

Coin Marketplace

STEEM 0.27
TRX 0.12
JST 0.032
BTC 61769.55
ETH 2910.04
USDT 1.00
SBD 3.64