サポート » 使い方全般 » 予約投稿のタイミング

  • 解決済 shokun0803

    (@shokun0803)


    add_filterwp_insert_post_dataをフィルタして記事が修正されたときに動作を行うコードを書いているのですが、$post->post_content != stripslashes($data['post_content'])でチェックをして分岐をしている場合の挙動で予約投稿のタイミングが掴めないので教えてください。

    上記のようなコードで、記事が修正されている場合に更新ボタンを押した場合privateに変更し未承認のフィールドを追加(変更)するようにしています。

    ここで、開いた記事を修正・更新 -> 未承認・privateになる -> そのまま日付を修正・予約投稿 -> 予約時間になったら公開されてしまう

    通常の更新ボタンを押す場合は、未承認記事の場合強制的にprivateになるのですが、予約投稿の場合は予約投稿ボタンを押してもprivateにならず、予約時間になってももちろんprivateになりません。

    予約投稿のボタンを押したタイミングか、予約時間に自動投稿されるタイミングのフックはあるのでしょうか、ご教授お願いします。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • モデレーター IKEDA Yuriko

    (@lilyfan)

    予約投稿の場合、post_status に ‘future’ と入ってしまい、private 属性が消えてしまうのが原因ですね。

    予約投稿が公開されるときは wp_publish_post() が実行され、そこから wp_transition_post_status() が実行されて以下のアクションが発生します (wp-includes/post.php 参照)。

    transition_post_status
    future_to_publish

    (publish_post も発生しますが区別用にはたぶん使えない)

    トピック投稿者 shokun0803

    (@shokun0803)

    ありがとうございます。

    予約投稿の場合、post_status に ‘future’ と入ってしまい、private 属性が消えてしまうのが原因ですね。

    なので、

    if( $post->post_content != stripslashes($data['post_content']) && $current_user->user_level == 3 ) {
      ~記事が更新されている時の処理~
    } elseif( $current_user->user_level == 3 && $post->post_status == 'future' &&  $meta_values[0] == "未承認" && $post->post_type == 'post' ) {
    // 予約投稿で公開処理した時の処理。
      $data['post_status'] = 'private';
    } elseif( $current_user->user_level == 3 && $meta_values[0] == "未承認" && $post->post_type == 'post' ) {
    // 未承認記事を公開処理した時の処理。ここがないとゴミ箱が機能しない。
      if( $post->post_status != 'private' && $post->post_status != 'trashe' ) {
        $data['post_status'] = 'private';
      }
    }

    結局、こんな感じで「未承認かつfuture」を判断して強制非公開にしてみました。
    現在のところ動いていそうですので様子を見ます。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • トピック「予約投稿のタイミング」には新たに返信することはできません。