分类
WordPress

替换WordPress的Gravatar服务

最近发现博客的 Gravatar 头像显示不出来了。找了一下,发现 V2EX 搭建了一个 Gravatar 的代理,具体点击这里查看,于是用它做了个小插件,用于替换 WordPress 的默认头像服务。

<?php
/*
Plugin Name: v2exavatar
Plugin URI: https://wujie.me/replace-wordpress-gravatar-service/
Description: v2ex的gravatar头像代理
Version: 2021.04.09
Author: 吴杰
Author URI: https://wujie.me
License: GPL
*/

// 用v2ex搭建的gravatar头像代理替换官方gravatar
function get_v2ex_avatar($avatar){ 
	$avatar = preg_replace('/.*\/avatar\/(.*)\?s=([\d]+)&.*/','<img src="https://cdn.v2ex.com/gravatar/$1?s=$2" class="avatar avatar-$2" height="50px" width="50px">',$avatar);
	return $avatar; 
} 
add_filter('get_avatar', 'get_v2ex_avatar');
分类
WordPress

给博客加个简单的代码高亮

一直想做这个事情,但又觉得可有可无,就一直拖到现在。这几天事情不多,今天下午突然想起来这事,不如把它实现了。

在 plugins 目录新建文件夹 WuJieHighlight ,然后在 WuJieHighlight 文件夹下新建文件 WuJieHighlight.php ,代码如下:

<?php 
/*
Plugin Name: WuJieHighlight
Plugin URI: https://wujie.me
Description: 自己的代码高亮插件
Version: 1.1
Author: wujie
Author URI: https://wujie.me
License: GPL
*/

function add_my_plugin_stylesheet() {
    wp_register_style('highlight', '//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.1/styles/atom-one-light.min.css');
    wp_enqueue_style('highlight');
}
add_action( 'wp_print_styles', 'add_my_plugin_stylesheet' );

function add_my_plugin_script() {
    wp_register_script('highlight','//cdnjs.cloudflare.com/ajax/libs/highlight.js/10.4.1/highlight.min.js');
    wp_enqueue_script('highlight');
}
add_action( 'wp_enqueue_scripts', 'add_my_plugin_script' );

function init_highlighting() { ?>
    <style>
        @import url('https://fonts.googleapis.com/css?family=Fira+Code&display=swap');
        .hljs{ background:transparent; }
        code {
            font-family: 'Fira Code', consolas,'Microsoft YaHei', monospace;
            background: #dcd7ca;
            border-radius: 0.2rem;     
            padding: 0.3rem 0.4rem 0.3rem 0.4rem;
            font-size: 0.8em;
        }
        
        .wp-block-code code, kbd, pre, samp {
            font-family: 'Fira Code', consolas,'Microsoft YaHei', monospace;
            font-size: 0.5em;
            padding: 0.4rem 0.6rem;
            white-space: pre-wrap;
        }     
    </style>
    <script>
        hljs.initHighlightingOnLoad();
    </script>
<?php
}
add_action('wp_head', 'init_highlighting');

保存后,到后台启用该插件即可看到效果。

分类
WordPress

升级到 WordPress 5.6

WordPress 5.6 发布了,这个版本对我最大的吸引力就是带了一个全新的 2021 主题,收到更新后,第一时间就安装了。

要注意这个主题会自动把文章分类的图像描述文字同步到菜单上,导致菜单显示有点乱,需要在菜单里面把菜单的图像描述文字清空,然后再保存菜单,显示就正常了。

清空菜单的图像描述文字

调整好菜单之后,体验了一下,布局上和 2020 主题差不多,首页文章不再自动显示全部,加了一个“继续阅读”。配色从之前的“屎黄色”变成现成的小清新,感觉还不错。

网站图标顺便也更新了一下,看起来和新主题更和谐了。

WordPress 发布新主题,预示着新的一年又要到来了,不得不感叹时间过的真快。

随着时间的推进,万事万物都在更新,我也要努力让自己有进步有变化才行,先定个小目标,万一实现了呢?

分类
WordPress

WordPress 上传文件出错

在 IIS8.5 中运行 WordPress 时,遇到上传图片出错的问题:此响应不是合法的 JSON 响应。

