找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 378|回复: 0
打印 上一主题 下一主题

wordpress中缩略图调取几种方法

[复制链接]

3444

主题

3465

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11142
跳转到指定楼层
楼主
发表于 2016-3-23 01:56:29 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

凭文章ID就可以找到第一个图片。这里可以写成方法如下,用户获取第一个缩略图,如果没有上传过图片,返回空字符串。


以下代码贴入主题的function.php文件:

代码如下
复制代码
//缩略图获取
add_theme_support( 'post-thumbnails' );
set_post_thumbnail_size( 140, 98 ,true );//设置缩略图的尺寸
function dm_the_thumbnail() {
    global $post;
    // 判断该文章是否设置的缩略图,如果有则直接显示
    if ( has_post_thumbnail() ) {
        echo '<a href="'.get_permalink().'">';
        the_post_thumbnail();
        echo '</a>';
    } else { //如果文章没有设置缩略图,则查找文章内是否包含图片
        $content = $post->post_content;
        preg_match_all('/<img.*?(?: |\t|\r|\n)?src=['"]?(.+?)['"]?(??: |\t|\r|\n)+.*?)?>/sim', $content, $strResult, PREG_PATTERN_ORDER);
        $n = count($strResult[1]);
        if($n > 0){ // 如果文章内包含有图片,就用第一张图片做为缩略图
            echo '<a href="'.get_permalink().'"><img src="'.$strResult[1][0].'" /></a>';
        }else { // 如果文章内没有图片,则用默认的图片。
            echo '<a href="'.get_permalink().'"><img src="'.get_bloginfo('template_url').'/img/thumbnail.jpg" /></a>';
        }
    }
}

代码注释相当详细了,这里不过多说明。添加新文章的时候,右侧有个设置缩略图,这样就行了


方法二

代码如下
复制代码
function getFirstImage($postId) {
$args = array(
  'numberposts' => 1,
  'order'=> 'ASC',
  'post_mime_type' => 'image',
  'post_parent' => $postId,
  'post_status' => null,
  'post_type' => 'attachment'
);
$attachments = get_children($args);
// 如果没有上传图片, 返回空字符串
if(!$attachments) {
  return '';
}
// 获取缩略图中的第一个图片, 并组装成 HTML 节点返回
$image = array_pop($attachments);
$imageSrc = wp_get_attachment_image_src($image->ID, 'thumbnail');
$imageUrl = $imageSrc[0];
$html = '<img src="' . $imageUrl . '" alt="' . the_title('', '', false) . '" />';
return $html;
}

调用的代码如下。

代码如下
复制代码
$thumb = getFirstImage($post->ID);
if(strlen($thumb) > 0) {
echo $thumb;
} else {
// 显示默认图片或者不做任何事情
}

章特征图片(Featured Image)功能

WordPress 2.9之后,WordPress 提供了文章特征图片功能,可以为文章设定一个上传的图片作为特征图片,并可以给图片设定多个尺寸以便在不同的环境使用。可按一下步骤调用:

1. 为WordPress主题添加特征图片支持,并设定特征图片的尺寸和别名。

代码如下
复制代码
PHPadd_theme_support('post-thumbnails'); // 支持特征图片功能
add_image_size('thumb', 180, 180); // 别名为 thumb, 尺寸为 150x150 的设定
add_image_size('recommend', 120, 120); // 别名为 recommend, 尺寸为 120x120 的设定
add_theme_support('post-thumbnails'); // 支持特征图片功能
add_image_size('thumb', 180, 180); // 别名为 thumb, 尺寸为 150x150 的设定
add_image_size('recommend', 120, 120); // 别名为 recommend, 尺寸为 120x120 的设定

我们可以将以上代码加到 functions.php 文件, 为主题添加添加了Featured Image 支持, 并设定了 180x180 和 120x120 两种尺寸的图片。

其中 add_image_size 用于定义一种特征图片尺寸, 参考 WordPress Codex, 实际上它有 4 个参数。

第 1 个参数: 特征图片的尺寸别名, 用于调用不同尺寸的缩略图。

第 2 个参数: 图片的宽度

第 3 个参数: 图片的高度

第 4 个参数: 参数是个布尔值, 用于指定图片的裁切方式。 默认为 false.

如果为 true, 图片会按较大的压缩比例处理, 多余部分裁剪掉。 比如现在有图片 900x600, 要求压缩成 150x150 的图片, 那么会先将图片压缩成 225x150 的图片, 才裁剪成 150x150.

如果为 false, 图片会按较小的压缩比例处理。 比如现在有图片 900x600, 要求压缩成 150x150 的图片, 那么会将图片压缩成 150x100 的图片。

下图是两个缩略图, 原图 1024x768, 左缩略图是 add_image_size('xxx', 120, 120, true);, 而右图使用的是 add_image_size('xxx', 120, 120, false);。

代码如下
复制代码
<?php if ( is_home() ) { ?>
我只会在首页显示
<?php } ?>


is_home(); 函数在首页的时候会返回一个 true
上面那段代码是常用的只在首页显示
插入任何模板页PHP里都可以,

例如侧边栏 sidebar.php 或页脚 footer.php

但如果它之前有个 query_posts(); 则会让它失效
原因是 is_home is_virgin is_ooxx 这种 is_ 前缀的都是基于主旋律循环来判断,
而 query_posts(); 会让其偏离主循环

解决方案是在 is_home(); 之前加一个 wp_reset_query();

代码如下
复制代码
<?php wp_reset_query(); if ( is_home() ) { ?>
我只会在首页显示, 真的!
<?php } ?>


第二种
当你使用指定的一个page页面作为首页时。这种情况下is_home()是不起作用。

可以使用is_front_page()来判断当前页是不是指定的首页,我们在上面所描述的情况下需要的就是这个函数。

代码如下
复制代码
<?php if (is_home() || is_front_page()) { ?>
首页显示代码……………………
<?php } ?>具体步骤如下:
修改网站 /wp-includes/class-wp.php中如下代码
代码如下
复制代码
if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = $_SERVER['PATH_INFO'];
else
$pathinfo = '';
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = $_SERVER['REQUEST_URI'];
修改为
代码如下
复制代码
if ( isset($_SERVER['PATH_INFO']) )
$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], 'utf-8', 'GBK');
else
$pathinfo = ”;
$pathinfo_array = explode('?', $pathinfo);
$pathinfo = str_replace("%", "%25", $pathinfo_array[0]);
$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], 'utf-8', 'GBK');
即可
其实我们总结一下就是
代码如下
复制代码
查找:$pathinfo = $_SERVER['PATH_INFO'];
修改为:$pathinfo = mb_convert_encoding($_SERVER['PATH_INFO'], “UTF-8″, “GBK”);
再查找:$req_uri = $_SERVER['REQUEST_URI'];
修改为:$req_uri = mb_convert_encoding($_SERVER['REQUEST_URI'], “UTF-8″, “GBK”);
即可了.

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

用户反馈
客户端