web-dev-qa-db-ja.com

投稿が初めて公開されているかどうか、または既に公開されている投稿が更新されているかどうかを確認してください

そのモジュールにはそのための機能がなかったので、可用性をチェックするeventsモジュールへのアドオンを作成しています。ロジックを作成したので、送信する必要がある電子メールが3つあります。

  • 投稿が最初に送信されている場合は1つ(つまり、「新しい予定」)

  • 通常のユーザーは自分自身では公開できないため、投稿がサイト管理者によって公開されている場合(「あなたの予定は承認されました」)

  • 投稿が編集された場合、投稿が既に公開された後(つまり、「あなたの予定が編集されました」)

最初の2つについてはsave_postとpublish_postにフックしましたが、PUBLISHED投稿を編集したときにまったく異なるEメールが送信されるようにします。初めて公開されたのに対して、投稿が既に公開されていて、これが単なる編集であるかどうかをテストするにはどうすればよいですか。

6
fasad

変更をキャッチするためにedit_post にフックします。挿入と更新で呼び出されるwp_transition_post_status()を見てください。

function wp_transition_post_status($new_status, $old_status, $post) {
    do_action('transition_post_status', $new_status, $old_status, $post);
    do_action("{$old_status}_to_{$new_status}", $post);
    do_action("{$new_status}_{$post->post_type}", $post->ID, $post);
}

On publish あなたはフックする

  • draft_to_publish
  • pending_to_publish
  • auto-draft_to_publish

を編集する publish_to_publishにフックする。

ポストパブリッシュまたは編集中にすべての作者に通知するミニプラグイン。

<?php
/**
 * Plugin Name: (#56779) Notify authors
 */
add_action( 'transition_post_status', 'wpse_56779_notify_authors', 10, 3 );
function wpse_56779_notify_authors( $new_status, $old_status, $post )
{
    if ( 'publish' !== $new_status )
        return;

    $subject = 'publish' === $old_status
        ? __( 'Edited: %s', 'your_textdomain' )
        : __( 'New post: %s', 'your_textdomain' );

    $authors = new WP_User_Query( array( 'role' => 'Author' ) );
    foreach ( $authors as $author )
    {
        wp_mail(
            $author->user_email,
            sprintf( $subject, $post->post_title ),
            $post->post_content
            // Headers
            // Attachments
        );
        // Slow down
        sleep( 5 );
    }
}
11
fuxia