按 F12 打开开发者工具看了一下,原来是在上传完成图片后返回的 JSON 头部,多一段 HTML 代码:

<head><title>文档已移动</title></head>
<body><h1>对象已移动</h1>可在<a HREF="http://www.ilinshu.cn/wp-json/wp/v2/media/448">此处</a>找到该文档</body>

真正的 JSON 数据在这段 HTML 后面。

经过多方查找资料,得知这段代码是 IIS 插入的,但是目前没有明确的方法来禁止 IIS 的这一行为。微软曾经提供过一个hotfix,但是已经不再维护了,不适用于 IIS8.5 。微软推荐的解决办法是升级到最新的 Windows 版本,使用 Windows10 或最新的 Windows Server 版本。

话是这样说,但是升级的话,硬件要求最低要2G内存才行,增加了多余的经济负担(主要还是因为穷~)。其实我早就想完全换到 Linux ,但这是不可能的,因为还有一些服务需要 Windows Server 来运行。

其实目前来说,仅有的一个方案就是切换到 Apache,Apache 反向代理 IIS ,统一提供对外的 Web 服务。IIS 只运行 ASP.NET 应用,PHP 通过 Apache 来运行。

方案是可行的,唯一的缺点就是网站的部署稍微麻烦了一点,不过还算可以接受。

参考链接:

https://core.trac.wordpress.org/ticket/46311

https://stackoverflow.com/questions/10594225/prevent-iis-from-changing-response-when-location-header-is-present

https://stackoverflow.com/questions/12074730/w7-pro-iis-7-5-overwrites-php-location-header

https://forums.iis.net/t/1234223.aspx?Python+REST+API+Status+201+Create+IIS+Adds+HTML+To+JSON+Response

2021.11.19更新:目前整个服务器按上面的进行调整部署,现在 WordPress 上传文件的问题已经解决,一切正常平稳运行!

测试了阿里云的 Windows Server 2019,内存占用太高,2G 内存不怎么够用。

分类
WordPress

网站被入侵了

这台服务器上面挂了几个客户的网站,前段时间偶然间打开看了下,发现网站首页的头部有PHP的警告信息,于是登录服务器查看,发现每个WordPress网站的模板首页头部都被植入了一行PHP代码,把它删了就好了。经过检擦,发现每个网站下面都有大量的随机字符命名的文件。于是先把这些文件删了,但感觉这也不是办法,删了还是有可能被再次植入,而且也不能保证清除干净。后来,想到VPS有自动备份的功能,于是就把整个服务器还原到了8月31号。还原后所有文件和网站功能都正常,应该这个时候是没有被入侵的。

但是好景不长,过了没几天,进入服务器查看,发现博客网站的根目录下又有不明文件了,分析了下里面的代码和注释,感觉应该是国外的黑客干的,于是整个服务器上的所有网站都屏蔽了来自国外的访问,然后就是一直到现在,好像都没出什么问题。不过有个坏处就是影响google的索引了。

本次出问题的都是WordPress建的站点,自己用Laravel开发的程序没事。可见是WordPress树大招风,研究的人太多了,不过这程序用起来体验是真的不错,可能是用习惯了,很舒服。等下个版本更新后再放开国外访问吧,或许也会永远不放开,没关系,一个小博客而已,上面的其它的网站也很少有面向国外的。

分类
WordPress

去掉WordPress5.4仪表盘中站点健康状态面板

昨天升级到WordPress5.4,发现仪表盘中新增了“站点健康状态”面板,如果不想要,可以这样去掉,在functions.php里添加以下代码:

// 从仪表盘中去掉相关面板
function remove_dashboard_meta() {    
    remove_meta_box( 'dashboard_primary', 'dashboard', 'side' ); // 去掉wordpress活动及新闻
    remove_meta_box( 'dashboard_site_health', 'dashboard', 'side' );  // 去掉站点健康状态
}
add_action( 'admin_init', 'remove_dashboard_meta' );
分类
WordPress

WordPress的最佳固定链接

WordPress提供了六种固定链接结构,前五种是固定结构,最后一种是可以自定义的结构。既然提供了不同的选择,自然就有不同的适用场景,这两天我一直在思考这个问题。

