为WordPress博客文章列表的标题增加缩略图

现在已经是9102年了,整个网页一张图都没有实在是太斋了,没有任何看的欲望,虽然没有什么人看,自己看着也觉得有点枯燥。但是又得修改主题模板,CSS样式表等又要折腾不少的时间 … 每个人都有自己感兴趣的事情,比如玩一下手游,总会挤一点时间出来,花在感兴趣的事情上面。下面记录折腾过程

实现文章标题+缩略图大概思路

这是针对我自己使用的 WordPress 主题 twentyseventeen 来修改,因为没钱买更美丽的主题了。

一、文章页(blog)与目录页(category)必需按照标题+摘要的方式显示。

二、特色图片+抓取文章第一张图片+默认缩略图,输出标题缩略图。

三、完善CSS样式表。

确定了大概思路,开始修改主题的模板文件以及主题函数。

一、文章页与目录页按照标题+摘要方式显示

主题默认是显示整篇文章的,除非自己手动添加【更多(more)】布局元素。为了整体统一,修改为摘要显示方式。

修改相关的模板实现摘要显示

1、文章页(blog)使用的是index.php

2、分类目录页(category),使用的是archive.php

分别打开这两个文件,模板默结构是完整文章输出,我们修改为只输出显示摘要。

	/* Start the Loop */
	while ( have_posts() ) :
		the_post();

		/*
		 * Include the Post-Format-specific template for the content.
		 * If you want to override this in a child theme, then include a file
		 * called content-___.php (where ___ is the Post Format name) and that will be used instead.
		 */
		/* 修改这里默认的get_post_format() 修改为'excerpt' */
		get_template_part( 'template-parts/post/content', 'excerpt' );

	endwhile;

是调用输出摘要的模板content-excerpt.php

二、特色图片+抓取文章第一张图片+默认缩略图,输出标题缩略图

twentyseventeen主题的特色图片这个功能一直都没有使用。因为该主题的特色图片的默认尺寸是2000×1200,对于网站宽带压力不小了,如果每一篇博客文章都加入特色图片的话,加载图片会特别慢了。

那么就将这个特色图片的功能用作文章标题的缩略图,将默认尺寸更改为200×200,并且将主题的 thumbnail-avatar 也设置为200×200,就不会造成生成太多种尺寸的缩略图。

1、修改主题函数 functions.php ,更改特色图片尺寸

	add_image_size( 'twentyseventeen-featured-image', 200, 200, true );

	add_image_size( 'twentyseventeen-thumbnail-avatar', 200, 200, true );

2、添加抓取文章第一张图片函数到 functions.php

//抓取文章第一张图片
function catch_that_image() {
	global $post, $posts;
	$first_img = '';
	ob_start();
	ob_end_clean();
	$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
	//$first_img = $matches [1] [0];
	
	if( empty( $matches [1] [0] ) ){ //Defines a default image
		$first_img = get_theme_file_uri( '/assets/images/fz-default-thumbnail.png' );
	} else {
		$first_img = $matches [1] [0];
	}
	
	return $first_img;
}

这个抓取图片函数,如果文章没有图片,会调取默认设置好的一张图片输出。

抓取文章第一张图片函数,是网上找的代码,自己当然不懂代码,只是复制来的。但参考了一些资料,稍微做了细微的修改不知道是否合理,反正正常工作咯。

即使原本的代码也是正常工作的,但据说可能会不太合理的代码,会影响PHP性能。抓取文章第一张图片的原代码如下:

function catch_that_image() {
	global $post, $posts;
	$first_img = '';
	ob_start();
	ob_end_clean();
	$output = preg_match_all('/<img.+src=['"]([^'"]+)['"].*>/i', $post->post_content, $matches);
	$first_img = $matches [1] [0];
	
	if(empty($first_img)){ //Defines a default image
		$first_img = "/default.jpg";
	}
	
	return $first_img;
}

3、输出标题缩略图

因为上面我们使用了标题+摘要的方式,因此我们需要在摘要模板 content-excerpt.php 这里添加缩略图输出。

