2022-02
10

让自定义小工具复活

By xrspook @ 7:00:15 归类于: 烂日记

花了一整天都没搞懂的事情,突然晚上用了大概半个小时就开窍了。当然,其实功劳不在那30分钟,而是在前面的一直摸索积累。郁闷得要死要活,当然要总结一下经验,免得老是掉坑里。

上回说到自定义小工具时灵时不灵。通常,当我把网上的自定义小工具脚本(12)贴到functions.php,然后在小工具那里把相应的东西拖放到合适的位置,刷新前端就能看到。当我在functions.php修改代码,修改到一定程度的时候仍然可以看到,但改着改着,前端就没了。当我把改到最后还能显示的版本再贴回去,依然没反应。这到底是什么问题呢?后来我意识到不会是某些默认参数缺失导致。我不知道为什么在小工具的后台预览就没有这种缺失问题,但前端显示就有。非常有可能刚好碰上5.9前端和后台默认参数不完全一致。当我把所有之前空着,理论上应该自动带入默认参数的函数都补充为默认写法之后,奇迹发生了!所以折腾了一大轮非常有可能是5.9删掉了某些前端的默认参数,因为他们从这个版本开始可以使用区块进行全站模板编辑,既然所有东西都源于区块,所有东西都不是从自定义代码开始,在区块那里写入默认参数自然就不会有小工具默认参数缺失的问题。但是,他们万万没想到我这个从WordPress大概2.*版本就开始用的老土鬼依然在用很久很久很久很久很久以前的自定义小工具写法,而当时,当自定义小工具参数缺失时估计有默认参数补全……

要创建一个自定义小工具,可以在模板functions.php文件里通过代码方式实现。下面讲的只是创建小工具本身,有些模板没有自带容纳小工具的箱子,导致创建好的小工具后无法让其在前端显示,这里就不继续探讨了。

写一个自定义小工具主要有3步,其中第1步里有4个步骤需要完成:
1 创建小工具
1.1 设定小工具基本参数
1.2 设定小工具前端输出
1.3 设定小工具后台更新参数
1.4 设定小工具后台输出
2 注册小工具
3 激活小工具

转化为代码大概是这个样子:

class widget-ID extends WP_Widget //创建widget,widget-ID必须唯一,必须小写
{
	public function __construct() //widget基本参数设定
	{
		parent::__construct(
			'widget-ID',
			__('widget name'), //后台widget标题
			array('description' => __('widget description'),) //后台widget描述
		);
	}
	public function widget($args, $instance) //widget前端输出
	{
		echo $args['before_widget'];
		********** //要输出的全部放这里
		echo $args['after_widget'];
	}
	public function update( $new_instance, $old_instance ) //widget后台更新设定
	{ 
		return $new_instance; //public function form里更新了这里就更新,因为form没有内容,照抄默认写法
	}
	public function form( $instance ) //widget后台输出
	{
		echo '<p class="no-options-widget">' . __( 'There are no options for this widget.' ) . '</p>';
		return 'noform'; //因为是自定义小工具,参数都已就位,照抄默认写法
	}
}
function mi_register_widget() //注册自定义widget,mi_register_widget函数名随意
{
	register_widget('widget-ID1'); //多个自定义widget在这里全部列出
	register_widget('widget-ID2');
	register_widget('widget-ID3');
}
add_action('widgets_init', 'mi_register_widget'); //激活已注册的全部widget

之前我遇到的时灵时不灵根本原因在于public function update( $new_instance, $old_instance ){}和public function form( $instance ){}虽然我的确不需要表达什么,所以{}直接留空,于是就撞板了…… 所以这两个组后台参数设定可能对自定义的各位来说的确没啥用,但默认写法还是得继续保留,不能留空。

如果有人像我那样在WordPress 5.9之前自定义小工具好好的,但5.9后就前端不显示了,按照上面步骤对照修改后,还需要在后台小工具页面把之前失效的小工具从箱子里删除,然后重新拖放小工具归位。相信我,这个步骤非常重要!!!虽然看上去还是那个模样,但实际上拖放一圈的确就能解决修改代码后,前端无论如何仍然刷新不出来的问题。

撞板是痛苦的,但摸爬滚打后重新站起来的感觉非常好!

2022-02
9

后台预览和前端不一致

By xrspook @ 9:03:30 归类于: 烂日记

自从更新了WordPress 5.9以后,我的blog的自定义小工具在前端一律不显示,可以显示的只剩下系统自带的小工具,这到底是为什么呢?当我在后台用小工具实时预览界面的时候,我的小工具一个都没少,全部都有,为什么预览界面没有问题,实际上前端又有问题呢?5.9是我在春节放假之前更新上的,好长一段时间更新都没有任何问题,所以我根本没想过更新一个大版本会导致这样的事故。WordPress这个东西默认没办法回滚,要回到之前只有手动在服务器操作,而且还不一定兼容。到底是哪里出了状况?

