タイトルの通りです。以下のような状況となりました。
- PHPのスクリプト上のSQLで、WordPressのDBに直接postを下書きとしてインサート
- 下書きのpostのstatusをdraft->publishにするスクリプトを実行
- statusがなぜかfutureとして更新されてしまい自動で記事が公開されない
スクリプトの目的
2つスクリプトがあって、1つ目は下書きとして記事をDBに登録するもの、2つ目は下書きの記事を取得して公開にステータスに変更するものとなります。
なぜ一度下書きとして登録した後に公開するのか?
JetpackでTwitterに投稿を自動でツイートするようにしているのですが、SQLでDBにstatusを「publish」として直接インサートすると自動ツイートが上手く働いてくれないためです。
どういったスクリプト?
1つ目の記事をDBに登録するもの
以下となります。 $pdo
変数は事前に定義されてあるものとします。
以下のコードでDBに下書きとしてpostを保存することが出来ます。
|
|
2つ目の登録された下書きのpostを公開にするもの – 動作しなかったもの
こちらがDBから下書きの記事を取得して公開にするスクリプトです。
1つ目のものと違い、WordPressのloaderを読み込んでおり、WordPressの関数を使うようにしています。
こちらが今回上手く動作しなかったものとなります。
|
|
解決策
2つ目のスクリプトが動かず色々試してみました。
post_date_gmt
をセットしてみたり、DBにデータを入れる時、statusをdraftではなく、future(公開予約)で既に入れてしまい、2つ目のスクリプトでfuture->publishに変更する等です。
ですが結論以下となりました。
|
|
wp_publish_post
という関数が用意されていて、こちらがWordPressで公開に必要な色々な処理を行ってくれているようでして、こちらを使用することで今回の問題が解決されました。
同じような問題で悩んでいる方の参考になればと思います。