一、问题描述
在imqd.cn文章列表中,用于将正文内容截取保留前75个字的方法突然没效果了。
<p class="post-desc text-black-50 d-none d-md-block">
<?php
echo wp_trim_words( get_the_content(), 75, '...');
?>
</p>
直接展示了所有的正文内容,导致文章列表变得非常长,不好看。
正确的应该要这样:
二、问题排查
- 首先看看代码是否被动过,发现没有,因为在本地测试还是正常的
- 另外一个给客户做的网站发现也是一样的问题
- 发现可能是wp自动更新了版本的原因,当前版本是
6.0.1
,在之前的版本6.0
中是没有这个问题的 - 然后我在本地将
wordpress
更新到6.0.1
,发现还是正常的,并没有出现线上这种情况 - 我确认
wp_trim_words
这个函数WP
官方依旧支持,所以可能是线上服务器环境不一致,或者PHP版本不一致导致的,但是这个方法是WP
私有的,应该不受环境影响,所以目前还是不知道问题出在哪里
三、问题解决
没有找到问题根本原因,我只好换种方式来解决。
在网站上,直接用摘要来代替内容。
<?php
echo wp_trim_words( get_the_excerpt(), 75, '...');
?>
我还对文章摘要进行了判断。如果文章没有摘要,就会自动用正文显示,所以我还加了样式方式,超过3行则自动出现省略号来解决。
CSS文件:
.threelines {
word-break: break-all;
overflow: hidden;
text-overflow: ellipsis;
/*以下3行是核心代码*/
display: -webkit-box;
-webkit-line-clamp: 3;
-webkit-box-orient: vertical;
}
/*然后还要给p标签添加一个高度,避免在不支持以上属性的浏览器下不生效*/
.post-body .post-desc {
margin-bottom: 0;
height: 75px;
}
另外,还准备禁止WP的自动更新,以便再次出现类似的这种情况,在wp-config.js中添加如下代码即可:
define( 'WP_AUTO_UPDATE_CORE', false );
至此问题解决。即wp的方法+CSS的方法双结合来实现。