このたび、WordPressを2.0.7から2.1.3にアップグレードしました。
ところで、こういうアップグレードというのは初めての作業でして。
何事もなく完了するとは思ってなかったのですが、やっぱり問題は起きてしまいました。
問題が起きたのは、デザイン面。
端的に言えば、K2のPHPの一部がエラーになってしまいました。
エラー文はこちら。
WordPress database error: [You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ‘GROUP BY year(post_date), month(post_date), dayofmonth(post_dat]
SELECT DISTINCT post_date FROM GROUP BY year(post_date), month(post_date), dayofmonth(post_date)
どうやら、SQL関連の模様。
ただ、これだけだとさっぱりだったので、検索してみると、フォーラムでも話題になっていることをこちらのブログ経由で発見。
フォーラムにはこんな回答がついていました。
テーマが 2.1.x に非対応なのでしょう。SQL 文を見ると分かりますが、FROM の後に来るべきテーブル名が空になっていて、いきなり GROUP BY 句が来ています。これでは SQL エラーになって当然です。
ああ。よく見れば、なるほどそのとおり。
でも、解決策については何もなかったので、このヒントをもとに自分で直してみることに決定。
このSQLを書いてあるところを探して、そこから対応していけばよいでしょう。
このSQLが書いてある場所は、k2のテーマのディレクトリの下のapp/includes/info.php。
130行目から先のソースが実に興味深い。
-
function k2countpages($query) {
-
global $wpdb;
-
-
// WP 2.0
-
if (get_wp_version() <2.1) {
-
$posts_per = (int) get_option('posts_per_page');
-
$posts_per = 1;
-
}
-
-
$search = '/FROM\s+?(.*)\s+?GROUP BY/siU';
-
-
if ( 'posts' == get_query_var('what_to_show') ) {
-
$from_where = $matches[1];
-
$num_posts = $wpdb->get_var("SELECT COUNT(DISTINCT ID) FROM $from_where");
-
} else {
-
$from_where = preg_replace('/( AND )?post_date>= (\'|\")(.*?)(\'|\")( AND post_date <= (\'\")(.*?)(\'\"))?/siU', '', $matches[1]);
-
$num_posts = $wpdb->query("SELECT DISTINCT post_date FROM $from_where GROUP BY year(post_date), month(post_date), dayofmonth(post_date)");
-
}
-
-
}
-
-
// WP 2.1+
-
return($query->max_num_pages);
-
}
WordPressの2.0と2.1の場合分けをしていますね。
でも、エラーに2.0で使われているはずのSQLが出ているということは、if文の中に入っちゃってるってことでしょう。
ソースを見る限り、このif文をコメントアウトしてしまえば、問題なく動きそう。
ということで、実践。
無事、エラーはいなくなってくれました。めでたしめでたし。
Via:

0 Responses to “WordPress2.1.xでK2を使う”