WordPress2.1.xでK2を使う

このたび、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行目から先のソースが実に興味深い。

PHP:
  1. function k2countpages($query) {
  2.     global $wpdb;
  3.  
  4.     // WP 2.0
  5.     if (get_wp_version() <2.1) {
  6.         $posts_per = (int) get_option('posts_per_page');
  7.         if ( empty($posts_per) ) {
  8.             $posts_per = 1;
  9.         }
  10.  
  11.         $search = '/FROM\s+?(.*)\s+?GROUP BY/siU';
  12.         preg_match($search, $query->request, $matches);
  13.  
  14.         if ( 'posts' == get_query_var('what_to_show') ) {
  15.             $from_where = $matches[1];
  16.             $num_posts = $wpdb->get_var("SELECT COUNT(DISTINCT ID) FROM $from_where");
  17.         } else {
  18.             $from_where = preg_replace('/( AND )?post_date>= (\'|\")(.*?)(\'|\")( AND post_date <= (\'\")(.*?)(\'\"))?/siU', '', $matches[1]);
  19.             $num_posts = $wpdb->query("SELECT DISTINCT post_date FROM $from_where GROUP BY year(post_date), month(post_date), dayofmonth(post_date)");
  20.         }
  21.  
  22.         return ceil($num_posts / $posts_per);
  23.     }
  24.  
  25.     // WP 2.1+
  26.     return($query->max_num_pages);
  27. }

WordPressの2.0と2.1の場合分けをしていますね。
でも、エラーに2.0で使われているはずのSQLが出ているということは、if文の中に入っちゃってるってことでしょう。
ソースを見る限り、このif文をコメントアウトしてしまえば、問題なく動きそう。

ということで、実践。
無事、エラーはいなくなってくれました。めでたしめでたし。

Via:

このエントリをはてなブックマークに追加このエントリをdel.icio.usに追加 |

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


  1. No Comments

Leave a Reply