Función personalizada para el enlace "Enviar para revisión"

2

Así que gestiono un blog de aproximadamente 15 colaboradores y 5 editores. Quería implementar un sistema para que cada vez que un colaborador haga clic en el botón "Enviar para revisión" y se envíe un correo electrónico a los editores para que lo comprueben. He preparado una acción, pero pareció activarse en el momento de "editar publicación" y no en "enviar".

Mi solución fue poner un cheque para el estado de la publicación, solo disparar el correo electrónico de su "pendiente", pero antes de que presionen enviar, el estado sigue siendo "borrador" ... esto significa que solo funciona en el segundo pulsa enviar para su revisión.

Aquí está mi fragmento hasta ahora. ¡Por favor ayuda!

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@example.com');
        $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');

ACTUALIZACIÓN: intenté hacer la configuración de Frankenstein, teniendo mi agenda de acción un evento que se ejecutaría 15 segundos más tarde, sin dados.

function submit_send_email ($post) {
    if ( $post->post_status == 'pending' ) {
        $user_info = get_userdata ($post->post_author);
        $strTo = array ('email@example.com');
        $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');
    
pregunta Tam N. 27.08.2013 - 20:10

2 respuestas

5

Necesita Publicación de transiciones de estado

function notify_me_for_pending( $post ) {
  $user_info = get_userdata ($post->post_author);
  $strTo = array ('email@example.com');
  $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' );
    
respondido por el gmazzap 28.08.2013 - 03:17
0

Estoy en una situación similar y el método feo que se me ocurrió fue crear un archivo con lo siguiente:

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 <info@yourdomain.com>' . "\r\n";
    wp_mail('editors@yourdomain.com', '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>";
    }

Luego ejecuto un cron cada 30 minutos para ver si hay nuevas publicaciones. (También tengo otros scripts de mantenimiento que se ejecutan aquí, etc.)

Pensé que esto podría ayudarte.

    
respondido por el TomC 27.08.2013 - 21:15

Lea otras preguntas en las etiquetas