PDO (SQLite) For WordPress」タグアーカイブ

[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]アップデート

SQLiteプラグインだけではまともに動いてくれないため、
内部的にも色々書き換えてしまったwordpress。

それをバージョンUPするのは容易じゃない。
自動では巧く行かないし、手動でもちょっとメンドクサイ。
この状態での一番カンタンなバージョンUPの仕方。

バージョンUPする際には
ちょっと使えなくなる時間が出来るから.htaccessとかで
メンテナンスページにでも飛ばした方がいいかも。

説明のための名前規定

wpA … 今使用してるwordpress
wpB … downloadした新しいwordpressを解凍したもの
続きを読む

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

[wp×SQLite]Warning: array_merge()

コメントを編集する際にエラーが出てきた。

Warning: array_merge() [function.array-merge]: Argument #1 is not an array in /XXX/YYY/ZZZ/public_html/wp-includes/comment.php on line 1097

array_mergeに入れるのは両方配列でないといけない。
つまりどっちかが『配列じゃねぇ!!』てことみたいだ。

みてみたら$commentが『Array()』ではなくて『Array』。
確かに配列ではない。でもArray。
どゆこと!?
て思いながらとりあえずの修正。

/wp-includes/comment.phpを修正

以下の13行目を追記

function wp_update_comment($commentarr) {
	global $wpdb;

	// First, get all of the original fields
	$comment = get_comment($commentarr['comment_ID'], ARRAY_A);

	// Escape data pulled from DB.
	$comment = $wpdb->escape($comment);

	$old_status = $comment['comment_approved'];

	// Merge old and new fields with new fields overwriting old ones.
	if(count($comment) > 1)	// @to
	$commentarr = array_merge($comment, $commentarr);

	$commentarr = wp_filter_comment( $commentarr );

コメント出来た。

こんなん繰り返してたら、アップデートしづらくなるなぁ…

[wp×SQLite]Hello WordPress×SQLite!!『PDO (SQLite) For WordPress』

WordPressはプラグインでSQLiteが使える。

オフラインでDB加工して本番でも使おうという目的のもと、
WordPressはSQLiteを使うということで決定した。

使用プラグイン

WordPress > PDO (SQLite) For WordPress ? WordPress Plugins
一言でプラグインとは言えど、普通のプラグインと使用・設置方法が違う。

設置環境

ローカル環境:windowsXP、xampp Ver1.7.0、PHP5
本番環境:Linux(ubuntu)、PHP5以外よく知らない
続きを読む