web-dev-qa-db-ja.com

「レビュー用に送信」フックのカスタム関数

だから私は約15人の貢献者と5人の編集者のブログを管理しています。投稿者が[レビュー用に送信]ボタンをクリックするたびに、校正のために電子メールが編集者に送信されるようにシステムを実装したいと思いました。私はアクションを作りましたが、それは "投稿"編集ではなく、 "送信"時間では発生しませんでした。

私の回避策は投稿のステータスをチェックし、それが "保留中"のEメールのみを起動することでしたが、送信をヒットする前のステータスはまだ '下書き'です...これは送信をヒットした秒にのみ機能レビュー.

これが私のスニペットです。助けてください!

function submit_send_email() {
    global $post;
    if ( current_user_can('contributor') && $post->post_status == 'pending' ) {
        $user_info = get_userdata ($post->post_author);
        $strTo = array ('[email protected]');
        $strSubject = 'Fstoppers: ' . $user_info->user_nicename . ' submitted a post';
        $strMessage = '"' . $post->post_title . '" by ' . $user_info->user_nicename . ' was submitted a post for review at ' . wp_get_shortlink ($post->ID) . '&preview=true. Please proof.';
        wp_mail( $strTo, $strSubject, $strMessage );
    }
}
add_action('edit_post','submit_send_email');

アップデート:私はフランケンシュタインをセットアップしようとしました、私の行動が15秒後に実行されるイベントを予定してもらい、ダイスをしないでください。

function submit_send_email ($post) {
    if ( $post->post_status == 'pending' ) {
        $user_info = get_userdata ($post->post_author);
        $strTo = array ('[email protected]');
        $strSubject = 'Fstoppers: ' . $user_info->user_nicename . ' submitted a post';
        $strMessage = '"' . $post->post_title . '" by ' . $user_info->user_nicename . ' was submitted a post for review at ' . wp_get_shortlink ($post->ID) . '&preview=true. Please proof.';
        wp_mail( $strTo, $strSubject, $strMessage );
    }
}
function submit_for_review() {
    global $post;
    if ( current_user_can('contributor') ) {
        wp_schedule_single_event( time() + 15, 'submit_send_email_event', $post );
    }
}
add_action('submit_send_email_event','submit_send_email', 10, 1);
add_action('save_post','submit_for_review');
2
Tam N.

あなたは 投稿ステータス遷移 アクションが必要です

function notify_me_for_pending( $post ) {
  $user_info = get_userdata ($post->post_author);
  $strTo = array ('[email protected]');
  $strSubject = 'Fstoppers: ' . $user_info->user_nicename . ' submitted a post';
  $strMessage = '"' . $post->post_title . '" by ' . $user_info->user_nicename . ' was submitted a post for review at ' . wp_get_shortlink ($post->ID) . '&preview=true. Please proof.';
  wp_mail( $strTo, $strSubject, $strMessage );
}

add_action( 'draft_to_pending', 'notify_me_for_pending' );
add_action( 'auto-draft_to_pending', 'notify_me_for_pending' );
5
gmazzap

私は似たような状況にあり、私が思いついた醜い方法は次のようなファイルを作成することでした。

require('/path/to/yourdomain.com/httpdocs/wp-blog-header.php'); 
global $wpdb;

// Search for posts by Contributors then email the editors
$today = date('Y-m-d');
$two_days_ago = date('Y-m-d', strtotime("-1 days"));

// Select draft posts but don't include Site Admin/Editors to reduce un-necessary emails and also if they're in there for more than x days, assume that there's a reason that they're not published and ignore
$sql = "SELECT * FROM `wp_posts` WHERE `post_author` !=4 AND `post_author` !=1 AND `post_author` !=7 AND `post_author` !=10 AND `post_author` !=11 AND `post_author` !=12 AND `post_status` = 'pending' AND `post_modified` > '$two_days_ago' ";

$result = $wpdb->get_results($sql);
if ($wpdb->num_rows > 0) {
    $message_text = $wpdb->num_rows . " draft posts(s) for review. Please review here: http://yourdomain.com/wp-admin/edit.php?post_status=pending&post_type=post&orderby=date&order=desc";
    $headers = 'From: Site Admin <[email protected]>' . "\r\n";
    wp_mail('[email protected]', 'Site Admin: Draft Posts awaiting approval', $message_text, $headers); 
    echo $wpdb->num_rows . " draft post(s) for approval";
    } else {
    echo " No posts for approval<br>";
    }

私はその後30分ごとにクーロンを走らせて新しい投稿があるかどうかを確認します。 (私は他にもさまざまなメンテナンススクリプトをここで実行しています、など)。

これはあなたを助けるかもしれないと思った。

0
TomC