サポート » その他 » 新規投稿時のアクションフック

  • 解決済 Kohsuke Hada

    (@wingfield)


    お世話になっております。

    とあるブログサイトで、複数の寄稿者ユーザーと1人の管理者がいてブログを管理しています。寄稿者が新規に下書きを作成すると、管理者にメール通知を送りたいと考えています。このとき、投稿にはカスタムフィールドがいくつか設定されていて、メール本文にカスタムフィールドも追加したいです。

    save_postかtransition_post_statusアクションフックを考えました。

    save_postだと$updateをfalseに設定してもタイトルやカスタムフィールドを更新するごとにフックが実行されてしまいます。

    transition_post_statusで以下のように作成しましたが、投稿が新規に作成されたときに一度だけ実行する条件が分からず悩んでいます。

    これ以外のアクションフックや条件で実現できる方法を含め、ご教示いただければ幸いです。

    function adminmail_draft($new_status, $old_status, $new_post) {
    $field_name = ‘review_available_date’; //「公開希望日」カスタムフィールド

    $post_id = $new_post->ID;

    $new_title = get_the_title($post_id);
    $old_title = get_the_title($post->ID);

    $new_date = get_field($field_name, 0);
    $old_date = get_post_meta( $new_post ->ID , $field_name ,true);

    if($new_status == “draft”) { //$new_title != “自動下書き” && $old_title == “自動下書き” &&

    // 公開希望日
    $value = “”;
    if (! trim(get_field($field_name, 0))==”){
    $value = DateTime::createFromFormat( ‘d/m/Y’, get_field($field_name, 0) )->format( ‘Y年n月j日’ );
    }
    else {
    $value = “指定なし”;
    }

    // 申し送り
    $value2 = “”;
    if (! trim(get_field(‘review_note’, 0))==”){
    $value2 = get_field(‘review_note’, 0);
    }
    else {
    $value2 = “なし”;
    }

    $subject = “【”. get_option(‘blogname’) .”】投稿が新規追加されました”;
    $message = “ArcGISブログ推進タスク 管理者 各位\r\n”;
    $message .= “\r\n”;
    $message .= “投稿が新規追加されました。公開スケジュールを設定してください。\r\n”;
    $message .= “\r\n”;
    $message .= “■タイトル:” . get_the_title($post_id) . “\r\n”;
    $message .= “\r\n”;
    $message .= “■ステータス:下書き\r\n”;
    $message .= “\r\n”;
    $message .= “■公開希望日:” . $value . “\r\n”;
    $message .= “\r\n”;
    $message .= “■申し送り:\r\n”;
    $message .= $value2 . “\r\n”;
    $message .= “\r\n”;
    $message .= “■編集用 URL:\r\n”;
    $message .= wp_specialchars_decode(get_edit_post_link( $post_id ), ENT_QUOTES) . “\r\n”;
    $message .= “\r\n”;
    $message .= “\r\n”;
    $message .= $new_title .”\r\n”;
    $message .= $new_status .”\r\n”;
    $message .= $new_date .”\r\n”;
    $message .= “\r\n”;
    $message .= $old_title .”\r\n”;
    $message .= $old_status .”\r\n”;
    $message .= $old_date .”\r\n”;

    //メール送信関数
    sendmail_for_members();//省略
    }
    }
    add_action(‘transition_post_status’, ‘adminmail_draft’, 10, 4);

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • こんにちは

    ステータスが下書きに変更された時であれば、下記のようにするとできると思います。

    if($new_status == "draft") {

    if ( 'draft' !== $old_status && 'draft' === $new_status ) {

    スレッド開始 Kohsuke Hada

    (@wingfield)

    ishitakaさま
    返信が遅くなってしまい大変申し訳ございません。
    いただいた回答で期待通りの動作ができそうです。

    ありがとうございました。

2件の返信を表示中 - 1 - 2件目 (全2件中)
  • このトピックに返信するにはログインが必要です。