How to debug your WordPress plugin

If you are developing a plugin on WordPress, you will need to debug your code as you go.

To enable debugging, go to your wp-config.php file.

Find the line…

define('WP_DEBUG', false);

Replace the line above with the following…

// Turns WordPress debugging on
define('WP_DEBUG', true);

// Tells WordPress to log everything to the /wp-content/debug.log file
define('WP_DEBUG_LOG', true);

// Doesn't force the PHP 'display_errors' variable to be on
define('WP_DEBUG_DISPLAY', false);

// Hides errors from being displayed on-screen
@ini_set('display_errors', 0);

Now you all warnings and errors will show up in the /wp-content/debug.log file, including WordPress warnings of deprecated functions.

You can write directly to this log from your plugin using the error_log() function.

Typically…

//output some debug string
error_log( 'this works yo' );

//output some array/object
error_log( print_r( $some_obj_or_array, 1 ) );

Kudos to this post. It has some good plugin development tips, including how to enable debugging on WordPress.

WP Plugins: How to remove a Filter

Do not use remove_filter(). It is possible it will break other hooks which can have unintended consequences. This post gives a really good alternative approach using static variables.

hakre on wordpress

Worth to know for wordpress plugin authors: Making your plugin to safely unregister or remove a hook (filter or action) is not possible with the wordpress plugin API. Why? you might ask yourself. Even the name of the remove_filter() function suggests it and the codex documentation does say so as well.

But: It does not work, because this function does not work as intended. And beyond your own hooks, it has the potential to hinder the blog from working properly as it has the potential to remove other hooks then the specified one.

Does not is not exactly right, it does, but only sometimes. That’s specifically a bummer if you write plugins yourself, because you can not safely rely on it. For example, if running your plugin makes use of PHP 5.2 or greater it works. But it does not if it’s running on PHP 4 or PHP 5 lower…

View original post 1,582 more words