Hi folks, just a quick maintenance notice to say that we are upgrading the blog to a more recent version of PHP (which is the code that underlies WordPress) (going from version 7.4 to 8.3). Unfortunately, this has caused problems for two of the older plugins we use, Kcite (which provides the inline links to the references from the DOI code), and Language Switcher (which we used a lot at the beginning to provide translations). Neither are actively maintained by their original coders (and we have updated some of the functionality in any case).
As of today, we’ve had to turn them off – and so the reference lists are not being generated and the languages on older posts will mixed up. If any of our readers have some relevant skill sets, we’d be happy to work with them to debug this issue! Let us know in the comments. Additionally, feel free to make suggestions for other improvements – the more specific the better!
Hopefully, we will resolve the issues soon. Thanks for your continued support and patience.
Update (Nov 28): I got the Kcite plugin working again (follow the link for details and remaining issues).
If you have a command line available on a Linux server, using codex with gpt-5.1-codex-max or Claude Code with Opus 4.5 could help, you just need to give them wide access to execute commands.
Opus here comments on your situation:
A few practical suggestions for dealing with these PHP 8.3 compatibility breaks:
For Kcite (DOI citations):
The fixes for PHP 8.3 compatibility are often fairly minor—things like deprecated function replacements, stricter null handling, or removed functions. If someone on your team is comfortable with PHP, it might be worth looking at the error logs to see what’s actually breaking. Common culprits are things like each() being removed, changes to how implode() arguments are ordered, or stricter type checking.
Alternatively, look for a maintained alternative. Plugins like CM Footnotes or Jepack’s Markdown with footnote support might cover similar ground, though you’d need to evaluate whether they handle DOI linking the way you need.
Check if anyone has forked Kcite on GitHub with PHP 8 fixes.
For Language Switcher:
If you’re not actively using it anymore, this might be a good opportunity to just remove it cleanly rather than fix it.
If you still need multilingual functionality, Polylang (free) or WPML (paid) are actively maintained and widely used.
General advice:
Before going live, test on a staging copy if you haven’t already.
Tools like PHP Compatibility Checker (a WP plugin) can scan your plugins and flag specific lines causing issues.
If the plugins are essential and the fixes are beyond your team’s capacity, a freelance WP/PHP developer could probably patch them for a few hours’ work—PHP 8 compatibility fixes tend to be straightforward once you know what to look for.A few practical suggestions for dealing with these PHP 8.3 compatibility breaks:
For Kcite (DOI citations):
The fixes for PHP 8.3 compatibility are often fairly minor—things like deprecated function replacements, stricter null handling, or removed functions. If someone on your team is comfortable with PHP, it might be worth looking at the error logs to see what’s actually breaking. Common culprits are things like each() being removed, changes to how implode() arguments are ordered, or stricter type checking.
Alternatively, look for a maintained alternative. Plugins like CM Footnotes or Jepack’s Markdown with footnote support might cover similar ground, though you’d need to evaluate whether they handle DOI linking the way you need.
Check if anyone has forked Kcite on GitHub with PHP 8 fixes.
For Language Switcher:
If you’re not actively using it anymore, this might be a good opportunity to just remove it cleanly rather than fix it.
If you still need multilingual functionality, Polylang (free) or WPML (paid) are actively maintained and widely used.
General advice:
Before going live, test on a staging copy if you haven’t already.
Tools like PHP Compatibility Checker (a WP plugin) can scan your plugins and flag specific lines causing issues.
If the plugins are essential and the fixes are beyond your team’s capacity, a freelance WP/PHP developer could probably patch them for a few hours’ work—PHP 8 compatibility fixes tend to be straightforward once you know what to look for.
[Response: Thanks. I used PHPcompatibility to fix a couple of things and they now pass that check, but still cause crashes. I’m loath to start using new plugins because there are thousands of posts that would need to be updated. I’m happy to hire someone to rather fix this. – gavin]
I asked AI. Here’s what it says (with some stitching together).
Kcite is an old plugin that wasn’t designed for PHP 8.3, so it crashes there, this it usually needs small updates to fix fatal errors (like null checks or outdated functions). If you can see the PHP error log, that will show exactly what to fix. Otherwise, the safest options are either patching it carefully or keeping it on an older PHP version.
The key is targeted fixes, not a full rewrite.
Instead of Kcite it recommends citekit, citation note and WebKew WP References and Citations
Keep Kcite for old posts on PHP 7.4 (still supported by WordPress (receives security updates) to avoid breaking them. Use a modern plugin like CiteKit, Citation Note, or WebKew for all new posts on PHP 8.3. Old posts can be migrated gradually if needed.
Gradually update old posts by using a script or batch process to replace Kcite shortcodes or DOIs with the format required by a modern citation plugin like CiteKit.
In the meantime, you might consider … Switching to a modern translation plugin like Polylang, WPML or TranslatePress.
Regarding the thousands of posts AI says (or you can just ask WordPress support for help help@wordpress.com. I no nothing about tech),
-1, // all posts
‘post_type’ => ‘post’, // adjust if needed
‘post_status’ => ‘publish’
);
$all_posts = get_posts($args);
foreach ($all_posts as $post) {
$content = $post->post_content;
// Replace Kcite shortcode with CiteKit shortcode
$new_content = preg_replace(‘/\[kcite\s+doi=”([^”]+)”\]/i’, ‘[cite doi="$1"]‘, $content);
// Only proceed if changes are detected
if ($new_content !== $content) {
if ($update_posts) {
// Actually update the post
wp_update_post(array(
‘ID’ => $post->ID,
‘post_content’ => $new_content
));
echo “UPDATED Post ID: ” . $post->ID . “\n”;
} else {
// Preview mode: just log changes
echo “PREVIEW Post ID: ” . $post->ID . “\n”;
echo “Old snippet: ” . substr($content, 0, 100) . “…\n”;
echo “New snippet: ” . substr($new_content, 0, 100) . “…\n”;
echo “————————————–\n”;
}
}
}
if ($update_posts) {
echo “Migration complete! Posts have been updated.\n”;
} else {
echo “Preview complete! No changes were made to the database.\n”;
}
?>
How to use
1. Set $update_posts = false; to preview changes.
2. Run the script and review the output — it shows old and new content snippets.
3. Once you’re confident everything looks correct, set $update_posts = true; to apply changes to all posts.
4. Make sure you backup your database before running with updates enabled.
Here’s a thought, start off with a fresh site and just keep the old one running as is for now, archive it and link to it (really, I don’t know any of this but trying to help).
There’s AI suggests are:
1. Astra
2. GeneratePress
3. Neve
4. Blocksy
5. Hello Elementor
6. Twenty Twenty-Three
That’s all I can think of. If I’m way off base I’ll excuse myself now :)
Themes AI suggests, not theres AI suggests