content-excerpt.php模板源码如下:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

	<header class="entry-header">
		<?php if ( 'post' === get_post_type() ) : ?>
			<div class="entry-meta">
				<?php
				echo twentyseventeen_time_link();
				twentyseventeen_edit_link();
				?>
			</div><!-- .entry-meta -->
		<?php elseif ( 'page' === get_post_type() && get_edit_post_link() ) : ?>
			<div class="entry-meta">
				<?php twentyseventeen_edit_link(); ?>
			</div><!-- .entry-meta -->
		<?php endif; ?>

		<?php
		if ( is_front_page() && ! is_home() ) {

			// The excerpt is being displayed within a front page section, so it's a lower hierarchy than h2.
			the_title( sprintf( '<h3 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h3>' );
		} else {
			the_title( sprintf( '<h2 class="entry-title"><a href="%s" rel="bookmark">', esc_url( get_permalink() ) ), '</a></h2>' );
		}
		?>
	</header><!-- .entry-header -->

	<div class="entry-summary">
		<?php the_excerpt(); ?>
	</div><!-- .entry-summary -->

</article><!-- #post-## -->

我之前加入了文章统计阅读次数的功能,但是在使用摘要显示方式之后,文章列表无法统计阅读次数了。

所以摘要模板修改为如下:

<article id="post-<?php the_ID(); ?>" <?php post_class(); ?>>

	<?php if ( '' !== get_the_post_thumbnail() && ! is_single() ) : ?>
		<div class="post-thumbnail">
			<a href="<?php the_permalink(); ?>">
				<?php the_post_thumbnail( 'twentyseventeen-featured-image' ); ?>
			</a>
		</div><!-- .post-thumbnail -->
		
	<?php else : ?>
	
		<div class="post-thumbnail">
			<a href="<?php the_permalink(); ?>">
				<?php echo '<img src="'; echo catch_that_image(); echo '" />'; ?>
			</a>
		</div><!-- .post-thumbnail -->
		
	<?php endif; ?>

	<header class="entry-header">
		<?php		
		if ( is_single() ) {
			the_title( '<h1 class="entry-title">', '</h1>' );
		} elseif ( is_front_page() && is_home() ) {
			the_title( '<h3 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h3>' );
		} else {
			the_title( '<h2 class="entry-title"><a href="' . esc_url( get_permalink() ) . '" rel="bookmark">', '</a></h2>' );
		};

		if ( 'post' === get_post_type() ) {
			echo '<div class="entry-meta">';
			if ( is_single() ) {
				twentyseventeen_posted_on();
			} else {
				echo twentyseventeen_time_link();
				twentyseventeen_edit_link();
			};
			
			//阅读次数
			echo '<span class="postviews-icon">'; echo getPostViews(get_the_ID()); echo '</span>';
			
			echo '</div><!-- .entry-meta -->';
		}
		?>
	</header><!-- .entry-header -->

	<div class="entry-summary">
		<?php the_excerpt(); ?>
	</div><!-- .entry-summary -->

</article><!-- #post-## -->

缩略图放在标题前面,代码已经可以正常工作了,统计阅读次数也可以正常工作了。代码只是可用,但并不太好(我觉得)

4、移除文章内特色图片

原本主题如果设置了特色图片,会在文章内头部显示特色图片的。所以这里要把它干掉,不然文章内标题头部出现一张200×200的小图片,很难看。

修改header.php,调用特色图片的源代码如下:

	<?php
	/*
	 * If a regular post or page, and not the front page, show the featured image.
	 * Using get_queried_object_id() here since the $post global may not be set before a call to the_post().
	 */
	if ( ( is_single() || ( is_page() && ! twentyseventeen_is_frontpage() ) ) && has_post_thumbnail( get_queried_object_id() ) ) :
		echo '<div class="single-featured-image-header">';
		echo get_the_post_thumbnail( get_queried_object_id(), 'twentyseventeen-featured-image' );
		echo '</div><!-- .single-featured-image-header -->';
	endif;
	?>

将这段代码删除掉,即可去除文章内的特色图片。

三、完善CSS样式表

样式表就各花入各眼了,我要求不高了,整洁即可,我需要的样式就如下图

CSS样式表用到了一些参数,与各种老旧浏览器的兼容性可能并不太好。我需要移动端ios的各种浏览器兼容,PC端谷歌浏览器兼容,就够了。

标题在容器内超出2行显示省略号

.entry-header .entry-title {
	display: -webkit-box;
	-webkit-box-orient: vertical;
	-webkit-line-clamp: 2;
	overflow: hidden;
}

摘要设置不自动换行,超出的显示省略号

.blog .site-main > article p, .category .site-main > article p, .recent-posts > article p {
	overflow: hidden;
	white-space: nowrap;
	text-overflow: ellipsis;
}

那么我需要的标题右边显示缩略图,到此就已经折腾完成了。大概是已经记录完整了吧,如发现有遗漏的,有空再继续完善。

难道越智能的产品越智障?

在没多久之前亲戚家里购买了一台新电视机,家里的老人家根本不懂怎么使用。

上门安装电视的服务人员已经去过一次帮忙与指导要怎么操作,但是没多久又弄不出节目来看了,然后才打电话叫我过去教怎样操作,才能把电视节目放出来看。因为我也不是太有空,所以在电话里头教老人家怎么操作,最终在电话通话上将问题解决。

首先老人家埋怨现在新出的电视机

1、电视机连电源开关都没有,电视机任何实体按键都没有,就只有一个遥控器。如果遥控器坏了或者丢了,电视机连开都开不了,成了摆设的板砖!智障简约设计?

2、开机必须看一段时间广告,之后才能正常使用。牛皮癣无处不在!

3、电视机功能太多,但没有一个需要的。现在都宣称智能电视,就是集成一个安卓系统,集成了一堆鸡肋流氓软件所谓的智能。要切换一个信号源都能卡成SB,集成的安卓系统就为了广告而生!智能就一堆流氓!

4、遥控器太简单,看不懂操作。因为智能嘛!老人家确实比较难入门?为什么以前CRT时代整个遥控器都是按键,老人家却没有入门门槛?然而现在的所谓智能,简约的设计却门槛变高了?产品设计有考虑过用户体验吗?

算了吧,那么大还那么智能的电视,且那么便宜的价格,还要什么用户体验。

别说电视机了,我的烧水壶还是智能的你信不信?

单片机智能控制芯片,多种温度随心选择,智能童锁,电动出水……实在是居家旅行必备产品!

我这烧水壶从买回来用了几个月后就智障了,各种按键功能缭乱,按电动出水,你给我自冷,按温度选择,你给我童锁!真令人感到可惜!又不舍得丢弃,能省就省吧,反正现在买新的也不一定能用多久…。

拆开智障的控制电路,将智障的功能改为全手动的实际控制电路,我叫你以后还智障?不存在的!

就这个烧水壶,为什么将最基础的电动出水功能都得经过单片机控制芯片来控制?

实际上也并没有节省成本呀?

最主要的问题是:

单片机控制芯片的按键控制信号处理智障了!从而导致功能缭乱了。那么我将这个电动出水的按键电路与单片机控制芯片断开,直接修改为控制电动水泵的功率三极管b极,达到控制电动抽水的目的。从而有效的隔离智障控制板。

其实这个烧水壶还有一个令人非常不爽的智障功能,就是:

如果家里停电即使是10几秒钟之后又来电的话,不管你水壶里的开水根本不需要重新加热沸腾,智障控制电路都只管再次加热至沸腾温控触发才切换保温。

又或者温度在85°C,有时候按键发神经缭乱或按错,跳至98°C,我再次选择回85°C只在2秒中之内完成的操作,智障的控制芯片只管重新加热至沸腾温控触发才切换保温。

就这简单的烧水壶家用电器,我不需要这些所谓的智能控制。童锁、自冷、断电出水等这些所谓的多功能,本来就没有做好做稳定,导致一大堆的智障问题不断!其实都不是核心部件故障,而是因为控制芯片缭乱导致的。虽然是一个200元内的烧水壶,我只需最原始的简单稳定的控制电路,这难道需要增加成本吗?我觉得反而成本更低吧。

为了产品卖点?为了多功能?……?

算了…有时间还是玩两把吃鸡来的爽!懒得管它智障还是智障。

关于WordPress上传图片生成各种尺寸缩略图的设置

关于WordPress上传图片生成各种尺寸的缩略图,在之前已经设置过禁用了缩略图。不知什么时候检查上传目录的图片,发现不知什么时候又冒出了100×100的缩略图,后来发现是由于更换了主题的原因。

然后最近我安装了一个新的灯箱插件,然而又多出了另一个尺寸300×300的缩略图出来。这生成的各种尺寸的缩略图实在是令人捉摸不透呀!到底该如何设置才更适合自己需要的缩略图,如果不使用缩略图我们可以禁止WordPress生成缩略图,但插件生成的缩略图就无法禁用,有时候禁用插件生成的缩略图可能会导致插件工作异常。

我之前就是禁用了WordPress生成缩略图,一直使用到现在都比较满意。

由于最近安装了一个相册灯箱插件,再次折腾关于WordPress缩略图的设置。

本来就不喜欢使用缩略图,因为觉得缩略图比原图尺寸与清晰度都大打折扣。但我忽略了缩略图的优势,即可以提高访问速度,特别是多图的页面使用缩略图提速更加明显。所以WordPress的一些功能并不是我们想象中的一无是处,如果真的一无是处WordPress也不会集成这些鸡肋的功能吧?也许我们还没有弄明白如何去使用这些功能罢了。

设置适合自己使用的缩略图

这儿我只是针对我自己的网站配置适合自己需要的缩略图尺寸,并不适用于所有人。针对我有一个相册灯箱插件是需要生成一个特定尺寸的缩略图,才会体现出更出色的效果。

一、首先禁用WordPress生成缩略图

二、调整缩略图到需要的尺寸

我使用了相册灯箱插件PhotoSwipe,这个插件在上传图片到媒体库的时候,根据下图配置的话,会生成320×320尺寸的缩略图(配置160×160的2倍,有点奇怪吧!)

PhotoSwipe 插件设置

以上插件的缩略图配置,是体现在文章或页面插入相册,那么就需要使用这个尺寸的缩略图以提高访问的速度。(因为相册往往是多张照片并且原片需要高分辨率高质量输出)

如果我们插入的是单张照片,配合灯箱插件与缩略图,高分辨率高质量的输出。那么还是需要根据文章或单页宽度,调整一个更合适单张照片的缩略图显示。

因此,这里我们就需要打开WordPress自带的缩略图功能了!

媒体设置

WordPress媒体设置,缩略图大小如果设置为0。在文章或页面插入照片的话,我们是无法选择更多尺寸的缩略图的,都是原图输出。要选择缩略图输出,就需要设置一个我们需要的宽度与高度(我这里设置为640×640)

使用缩略图是为了提高访问速度,同时配合灯箱插件又能在点击缩略图时,输出高质量高分辨率的照片(我暂时理解到的)

兜了一圈,然后回来……

最后需要注意的是,WordPress生成的缩略图其实还有一个不爽的地方!对于我们已经用PS软件优化了容量的32色的PNG格式的1200×1200像素图片,经过WordPress生成640×640像素的缩略图后,容量却比原图大得多得多!!!

所以,我们已经优化过容量的PNG格式图片,就千万别用WordPress生成的缩略图了!WordPress生成缩略图还是适合配合灯箱插件输出高质量JPG格式照片…

网站文件及数据库备份至对象存储OSS

备份的网站文件和数据库,存放备份是个问题。存放到哪里更安全可靠,且要实现自动循环备份,不用手动操作就完美了。找了很多的资料,有使用ftp自动上传到本地的循环备份方法,还有使用阿里的对象存储OSS循环备份的……但是配置这些又得花费不少的时间(对我而言)。

继续阅读“网站文件及数据库备份至对象存储OSS”