web-dev-qa-db-fra.com

Fonction personnalisée pour le crochet "Soumettre pour révision"

Je gère donc un blog d'environ 15 contributeurs et 5 rédacteurs. Je souhaitais mettre en place un système permettant à chaque contributeur d'appuyer sur le bouton "Soumettre pour révision" et d'envoyer un courrier électronique aux éditeurs pour vérification. J'ai concocté une action, mais elle a semblé se déclencher à l'heure de "post-édition" et non à celle de "soumission".

Ma solution de contournement consistait à vérifier le statut de la publication et à renvoyer uniquement le courrier électronique "en attente", mais avant de cliquer sur Envoyer, le statut est toujours "brouillon". la revue.

Voici mon extrait jusqu'à présent. S'il vous plaît aider!

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: J'ai essayé de configurer Frankenstein, mon action étant programmée pour un événement qui se déroulerait 15 secondes plus tard, pas de dés.

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.

Vous avez besoin de Transitions de post-statut actions

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

Je suis dans une situation similaire et la méthode laide que j'ai proposée était de créer un fichier avec les éléments suivants:

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

Je lance ensuite un cron toutes les 30 minutes pour voir s'il y a de nouveaux messages. (J'ai également divers autres scripts de maintenance en cours d'exécution ici, etc.)

Je pensais que cela pourrait vous aider.

0
TomC