老郭博客之前使用的是子比主题,当时是花了400多买的,现在已经涨到快600块钱了。子比主题虽然挺不错的,界面也非常的美观,但是由于功能非常的全面,所以也就非常的臃肿,对于服务器资源的需求也比其他的主题大不少。其实,老郭博客只是为了记录生活中的经历和分享经验而已,很多功能压根就用不到。因此,老郭就想着做出一些改变。
老郭一开始的打算是从wordpress切换到typecho,毕竟typecho作为轻量化博客程序,给老郭用是绰绰有余了。而且从技术上来说切换难度不大,typecho也有很多不错的主题可以选择,就算是收费主题也比wordpress要便宜很多。但考虑到使用习惯,老郭最终还是选择继续使用wordpress,然后换一个轻量化一些的主题,这样博客打开的速度也会快上不少。
经过一番比较,老郭最终选择了胡鹤仙二次开发的Twenty Twelve 木头人修改精简版,这个主题虽然相当的简洁,但却不失美观,如果要求不高的话,拿过来直接用就可以了。
不过,老郭还是进行了一些细微的修改。老郭博客原来使用的是PHP8,子比主题是没有任何问题的,但这个主题已经有一些年头了,而且是个人开发的,更新显然没有那么快,所以切换过去之后果不其然的出现问题了。应该还是函数未定义之类的问题,不过老郭懒得修改了,直接把程序切换到PHP7.4,问题就自动解决了。