第一种类型,朴素型,https://example.com/?p=123,这种类型以前是WordPress的默认类型。这种结构的固定链接,没有任何语义性,人类和搜索引擎都无法理解链接中包含的信息,所以不建议使用。

第二种类型,日期和名称型,链接结构如下https://example.com/2019/12/28/sample-post/,这种类型强调日期。一天发布多篇文章的网站可以使用这种,比如新闻性质的网站或企业博客等,可以通过日期来判断文章的时效性。WordPress目前默认的固定链接就是这种类型。使用这种链接类型的企业博客网站之一微软官方博客(用的是WordPress),因为一天可能发布多篇文章,所以使用了这种类型。

第三种类型, 月份和名称型 ,https://example.com/2019/12/sample-post/,这种类型的固定链接和第二种差不多,强调月份,用于发布不是特别频繁并且需要明确大体日期的站点,例如个人博客、技术网站等。WordPress创始人Matt Mullenweg的博客就是使用的这种类型。

第四种是数字型,即https://example.com/archives/123,这种类型如同第一种,不过把URL参数变成了目录结构的形式。由于链接没有任何语义,不推荐这种。

第五种是文章名型,即https://example.com/sample-post/,链接只有postname一种元素,这种类型不强调时间,不强调时效性,只注重文章的关键信息。而且修改文章的发布时间、目录等属性不影响固定链接的构成,同时由于只有一个层级,对搜索引擎的权重相对高,方便提取关键信息,对于人类也很容易读懂。注重SEO和营销类型的网站可以使用这种

第六种,自定义类型,通过使用不同的标记来自定义链接的结构。

总体来说,对于个人博客,比较适合的类型是第五种和第三种。个人博客,适合使用年月进行归档,就像按年份和月份建立文件夹一样,把某年某月的文章整理到一起。在做外链或者做记录的时候,看到链接就能知道文章的发布年月和标题,做到心中有数,虽然有时候并不希望这样。 第五种也不错,简单纯粹,除了post-name,再无其它干扰,并且URL更短,层级最小,更利于搜索引擎抓取,修改文章的一些属性不会影响固定链接。

最后一点,固定链接一旦确定下来,就不要换来换去。一但更改,对于站内链接和站外链接的修复都很麻烦,如果注重SEO的话,对于SEO也是灾难。当然这些问题都有应对的办法,不过为了不折腾,选择了就坚持下去,只管写文章,再不用考虑这个问题。

分类
WordPress

修改twentytwenty主题的中文显示效果

今天没什么事,把博客主题的文字显示效果做了修改。之前默认的字体和行距是为英文优化的,显示英文很完美,但是显示中文就不怎么好看,字体粗行距小,看起来糊成了一片。

修改样式有三种方式,一种是直接修改主题的样式文件style.css,但这种方式有缺点,在主题更新后,自己所做的修改就被覆盖了,每次更新都要改一次,麻烦了点。好处是在后台编辑器里面也能实现和前台看到的相同的文字效果。

第二种方式是使用“自定义—额外CSS”功能,把自定义样式写进额外CSS里就能实现想要的效果了,而且更新主题无影响。缺点是后台编辑器还是默认字体,无法实现和前台一致的效果。不过这也无所谓,后台只有自己在看,前台阅读体验好就行了。

还有另外一种方式是使用子主题功能,既能做到更新无影响又能实现前后台文字显示效果一致,但我感觉,这个还是有点过于麻烦了,不想折腾,就没有尝试。

分类
WordPress

解决wordpress IOS APP上传图片失败

刚才在使用ios端的APP写文章上传图片时,遇到报错,错误信息 WordPressKit.WordPressOrgXMLRPCApiError error 0. ,在google查询后得知是nginx上传文件大小设置的问题。在nginx配置文件中把网站上传大小设置大一点就可以了。这里我设置的是200M,配置代码如下:

#文件上传大小限制  必须要放在server下的server_name下
client_max_body_size 200m;

修改之后,重新加载ningx配置再上传就没问题了。

https://en.forums.wordpress.com/topic/the-operation-couldnt-be-completed-wordpresskit-wordpressorgxmlrpcapierror/

解决方案原链接