wake-up-neo.net

Benutzerdefinierte Funktion für den Hook "Zur Überprüfung senden"

Also verwalte ich einen Blog mit ungefähr 15 Mitwirkenden und 5 Redakteuren. Ich wollte ein System implementieren, bei dem jedes Mal, wenn ein Beitragender auf die Schaltfläche "Zur Überprüfung einreichen" klickt, eine E-Mail an die Redakteure gesendet wird, um dies zu überprüfen. Ich habe mir eine Aktion ausgedacht, aber sie wurde anscheinend zum Zeitpunkt der Bearbeitung des Beitrags und nicht zum Zeitpunkt der Übermittlung ausgelöst.

Mein Workaround bestand darin, den Post-Status zu überprüfen und nur die E-Mail mit dem Status "Ausstehend" auszulösen. Bevor sie jedoch auf "Senden" klicken, lautet der Status noch "Entwurf" Rezension.

Hier ist mein bisheriger Ausschnitt. Bitte helfen Sie!

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');

UPDATE: Ich habe versucht, Frankenstein so einzurichten, dass mein Aktionsplan ein Ereignis ist, das 15 Sekunden später ausgeführt wird, ohne Würfel.

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.

Sie benötigen Statusübergänge buchen Aktionen

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

Ich bin in einer ähnlichen Situation und die hässliche Methode, die ich fand, war, eine Akte mit dem folgenden zu verursachen:

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>";
    }

Ich starte dann alle 30 Minuten einen Cron, um zu sehen, ob es neue Posts gibt. (Ich habe auch verschiedene andere Wartungsskripte, die hier laufen usw.)

Dachte, das könnte dir helfen.

0
TomC