Help us understand the problem. What is going on with this article?

WordPressで記事が公開されたタイミングで処理をする

More than 1 year has passed since last update.

経緯

とあるアプリでWordPressのコーポレートサイトの記事が公開されたら、アプリ通知を実行したいという要望があった。
その際に、「save_postにホックすれば余裕でしょ!」とか思ってたら痛い目を見たので、ここにメモ残しておきまする:pen_ballpoint:

ちなみにこの要望はのちになくなったのでこのソースコードは使われないことに....
供養も含めてメモメモ:disappointed_relieved::pray:

/**************************************
/* 公開された際の通知処理
/* 以下の順で実施。(ステータスが公開に変わったか)->(カスタムフィールドを取得し、何かしらの処理を実行)
/* transition_post_status(is_published_now)=>wp_insert_post(do_something_on_published)
**************************************/
function is_published_now($new_status, $old_status, $post){
  // 投稿のステータスが「新規追加」または「下書き保存」または「レビュー待ち」または「予約投稿」から
  // 「公開」へ変わった際にflgを立てておく(save_postやedit_post/wp_insert_post ではステータスの変化がわからないため)
  global $is_publiched;
  if (($old_status == 'auto-draft'  || $old_status == 'draft'
       || $old_status == 'pending'  || $old_status == 'future')
    && $new_status == 'publish' && $post->post_type == 'post') {

      if (empty($is_publiched) && $old_status == 'future')
      { // 予約投稿の際、wp_insert_postは呼び出されないので、ここで呼ぶ
        hoge($post);
      }
      else{
        $is_publiched = true;
      }
  }
  else {
    if (!$is_publiched) $is_publiched = false;
  }
}
add_action('transition_post_status', 'is_published_now', 10, 3);

// 投稿に変更があり、かつ公開ステータスとなった際に実行
// (カスタム項目が取得できない関係上、transition_post_statusでは処理ができない為wp_insert_postを利用する。(save_post/edit_postも不可))
function do_something_on_published($post_ID, $post){
  global $is_publiched;
  if ($is_publiched){
    hoge($post);
    $is_publiched = false;
  }
}
add_action('wp_insert_post', 'do_something_on_published', 100, 2);

function hoge($post){
 //ここに記事が公開されタイミングでしたい処理を描く。
}

参考サイト様。
感謝:
https://routecompass.net/twitter/

_nakashimamura
そうだ、私が見切り発車マンだ。 私の記載する記事による、一切の損害などについては責任を負いません。 また私の記事は私の所属する組織を代表する意見ではありません。
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした