修复 WordPress 插件 Collapsing Archives 在 PHP8 下不能使用的问题

使用 Collapsing Archives 这个 WordPress 插件很多年了,就是本文右边能看到的历年存档,可以很漂亮折叠起来,而不是官方默认插件只能按年聚合,不能展开看有哪些文章

但是在 WordPress 升级到某个版本,及容器升级到 PHP8 后,只要开启这个插件,必然整个 WP 站都挂的,开 WordPress Debugging 看报错信息也没有头绪,没有可以联系作者的渠道,在 WordPress 论坛反馈也没反应

其中一个普遍的报错是

[error] 1088#1088: *266661 FastCGI sent in stderr: “PHP message: PHP Fatal error: Uncaught TypeError: call_user_func_array(): Argument #1 ($callback) must be a valid callback, class collapsArch does not have a method “enqueue_scripts” in /home/foo/www/blog/wp-includes/class-wp-hook.php:307

这个问题参考 https://wordpress.org/support/topic/an-error-occurred-11/#post-15472977 获得了解决,具体办法是到 ~/wp-content/plugins/collapsing-archives/ 目录下修改 collapsArch.php 的 42 行,从

if (!is_admin()) {
    wp_enqueue_script('jquery');
    add_action( 'wp_enqueue_scripts', array( 'collapsArch', 'enqueue_scripts' ) );
} else {

改为

if (!is_admin()) {
    wp_enqueue_script('jquery');
    add_action( 'wp_head', array( 'collapsArch', 'get_head' ) );
} else {

但是问题依然没有解决,还有一处拼写错误需要修改,参考 https://wordpress.org/support/topic/great-until-php-8/#post-16349890 的办法,在 ~/wp-content/plugins/collapsing-archives/ 目录下修改 defaults.php 的 27 行,从

  'post_type' => 'post',
  'taxoncmy' => 'category',
  'postTitleLength' => '');

改为

  'post_type' => 'post',
  'taxonomy' => 'category',
  'postTitleLength' => '');

至此,重新启用插件恢复正常