可以肯定的是,5.9和之前的版本最大的区别可能在于全站都可以用可视化的方式用区块编辑,设计模板也不需要写代码了。但显然,对我这种人来说,我不太相信区块可视化编辑,我还是相信我的代码,但自从更新上这个版本以后,我的代码估计跟他们默认理解的有差异,所以就导致了这个问题。我觉得会不会是代码的某些钩子发生了变化,有些失效了,所以就导致我的自定义小工具失效呢?一开始我是这么认为的,但是当我研究过最新的那些模板后,却发现他们的模板里基本不自带小工具。我之所以要自定义小工具,是因为一般的模板、官方的模板通常不具备我需要的功能,所以我只能自己写代码实现。我从前的代码到底跟现在有效的那些语法在什么地方有冲突呢?我必须得找出来。让我觉得很困惑的是,如果是我代码语法有问题,理论上应该无论后台预览还是网站前端出来的效果是一样,也就是我的小工具应该都不起效才对,但实际上两个界面不一样。

当我好不容易找到了一些自定义小工具的脚本,当我把那往我的模板里贴了以后,的确一开始的时候是可以的,但改着改着就不行了。一开始我用的是正向修改,就是对比我自己的脚本跟可以显示的那些脚本,后来发现我觉得自己已经把需要改的地方都改完了,但还是没反应。于是我就开始反过来改,把我自己的东西贴到可以显示的脚本里面,结果发现依然没有问题的。起码可以这么说,核心部分的代码一点问题没有,但到底是什么地方出了问题呢?最后我修改到只剩下函数名称。一旦我把函数名称,东西就失效了。当我把没有失效还能显示的脚本贴回去以后,东西依然是失效的。所以到底怎么整才有效,怎么整会失效,到底是哪里的问题导致我的东西不能在前端显示呢?我花了一整天的时间都没找到原因,因为当我把可以显示和无法显示的脚本放在一起对比,除了自定义函数的名称以及缩进以外没有区别,而那个可以显示的脚本贴进WordPress里有时可以,有时不行。行就行,不行就不行,我写了那么多年的blog模板,无论是WordPress还是其它,从来没遇到过这种有时可以有时不行的情况。之所以这样,我猜他们是在某个地方用了缓存。那个缓存不是我浏览器的问题,因为这边我换浏览器问题依然存在,所以他们为了提高WordPress的运行速度,到底在这个5.9版本里做了什么呢?春节期间我一直没有主动修改,因为我希望过一段时间他们就会出一个新的版本解决前端和预览不一致的问题。如果我的小工具在预览界面也无法显示,我会心安理得。我不会像现在这样知道有问题,但完全不知道问题出在哪里。

可能当新版本出来以后会发现其实根本不是我的问题。

2017-09
6

计划修改模板

By xrspook @ 10:11:54 归类于: 烂日记

多少年以后我终于想修改一下我的天的界面。已经不记得对上一次微调界面是什么时候的事了,我只记得自己在通过CSS 3和XHTML 1.1验证以后几乎再也没动过。WordPress的后台升级无数次,但我的Color3模板一直没动。现在CSS流行的是什么我不知道,反正网页框架已经去到HTML5了,而我依然停滞不前。不过呢,这也说明我的当年制作的模板经得起时间的考验,永不过时的节奏XD

现在我之所以要修改是因为我发现了一些格式上的不完美。这并不是因为当年我设计模板的时候有什么缺漏,而是因为这么多年来各种东西都有了发展。从前我设计模板的时候用的是Windows XP,现在除了我的一部小手提以外,用的都是Win7了。Win7和XP的默认字体不一样,从我第一天开用的时候就已经感觉出来了。Win7默认的字体是微软雅黑,而XP是宋体。至于浏览器,当年我设置用的是Firefox大概3.0,现在都55.0了,所以浏览器的默认字体也不同,虽然我每次都会手动调回宋体。肉眼能看到的是字体不一样了,对格式的具体理解每个浏览器都不一样,每一代浏览器都会有区别。IE的区别尤其明显,Firefox在浏览器领域变化算不大了,但从我的网站的情况看来还是有区别。在开始调整之前我需要在XP的电脑上确认修改后的版式如何。对一个前端设计师来说,浏览器兼容性从来都是非常让人头痛的事。现在,其实用电脑访问网页的人可能比用移动客户端的少。所以搜索到我的网站的人可能看到的并不是我自己在PC上看到的那样,而我自己又几乎不会用移动终端去访问我自己的网站,够滑稽的。出现样式有些许变动的地方主要是网站的版头的导航以及单篇文章提交评论的按钮。版头的导航定位有点偏下了,提交评论的按钮太小了。没记错的话,我的版头导航用的应该是绝对定位,绝对定位为什么会出现这种事大概真的是因为浏览器对代码的理解方式发生了改变。几年前我就发现了这个问题。至于评论的按钮,因为我启用了验证码模式,有可能因为这样替换掉了原来的“提交”二字,变成了“Submit Comment”,字符数相差那么多,当然位置不够了,但如果当年我用的代码不是绝对宽度限定按钮大小也不会出现这种问题。那个需要输入验证码才能提交评论的插件记忆之中我也没在网站模板完成后更新过。难道这个问题一直存在而我却一直没留意???

昨天我有了个给网站增加一个全部日志按日导航的功能,把所有日志按照发布时间的先后列出发布时间和日志标题,罗列一个页面里。因为我现在已经有5200多篇日志,所以估计会很壮观。但问题是,我有必要这么变态地输出这样一个页面吗?用来干嘛呢?吓唬人吗?之所以想这样估计真的跟我的虚荣心有一定关系。要实现这个,我需要找到一条把那些内容输出的规则,我应该可以做到,但我为什么要这么做呢?如果输出了那个,就等于我建立了一个全体目录索引。

不知道为什么,近期我又开始沉迷上代码这种事了。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress