WP-postviewsの不具合の解決法

投稿日: 2013年7月20日 | カテゴリ:『ワードプレス』>プラグイン

2012年5月23日にプラグインwp-postviewsの自動アップグレード(1.40→1.61)を行ったところ、アクセス記事のカウントが更新されなくなる、という不具合が発生しました。旧バージョン(1.40)に戻したところ問題なく動作していましたので、新バージョンの不具合の原因についてはあまり真剣に追求しませんでした。それでも、バージョンを辿っていくうちに、バージョン1.60が正常に動作することに気がつきました。そこで1.60とそれ以降のバージョンの違いを確認することで不具合の解決法を見つけ出すことにしました。

症状

(1) Ver1.40からVer1.61に自動Upgradeした時にアクセス回数が更新されなくなりました。ログファイルには次のようなエラーが表示されるようになりました。
(2) Logwatchに掲載されたエラーログ

500 Internal Server Error
/weblog/wp-content/plugins/wp-postviews/wp … _=1372288705807: 2 Time(s)
/weblog/wp-content/plugins/wp-postviews/wp … _=1372288722469: 2 Time(s)
/weblog/wp-content/plugins/wp-postviews/wp … _=1372288742136: 2 Time(s)
/weblog/wp-content/plugins/wp-postviews/wp … _=1372290897278: 2 Time(s)
………
………

(3) /var/log/httpd/error.logに掲載されたエラーログ

PHP Fatal error: Call to undefined function add_action() in /var/www/wordpress/wp-content/plugins/wp-postviews/wp-postviews.php on line 32, referer: http://hsuzuki.ddo.jp/weblog/2272
診断

wp-postviews.phpの32行目は以下のような部分です。

### Create Text Domain For Translations
add_action('init', 'postviews_textdomain'); #32行目
function postviews_textdomain() {
	load_plugin_textdomain('wp-postviews', false, 'wp-postviews');
}

エラーログでは、32行目の関数add_action()が未定義だということです。
正常に動作していた1.60までの当該部分と1.61以降のそれを比べてみると、バージョン 1.61以降では、1.60まであった以下の定義部分が抜け落ちていました。

### Load WP-Config File If This File Is Called Directly
if (!function_exists('add_action')) {
	$wp_root = '../../..';
	if (file_exists($wp_root.'/wp-load.php')) {
		require_once($wp_root.'/wp-load.php');
	} else {
		require_once($wp_root.'/wp-config.php');
	}
}
解決法

1.61以降のバージョンにこの部分のスクリプトを挿入してやると、PHP Fatal Errorはなくなり、正常にカウントされるようになりました。
現時点での最新バージョン1.65についても上記の処置をすれば問題なくアクセス回数はカウントされます。なぜ上記の部分が削除されたのか解りませんが、今後は上記の部分を挿入することで対処することにします。

[追記](2014年10月7日)
バージョン1.67では以上の問題が解決されています。つまり、プログラムを変更することなく、正常に動作します。


関連記事



コメントを残す