前言
在自己访问自己的 Blog 时,发现了一些问题:比如 API 被阻断、头像获取慢等。想写一篇文章,将问题和解决方案记下来。
*待后续更新*
反向代理 Gravatar
偶然间清理了缓存,发现访问自己的博客加载了很久。检查后才发现,访问 cn.gravatar.com 获取头像就花费了24 秒。于是想用 Nginx 反向代理 gravatar,来提高速度。
配置文件如下:
server { listen 443; server_name gravatar.konekomoe.com; location / { proxy_pass https://gravatar.com/; } # 证书相关设置,此处省略 }
nginx -s reload
后访问 gravatar.konekomoe.com/avatar 即可获取头像。
之后发现 Kratos 的主题设置可以直接更换 Gravatar 地址,更换后解决问题。
API 被阻断
主题原作者的 api.fczbl.vip 疑似被阻断了一段时间,无法访问。出于稳定性考虑,打算现学现卖,边 Google 边用 PHP 将部分 API 重写。
注意红字,只看了 PHP 的一部分基础就开始写了,所以看看就行(逃
hitokoto
<?php
header("Access-Control-Allow-Origin: *");
$file = file(__DIR__ . "/hitokoto.txt");
$lineNum = mt_rand(0, count($file) - 1);
$koto = trim($file[$lineNum]);
if ($_GET['encode'] == 'js') {
$koto = "function hitokoto(){document.write('" . $koto . "');}";
} else if ($_GET['encode'] == 'json') {
$koto = json_encode(array("hitokoto" => $koto));
}
echo $koto;
?>
(现在达到了勉强能用的水平(逃))
*待补充*
状态
主题自带一个“状态”,我也比较想发一些自己干的事情或者心情等。不过,状态是和首页的文章混合在一起的,看起来并不是十分好看。一番寻找,找到了 add_filter() 这个函数。按照案例一顿操作,在主题的 functions.php 中添加一段代码,首页和文章归档都不会显示状态了。之后在菜单里添加了“分类目录”,放在“状态”中。代码如下:
// exclude status from home page.
function exclude_status($query) {
if ($query->is_home()) {
// array is the category's id to exclude.
$query->set('category__not_in', array(20));
}
}
add_filter('pre_get_posts', 'exclude_status');
此外,感觉原作者写的状态不是很符合我的审美,于是把 CSS 瞎改了一通。
之后又发现一个新的问题:sitemap.xml 和 sitemap.html 里面都有关于状态的文章。但是,不想让这些状态出现在 sitemap 里,毕竟不是真正的文章。一番寻找,发现主题作者是把 mk-sitemap
整合在了 inc/core.php
里面。修改几处 PHP 的代码,从 sitemap 中删除了状态。不过,每个状态的标题必须以“状态-”开头,链接必须以"/status_xx/"结尾。
foreach($posts as $post):
$yusoId = get_permalink($post->ID);
if (strpos($yusoId, "status_") !== false):
continue;
endif; ?>
<url>
<loc><?php echo $yusoId; ?></loc>
// other code
<?php foreach ($posts as $post):
$title = $post->post_title;
$title = htmlspecialchars_decode($title, ENT_QUOTES);
if (strpos($title, "状态-") !== false):
continue;
endif; ?>
// other code
现在还有个问题:搜索引擎可能会收录这些状态,但是我觉得没有必要。这时候就用到 robots.txt 了。在里面加入一行:
Disallow: /status_*/
即可解决问题。
参考文章
https://developer.wordpress.org/reference/functions/add_filter/
https://developer.wordpress.org/reference/functions/is_main_query/
https://developer.wordpress.org/reference/hooks/pre_get_posts/
https://www.runoob.com/php/php-string.html
https://baijunyao.com/article/56