How I fixed a WordPress site

wordpress-logo-stacked-rgb
My kids’ school has a website created in WordPress. It is maintained by a teacher and one volunteer. The position of volunteer became vacant and I offered to help.

The NextGEN Gallery plugin had suddenly stopped working. Since nobody knew what changed and nobody had WordPress deeper knowledge the issue remained. The teacher emailed the developers, but was unable/scared to perform the steps offered as a solution. This is where I enter the game. Ignoring the email steps (maybe it is your jquery version) I asked some colleagues and dr. google.

TLDR

Turning on logging and installing some plugins helped me pinpoint a wrong value in the settings. Changing the setting fixed the issue.

PHP logging

To enable logging I edited the wp-config.php file in the root of the website. Every developer wants this setup to pinpoint issues. The code below puts the statements in the logs folder under wp-content in a file called php-errors.log.

@ini_set('log_errors', 1);
@ini_set('display_errors', 0);
@ini_set('error_log', dirname(__FILE__) . '/wp-content/logs/php-errors.log');
@ini_set('error_reporting', E_ALL ^ E_NOTICE );

No need to restart anything. The changes are picked up by WordPress on the next request.

Memory usage

I installed WP-Memory-Usage plugin to see why fatal errors were being logged. I was able to see when Fatal error: Allowed memory size of 67108864 bytes exhausted was about to happen.

wp-memory-usage

Unfortunately I was unable to change any memory limit because it was locked down by the hosting provider.

Memory viewer

With the Memory-viewer plugin I got an insight in the memory usage while loading the site. WordPress is loaded on every request and offers hooks for plugins to do their thing.

I noticed a spike in memory in the init hook and a 40Mb using in the first hook called plugins_loaded. Disabling all plugins showed a memory usage of 25Mb in the first hook and the same spike in the init hook. My colleague Robert suggested that it isn’t uncommon to claim 15Mb for an image editing plugin.

Next to the memory usage in the hooks the MySQL statements are printed. This turned out to be golden information.

Database browser

Using the Database-browser plugin I could replay all MySQL statements printed by the memory viewer plugin. One statement showed an empty page (PHP exception) and needed further inspection.

SELECT DISTINCT wp_2_ngg_pictures.* , 
  GROUP_CONCAT(CONCAT_WS('@@', meta_key, meta_value)) AS 'extras' 
FROM `wp_2_ngg_pictures` 
LEFT OUTER JOIN `wp_2_postmeta` 
  ON `wp_2_postmeta`.`post_id` = `extras_post_id` 
GROUP BY wp_2_ngg_pictures.pid 
LIMIT 1000

The last line suggests a limit of 1000 items which is quite steep. Other statements limit to 100 or less. Changing the number resulted in output.

Solution

Looking into the code of the failing plugin I noticed a setting being used for the query limit. This setting could be set on the plugin’s options tab. Changing the value from 1000 to 100 did the trick. I will not ask who put the 1000 in there 🙄

Final thoughts

Does support on wordpress.org plugins mean that everybody gets emailed a solution? Why not post the solution in the support forum? I did post my solution to their support forum.

PHP is a nice language, understandable even for me, but hard to debug. The white screen of death is sometimes the only result.

Even with it’s quirks WordPress is a nice platform for websites/blogs. I’m using it myself.

[update] The hosting provider has upgraded the PHP memory to 128 Mb. Everything works great now!
php_memory_128mb

About erictummers

My work as a recruited developer changes almost every month. I like challenges and sharing the solutions with others. On my blog I’ll mostly post about my work, but expect an occasional home project, productivity tip and tooling review.
This entry was posted in Tooling and tagged , , , . Bookmark the permalink.

One Response to How I fixed a WordPress site

  1. Remco Brosky says:

    Great to read that you are working close together and sharing knowledge, even if it’s not ‘work related’. I’m proud to work with you guys!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s