移行ルーチンの一環として、一括操作でプログラム的にコメントを挿入しようとしています。コメントはSQLサーバーテーブルにあります。
SQLサーバーのテーブルフィールドから日付情報を受け取り、それを次のようにPHP変数に格納します。
while( $row = sqlsrv_fetch_array( $RS, SQLSRV_FETCH_ASSOC))
{
...
$the_date = $row['the_date'];
...
}
$ the_dateのvar_dumpビューは次のとおりです。
object(DateTime)#97 (3) {
["date"]=>
string(19) "2012-07-30 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
それから、wp_insert_commentのデータ配列を準備します。
次のようにそのデータ配列のvar_dumpビュー。
array(7) {
["comment_post_ID"]=>
string(5) "73615"
["comment_author"]=>
string(14) "Joe (USA)"
["comment_author_email"]=>
string(20) "[email protected]"
["comment_content"]=>
string(2001) "commment text here"
["comment_parent"]=>
int(0)
["comment_date"]=>
object(DateTime)#97 (3) {
["date"]=>
string(19) "2012-07-30 00:00:00"
["timezone_type"]=>
int(3)
["timezone"]=>
string(3) "UTC"
}
["comment_approved"]=>
int(1)
}
Wp_insert_comment操作の後、私は0を返します - エラーを示します。
そして、次のメッセージはプロセス全体を止めます。
Warning: preg_match() expects parameter 2 to be string, object given in F:\inetpub\....\wp-includes\formatting.php on line 1868
Fatal error: Uncaught exception 'Exception' with message 'DateTime::__construct() expects parameter 1 to be string, object given' in F:\inetpub\....\wp-includes\formatting.php:1872 Stack trace: #0 F:\inetpub\....\wp-includes\formatting.php(1872): DateTime->__construct(Object(DateTime)) #1 F:\inetpub\....\wp-includes\comment.php(1238): get_gmt_from_date(Object(DateTime)) #2 F:\inetpub\...\comments.php(259): wp_insert_comment(Array) #3 F:\inetpub\...\comments.php(100): HandleComments(Resource id #25, '73615', 'services.articl...', 'XYZ1207-5206') #4 {main} thrown in F:\inetpub\....\wp-includes\formatting.php on line 1872
どうすればこの問題を回避し、日付を正しく保存できますか? 2012-07-30 00:00:00
DateTimeオブジェクトから日付文字列を取得し、代わりにそれをcomment_dateパラメータに渡す必要があることがわかりました。
$ comment_date = $ the_date-> format( 'Y-m-d H:i:s');