[wp×SQLite]日付から記事取得

WordPressでSQLiteを使うと、年・月・日 つまりは日付から記事を読み出すのがうまくいかない。
これはMySQLとSQLiteとでSQL文が違うために起きている。

言わば、『MySQLとは違うのだよ MySQLとは!!!』ということ

『YEAR(wp_posts.post_date)=2009』は
 『wp_posts.post_date like "2009-%"』か
 『strftime('%Y',wp_posts.post_date)='2009'』

『MONTH(wp_posts.post_date)=04』は
 『wp_posts.post_date like "%-04-%"』か
 『strftime('%m',wp_posts.post_date)='04'』

『DAYOFMONTH(wp_posts.post_date)=04』は
 『wp_posts.post_date like "%-04-%"』か
 『strftime('%d',wp_posts.post_date)='04'』
に修正が必要

/wp-content/pdo/db.php

直後に

if( strtolower(mb_substr(str_replace(" ","",$query),0,6)) == "select" )
{
	if( stristr($query, 'where') )
	{
		$arr_query[0] = preg_replace("/(SELECT .* FROM .* WHERE) (.*)/i", "$1" , $query);
		$arr_query[1] = preg_replace("/(SELECT .* FROM .* WHERE) (.*)/i", "$2" , $query);
		$explode = 1;
		if($arr_query[0] == $arr_query[1])
		{
			$explode = 0;
		}			
		$arr_query[1]	= preg_replace("/YEAR\(wp_posts\.post_date\)=([0-9]*[0-9])/i", "strftime('%Y',wp_posts.post_date)='$1'" , $arr_query[1]);
		$arr_query[1]	= preg_replace("/DAYOFMONTH\(wp_posts\.post_date\)=([0-9]*[0-9])/i", "strftime('%d',wp_posts.post_date)='$1'" , $arr_query[1]);
		$arr_query[1]	= preg_replace("/MONTH\(wp_posts\.post_date\)=([0-9]*[0-9])/i", "strftime('%m',wp_posts.post_date)='$1'" , $arr_query[1]);
		if($explode == 1)
		{
			$query	= $arr_query[0]." ".$arr_query[1];
		}else
		{
			$query	= $arr_query[1];
		}
	}
}

※現状『YEAR(wp_posts.post_date)=2009』とか書いたとき修正されない様子…
ページ送り『SELECT FOUND_ROWS()』対応とセットで修正が必要

まだ完全ではないし他にもカラム追加系とか
SQLiteはデータ型もたなくて、自動noが1個しか使えないみたい?とかで
色々修正が必要になる様子。

公開:2009/6/17 @ 23:53
更新:2010/1/2 @ 00:06

コメント

タイトルとURLをコピーしました