返信先: 受注明細リスト出力でCSVダウンロード出来ない

フォーラム 使い方全般 受注明細リスト出力でCSVダウンロード出来ない 返信先: 受注明細リスト出力でCSVダウンロード出来ない

#84477
nglife
参加者

uchinokoさんと全く同様の現象が起きております。
恐らく「新型受注リスト」のみの問題で特に「(LIKE検索ベースの)検索条件を指定した際」に起こるようです。

10月31日(火)前後にWPのコアファイル(自動)アップデートがあったようで、

/wp-includes/wp-db.php
(=$wpdb)

のprepare()関数が仕様変更されているようでした。第二引数以降に「%」が含まれていると一時的にハッシュ値で置き換えられるようになったようです。また、そのハッシュ値は「query()」を通る際に元の「%」に戻されるようです。恐らくこれによるものと思います。

同ファイルに

1. placeholder_escape()/ハッシュ値生成
2. add_placeholder_escape()/ハッシュ値で「%」を置き換え
3. remove_placeholder_escape()/ハッシュ値を「%」に戻す

の関数が追加されておりました。
※それぞれ「WP:4.8.3」からの追加のようですが、私含めそれ以前のWPを使用されている方でもコアファイル自動アップデートが適用されるとこれらの更新が適用されてしまいます。

$wpdb->prepare()が呼ばれると、
→ 2. add_placeholder_escape()
→ 1. placeholder_escape()

の順に内部でコールされ、1. の途中で3. がフックに登録されるようです↓
add_filter( 'query', array( $this, 'remove_placeholder_escape' ), 0 );

ただ、リストDL時には$wpdb->prepare()が呼ばれていないためにこの連鎖が出来ていないようでした。

Welcartの新型受注リスト用クラス
/wp-content/plugins/usc-e-shop/classes/orderList2.class.php

の仕様として「$searchWhere」や「$searchHaving」にクエリ文を格納し、リストDL時にはこの変数からクエリ文を復帰していると思います。ただこの場合、各変数にはハッシュ値を含むクエリ文が格納されてしまっているのとprepare()がコールされないことから3. のフック登録が行われずハッシュ値を元に戻せていないままリストのデータ取得クエリが発行されてしまっているのだと思います。また、クエリ文(構文)としては正常なのでエラーは出ずにデータ件数が0になってしまうと思われます。

私の調べた範囲では以上のような推測となりますが早期ご対応をいただけると助かります。

どうぞよろしくお願いいたします。

  • この返信は6年、 5ヶ月前にnglifeが編集しました。