つ積み上げログ技術ブログ記事一覧へ

自主執筆記事

wp_insert_post に post_author を渡さないと、テーマによっては公開ページに警告が出る

WordPress に記事を一括投入したあと、片方のサイトだけ画面の先頭に PHP Warning が出た。原因は post_author=0。Cocoon では出ず AFFINGER では出る。3サイト143件を直すまで。

サイト運用公開: 2026/09/25更新: 2026/09/30
WordPressPHPwp-cliデータ移行

01 / 本文

同じコードなのに、片方のサイトだけ警告が出た

WordPress に記事を一括投入した。公開ページは普通に表示され、エラーも出ない。しばらくして別のサイトを開いたら、画面の先頭に Attempt to read property "ID" on false が出ていた。

同じスクリプトで作った記事なのに、片方のサイトでは何も出ず、もう片方では画面に警告が出ていた。

02 / 本文

省略した引数の既定値が、壊れた状態だった

wp_insert_post() に post_author を渡していなかった。渡さないと 0 になる。存在しないユーザーIDだ。

テーマ側は get_userdata($post->post_author) の結果に ->ID を書いている。get_userdata(0) は false を返すので、PHP 8 では Warning になる。

省略できる引数は、省略すると既定値が入る。その既定値が「壊れた状態」であることがある。

03 / 本文

出ていない=正しい、ではない

違いはテーマだった。Cocoon は OGP を作るときに投稿者を触っていない。AFFINGER は article:author を出すために触る。

データの壊れ方は同じで、触るコードがあるかどうかの差でしかない。警告が出ていないサイトも壊れていた。

3サイトを調べたら合計143件あった。記事だけでなく、アイキャッチとして取り込んだ添付ファイルも全部そうだった。media_handle_sideload() も同じで、投稿者を指定しないと 0 になる。

04 / 本文

ノイズを消すフィルタは、いつか本物を消す

投入したあと wp-cli の出力は見ていた。ただ AFFINGER は wp-cli の標準出力にも Undefined global variable の警告を大量に吐く。常に出ているので grep -v warning で捨てる癖がついていた。

捨てるフィルタの中に、本物が混ざっていた。

正しい確認は、公開ページを実際に取得して grep することだった。管理側のログではなく、読む人に届いている HTML を見る。

コメント

この記事へのコメント

お名前だけで投稿できます。アカウント登録やログインは不要です。 いただいたコメントは確認のうえ公開します。