情報科学屋さんを目指す人のメモ

方法・手順・解説を書き残すブログ。私と同じことを繰り返さずに済むように。

WordPress:関連記事プラグインYet Another Related Posts Pluginの警告メッセージについて

PHP (25) WordPress (80) WordPressプラグイン (26) YARPP (1)

WordPressの関連記事表示用プラグインYARPP(Yet Another Related Posts Plugin)の設定画面を開いてみたところ、最上部に、MySQLのストレージエンジンに関するエラーが表示されていました。そのエラー内容について対応してみたので、そのことについてメモしておきます。

警告メッセージの内容

表示された警告メッセージは次の通りです。

YARPPの関連スコア計算の「タイトルを検討する」、「内容を検討する」オプションはデータベースの wp_posts テーブルが MyISAM を使用する必要があります。 wp_posts テーブルは現在 1 ストーレージエンジンを使用しているので、このふたつのオプションは使えません。 このオプションを使用したければ、wp_postsテーブルに対してこのようなクエリを実行してください:ALTER TABLE `wp_posts` ENGINE = MyISAM;。このクエリはデータは一切消しません。 wp79daf1postsテーブルが絶対MyISAMを使用していると思う方はこちらの魔法のボタンをどうぞ: [MyISAMを使っています。嘘じゃないから。]

MySQL上にあるpostsテーブルのストレージエンジンがMyISAMじゃないから、機能が制限されています、という警告のようですが、現在使用しているストレージエンジンの表示が「1」となっており、どこかおかしい気がします(これが例えば「InnoDB」と表示されているのならまだ分かるのだが)。

現在のストレージエンジンを確認

そこで、postsテーブルが現在利用しているストレージエンジンを確認してみることにしました。

次のようにコマンドを実行します。

$ mysql -h host -u user -p
Enter password:
...
mysql> show databases;
...
mysql> use database_name;
...
mysql> show table status;

として、チェックしてみると、postsテーブルは、MyISAMを使っていました

すると、問題はないはずです。

原因を探るヒント

軽くプラグインを見てみると、yet-another-related-posts-plugin/class-core.phpにある「diagnostic_myisam_posts」で、MyISAMを使っているかどうかを確認しているようでした。

	function diagnostic_myisam_posts() {
		global $wpdb;
		$tables = $wpdb->get_results("show table status like '{$wpdb->posts}'");
		foreach ($tables as $table) {
			if ($table->Engine == 'MyISAM')
				return true;
			else
				return $table->Engine;
		}
		return 'UNKNOWN';
	}

ここで気が付くのは、MyISAMであったとき、trueを返し、MyISAMでなければストレージエンジン名を返すというところです。

ここから、警告メッセージに表示された「1」が、実は「true」であったのではないか、と考えられます。

そして、今回の警告メッセージは、yet-another-related-posts-plugin/options.php

if ( !yarpp_get_option('myisam_override') && $yarpp->diagnostic_fulltext_disabled() ) {
	echo "<div class='updated'>"
	.sprintf(__("YARPP's \"consider titles\" and \"consider bodies\" relatedness criteria require your <code>%s</code> table to use the <a href='http://dev.mysql.com/doc/refman/5.0/en/storage-engines.html'>MyISAM storage engine</a>, but the table seems to be using the <code>%s</code> engine. These two options have been disabled.",'yarpp'), $wpdb->posts, $table_type)
	."<br />"
	.sprintf(__("To restore these features, please update your <code>%s</code> table by executing the following SQL directive: <code>ALTER TABLE `%s` ENGINE = MyISAM;</code> . No data will be erased by altering the table's engine, although there are performance implications.",'yarpp'), $wpdb->posts, $wpdb->posts)
	."<br />"
	.sprintf(__("If, despite this check, you are sure that <code>%s</code> is using the MyISAM engine, press this magic button:",'yarpp'), $wpdb->posts)
	."<br />"
	."<form method='post'><input type='submit' class='button' name='myisam_override' value='"
	.__("Trust me. Let me use MyISAM features.",'yarpp')
	."'></input></form>"
	."</div>";
}

から出力されているようです。修正したい人は、このあたりから探してみてください。

対策

チェックした結果、MyISAMを使っているはずなので、警告メッセージに表示されていた「MyISAMを使っています。嘘じゃないから。」をクリックしました。

MyISAM専用機能を強制的に有効にしました。「タイトルを検討」と「内容を検討」機能が使えるようになりました。

すると、このように表示され、警告は表示されないようになりました。これにより、使えなかった機能が使えるようになったと思われます(このプラグインの場合、本文を参考にしたかどうか、のような機能が有効なのか無効なのかがわかりにくいのですが、ソースコードを見たところ、無効から有効になると思われるコードだったので、有効になったのだと推測しています)。

コメント(0)

新しいコメントを投稿