wordpress×SQLite」タグアーカイブ

wordpressをSQLiteで動かそう

[wp×SQLite]投稿時の記事数取得

wordpressを3系にしてから投稿は出来るんだけど、フロントからカテゴリが消えてしまうという現象が起きるようになった。

『esc_sql()』というものが配列には対応しておらず、
post_type IN()でこのポストタイプの判断条件がエラーしていることが原因だった。

その対応方法。
続きを読む

[wp×SQLite]アップデート・プラグイン導入時気をつけること

SQLiteって、他のDBよりも明らかに『型』が少ない。
それはもう本当に…。

巧く動いていないとか、随分とレスポンスが遅いとかの場合、
wordpressをupdateしたり、pluginをinstallした場合、
SQLの構文エラーにより
普通なら自動的に作ってくれるはずのテーブルが、出来ていなかったり、
普通なら自動的に追加されるハズだったカラムが、追加されていない
というのが大概。

導入の直前直後ならどこが原因かとかわかってるからいいけど、
プラグインのソースを毎度イチイチ見るのも結構めんどくさいから
調子悪くなってからどれだろう…とか見たりする。

そゆときは、ブログの.sqliteがあるディレクトリにある『debug.txt』を見てみるといい。
ない可能性があるものがわかる。
あとはソースから検索したら、どっかでSQL文出てくる。
続きを読む

[wp×SQLite]アクセスが重くなった際のDB掃除

記事とかのデータを追加していくとファイルサイズが大きくなるが、
記事を削除したり、カテゴリ・タグを削除したりしても、容量を食ったままになる。

というのも
MySQLでもお馴染みの
『空いた領域をそのまま維持して、後からデータが追加された場合に利用する』
とかいうDBの面倒くさい仕様のため。

記事・カテゴリの追加・削除の繰り返しにより細切れ領域が増え、アクセスに影響が起きるわけである。

ということで、
ここで必要になるのは『wordpress用SQLite用データベースファイルのデフラグ』
ということになるので、その仕方について。

PCにSQLite3が入っている想定で書いている。
SQLiteが自分のPCに入ってない人は、まず下記の記事をごらんくだされ。
>>SQLiteの特徴
続きを読む

[wp×SQLite]timeoutエラー

Firefox起動したてとか、そゆときに

Fatal error: Maximum execution time of 30 seconds exceeded in XXX\XXX\wp\wp-content\pdo\PDOEngine.php on line XXX

とかって出ることがある。

どうにもPHPでタイムアウトらしい。

でもここの鯖缶様に結構長めにしてもらってあるから、
きっとPCを起動する際に読み損ねてるんだろうと思ってたんだけど、
どうにも違うらしい。

別件調べてるときにたまたま見つけたのだけど
PDOEngine.php内で設定しちゃってる様子。

続きを読む

[wp×SQLite]存在しないカテゴリ名でPDOエラー

PATH_INFO形式のとき
http://example.com/category/aaaa/
みたいに存在しないカテゴリ名前を出すとPDOエラーが出る
そんなときの対処

wp-content/pdo/PDOEngine.php

private function executeQuery( $statement )内

if (count($this->extractedVariables) > 0){
	$this->queries[] = "Executing:\t ".print_r($this->extractedVariables, true);

if (count($this->extractedVariables) > 0){
	//$this->queries[] = "Executing:\t ".print_r($this->extractedVariables, true);
	$this->queries[] = "Executing:\t (nodata)";

とする。

「全部出そうが出すまいが、データがないもんはないので知らんわい!」という対処。

[wp×SQLite]ページ送り『SELECT FOUND_ROWS()』対応

categoryとかarchiveとか一覧表示すると次のページとかのリンクが出ない。
そんな条件がなければ出るのに…

つまりページ数認識ではないか?

調べてみたところ、結構な記事数があるカテゴリでも
『$wp_query->max_num_pages』が『1ページ』となってしまっている。

つまりSQL文がオカシイ

こんな単純なミスが修正されないハズがないので、
またSQLiteとMySQLとの仕様差異と皆気づくところ。

WP_Queryはwp-includes/query.phpにあるので確認したところ、そりゃ当然アタリ。
続きを読む

[wp×SQLite]Simple Tagsとか使う

色々変わって読みづらくなったので、いっそ書き換え

例えば
SELECT p.post_title FROM テーブル AS p
というSQLがあるとする。

MySQLなら配列は『$うんつら["post_title"]』として返してもらえるんだけど、
SQLiteだと『$うんつら["q.post_title"]』として返される。

そのせいでSimple Tagsとか巧く動かないプラグインが多数ある。

前回同様SQL文を書き換えようと思ったのだけど、
『q.post_title as post_title』みたいに
『AS うんつら』と既に宣言されているものもあるのだから、なかなか巧くいかない。
※q.post_title as post_title AS post_title as post_title てなる

そこで『配列の添字を書き換えて作り直す』修正をする。
続きを読む

[wp×SQLite]ページ編集が巧くいかない

ページの編集が巧く使えない。
あくまでページ編集。
原因は$hierarchical_post_types[0]がうまく取得出来ないとこにあった。
SQLiteとMySQLで使えるSQLが違うから、他にも出てくるかもしれない。
続きを読む

[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'』
に修正が必要
続きを読む