接下来就是修改的内容:
一是这个主题默认使用的是经典编辑器,这对于老手来说是更方法的。但老郭习惯了使用古腾堡区块编辑器,所以必须换回来。打开functions.php文件,删除掉1969-1973行的内容,启用古腾堡。
add_filter( 'use_block_editor_for_post', '__return_false', 999 ); remove_action( 'try_gutenberg_panel', 'wp_try_gutenberg_panel' ); remove_action( 'wp_enqueue_scripts', 'wp_common_block_scripts_and_styles' ); remove_action( 'admin_menu', 'gutenberg_menu' ); remove_action( 'admin_init', 'gutenberg_redirect_demo' );
二是这个主题logo是放在右边的,而老郭习惯于放在左边。打开主题文件夹下的header.php文件,把第50行的代码删除掉即可。
<a href="https://yinji.org/" title="回到首页"><img src="https://dogefs.s3.ladydaily.com/lucy/storage/1680832936501.png" alt="胡鹤仙"width="70" height="70"/></a>
然后打开style.css文件,在最后添加以下代码,按照自己的需求修改就行,代码里都有说明。
/* 主标题容器:控制图片尺寸和布局 */
.site-title {
display: block; /* 强制独占一行 */
margin-bottom: 10px; /* 增加图片与副标题间距 */
}
/* LOGO图片替换 */
.site-title a {
display: inline-block; /* 或 block */
width: 250px; /* 图片宽度 */
height: 78.5px; /* 图片高度 */
background: url('/wp-content/themes/2012-huhexian-main/images/logo.png') no-repeat center;
background-size: contain;
text-indent: -9999px; /* 隐藏文字 */
overflow: hidden;
}
/* 副标题样式调整 */
.site-description {
display: block; /* 强制换行显示 */
text-indent: 0; !important; /* 取消之前的隐藏 */
width: auto !important; /* 恢复默认宽度 */
height: auto !important; /* 恢复默认高度 */
margin: 0; /* 清除默认外边距 */
font-size: 1.6rem !important; /* 副标题字体大小 */
color: #333; /* 字体颜色 */
}
三是网站字数统计的问题,这也是很多主题共同存在的问题,把文章里的代码也统计进去了,导致字数严重的失真,虽然不影响大局,但老郭还是喜欢更加真实的统计。
这个主题一共有2处需要修改,第一处是页脚,打开functions.php文件,在2478行附近找到定义allwords函数。删除原来的内容,修改为以下代码,如果不喜欢原来的书名,也可以换成其他的。
function allwords() {
global $wpdb;
$chars = 0;
// 获取文章内容
$results = $wpdb->get_results("SELECT post_content FROM {$wpdb->posts} WHERE post_status = 'publish' AND post_type = 'post'");
foreach ($results as $result) {
// 获取去除代码块后的内容
$text = $result->post_content;
// 排除常见的代码块:PHP, HTML, JavaScript, CSS 等
$text_without_code = preg_replace([
'/<script.*?>.*?<\/script>/is', // 排除 JavaScript 代码块
'/<style.*?>.*?<\/style>/is', // 排除 CSS 样式块
'/<pre.*?>.*?<\/pre>/is', // 排除 <pre> 块
'/<code.*?>.*?<\/code>/is', // 排除 <code> 块
'/<\?php.*?\?>/is', // 排除 PHP 代码
'/<\?=.*?\?>/is', // 排除短 PHP 代码
'/<\!.*?\>/is' // 排除 HTML 注释
], '', $text); // 替换所有代码块为空字符串
// 清除 HTML 标签并进行字符解码
$text_clean = preg_replace('/\s+/', ' ', html_entity_decode(strip_tags($text_without_code)));
// 统计字数
$word_count = 0;
// 中文字符按字数计算
// 使用正则匹配中文字符
$chinese_chars = preg_match_all('/[\x{4e00}-\x{9fa5}]/u', $text_clean);
$word_count += $chinese_chars;
// 英文单词按单词计数
// 使用 str_word_count 来统计英文单词
$english_words = str_word_count($text_clean);
$word_count += $english_words;
// 其他字符(如标点符号)也计入总数
$punctuation_chars = preg_match_all('/[^\w\s]/u', $text_clean);
$word_count += $punctuation_chars;
// 将所有内容的字数累加
$chars += $word_count;
}
// 根据总字数给出不同的反馈信息
if($chars < 50000){
echo '全站共 '.$chars.' 字,还在努力更新中..加油!加油啦!';
} elseif ($chars < 70000 && $chars >= 50000) {
echo '全站共 '.$chars.' 字,写完一本埃克苏佩里的《小王子》了!';
} elseif ($chars < 90000 && $chars >= 70000) {
echo '全站共 '.$chars.' 字,写完一本鲁迅的《呐喊》了!';
} elseif ($chars < 100000 && $chars >= 90000) {
echo '全站共 '.$chars.' 字,写完一本林海音的《城南旧事》了!';
} elseif ($chars < 110000 && $chars >= 100000) {
echo '全站共 '.$chars.' 字,写完一本马克·吐温的《王子与乞丐》了!';
} elseif ($chars < 120000 && $chars >= 110000) {
echo '全站共 '.$chars.' 字,写完一本鲁迅的《彷徨》了!';
} elseif ($chars < 130000 && $chars >= 120000) {
echo '全站共 '.$chars.' 字,写完一本余华的《活着》了!';
} elseif ($chars < 140000 && $chars >= 130000) {
echo '全站共 '.$chars.' 字,写完一本曹禺的《雷雨》了!';
} elseif ($chars < 150000 && $chars >= 140000) {
echo '全站共 '.$chars.' 字,写完一本史铁生的《宿命的写作》了!';
} elseif ($chars < 160000 && $chars >= 150000) {
echo '全站共 '.$chars.' 字,写完一本伯内特的《秘密花园》了!';
} elseif ($chars < 170000 && $chars >= 160000) {
echo '全站共 '.$chars.' 字,写完一本曹禺的《日出》了!';
} elseif ($chars < 180000 && $chars >= 170000) {
echo '全站共 '.$chars.' 字,写完一本马克·吐温的《汤姆·索亚历险记》了!';
} elseif ($chars < 190000 && $chars >= 180000) {
echo '全站共 '.$chars.' 字,写完一本沈从文的《边城》了!';
} elseif ($chars < 200000 && $chars >= 190000) {
echo '全站共 '.$chars.' 字,写完一本亚米契斯的《爱的教育》了!';
} elseif ($chars < 210000 && $chars >= 200000) {
echo '全站共 '.$chars.' 字,写完一本巴金的《寒夜》了!';
} elseif ($chars < 220000 && $chars >= 210000) {
echo '全站共 '.$chars.' 字,写完一本东野圭吾的《解忧杂货店》了!';
} elseif ($chars < 230000 && $chars >= 220000) {
echo '全站共 '.$chars.' 字,写完一本莫泊桑的《一生》了!';
} elseif ($chars < 250000 && $chars >= 230000) {
echo '全站共 '.$chars.' 字,写完一本简·奥斯汀的《傲慢与偏见》了!';
} elseif ($chars < 280000 && $chars >= 250000) {
echo '全站共 '.$chars.' 字,写完一本钱钟书的《围城》了!';
} elseif ($chars < 300000 && $chars >= 280000) {
echo '全站共 '.$chars.' 字,写完一本张炜的《古船》了!';
} elseif ($chars < 310000 && $chars >= 300000) {
echo '全站共 '.$chars.' 字,写完一本茅盾的《子夜》了!';
} elseif ($chars < 320000 && $chars >= 310000) {
echo '全站共 '.$chars.' 字,写完一本阿来的《尘埃落定》了!';
} elseif ($chars < 340000 && $chars >= 320000) {
echo '全站共 '.$chars.' 字,写完一本艾米莉·勃朗特的《呼啸山庄》了!';
} elseif ($chars < 350000 && $chars >= 340000) {
echo '全站共 '.$chars.' 字,写完一本雨果的《巴黎圣母院》了!';
} elseif ($chars < 400000 && $chars >= 350000) {
echo '全站共 '.$chars.' 字,写完一本东野圭吾的《白夜行》了!';
} elseif ($chars < 1000000 && $chars >= 400000) {
echo '全站共 '.$chars.' 字,写完一本我国的名著了!';
} elseif ($chars >= 1000000) {
echo '全站共 '.$chars.' 字,已写一本列夫·托尔斯泰的《战争与和平》了!';
}
}
第二处是在文章的页面里,同样打开functions.php文件,在2611行附近找到定义zm_count_words函数。删除原来的内容,修改为以下代码。
// 字数统计
function zm_count_words($text = '') {
global $post;
$output = '';
// 如果没有传入文本,使用文章内容
if (empty($text)) {
$text = $post->post_content;
}
// 排除 PHP、HTML、JS 等常见代码块
$text_without_code = preg_replace([
'/<script.*?>.*?<\/script>/is', // 排除 JavaScript 代码块
'/<style.*?>.*?<\/style>/is', // 排除 CSS 样式块
'/<pre.*?>.*?<\/pre>/is', // 排除 <pre> 块
'/<code.*?>.*?<\/code>/is', // 排除 <code> 块
'/<\?php.*?\?>/is', // 排除 PHP 代码
'/<\?=.*?\?>/is', // 排除短 PHP 代码
'/<\!.*?\>/is' // 排除 HTML 注释
], '', $text); // 替换所有代码块为空字符串
// 清除 HTML 标签并进行字符解码
$text_clean = preg_replace('/\s+/', ' ', html_entity_decode(strip_tags($text_without_code)));
// 统计字数
$word_count = 0;
// 中文字符按字数计算
// 使用正则匹配中文字符
$chinese_chars = preg_match_all('/[\x{4e00}-\x{9fa5}]/u', $text_clean);
$word_count += $chinese_chars;
// 英文单词按单词计数
// 使用 str_word_count 来统计英文单词
$english_words = str_word_count($text_clean);
$word_count += $english_words;
// 其他字符(如标点符号)也计入总数
$punctuation_chars = preg_match_all('/[^\w\s]/u', $text_clean);
$word_count += $punctuation_chars;
// 输出结果
if ($word_count > 0) {
$output = '<span class="word-count">共 ' . $word_count . ' 个字符/单词</span>';
}
return $output;
}
四是这个主题的代码似乎有些冲突,文章里的文字只能显示为黑色,其他颜色显示不出来,询问AI,找到了一个临时解决的办法,在style.css文件的最后加入以下代码对字体的颜色进行强调。
.has-vivid-red-color {
color: red !important;
}
这是显示红色,如果想让其他颜色也显示,应该也是类似方法,具体可以问问AI。

经过这一番修改,目前主题基本上可以正常使用了,如果后续还有其他的修改,老郭还会继续在博客里进行说明。
《更换博客主题》留言数:0