Por fin podemos crear acciones en lote personalizadas para las vistas tipo lista (entradas, autores,etc.) en la nueva versión 4.7 de WordPress (aún en fase BETA, pero quizás cuando leas este artículo ya esté publicada).
Vamos a ver cómo realizarlo. Te recomiendo que eches un vistazo al artículo Buenas prácticas para Desarrollar tema WordPress .
En el siguiente ejemplo crearemos una acción en lote personalizada que enviará por email una lista de artículos a un email pre-establecido. Vamos paso a paso, editando el fichero functions.php de nuestro tema o tema hijo. Este artículo puede complementar tu formación (si la has recibido) en nuestro curso de creación de temas WordPress .
1. Añadir una opción al desplegable
Para añadir una opción al menu desplegable “Acciones en Lote”, tenemos que registrar un callback en el filtro bulk_actions-{screen_id}
. Con esto conseguimos añadir una nueva opción en el array. Debes reemplazar {screen_id}
con el ID del admin de la pantalla para activar la opción.
Añadiremos la acción en lote “Enviar Email a Jesús” con el siguiente código:
add_filter( 'bulk_actions-edit-post', 'register_my_bulk_actions' );
function register_my_bulk_actions($bulk_actions) {
$bulk_actions['email_a_jesus'] = __( 'Enviar Email a Jesús', 'email_a_jesus');
return $bulk_actions;
}
[BANNER_SUSCRIPCION]
2. Procesar el envío del formulario
Para tratar los datos enviados mediante el formulario de acciones en lote, tendremos que registrar un callback en el filtro handle_bulk_actions-{screen_id}
de la pantalla screen_id
correspondiente. El filtro necesita una variable $redirect_url
que será la dirección a la que volveremos tras el procesado del formulario. Los otros argumentos de este callback dependerán de la pantalla en la que estemos creando la acción en lote.
Para añadir el manejador de la acción en lote que envíe los post a un email podemos usar el siguiente código:
add_filter( 'handle_bulk_actions-edit-post', 'my_bulk_action_handler', 10, 3 );
function my_bulk_action_handler( $redirect_to, $doaction, $post_ids ) {
if ( $doaction !== 'email_a_jesus' ) {
return $redirect_to;
}
$lista_articulos = ""
foreach ( $post_ids as $post_id ) {
// Por cada post haremos lo siguiente
$lista_articulos .= get_the_title($post_id)." \n\n"
}
// Enviamos el Email
$to = "jesus@mailinator.com" ;
$subject = "Algunos contenidos que quiero que revises Jesús;
$message = "Por favor revisa los siguientes artículos ".$lista_articulos ;
wp_mail( $to, $subject, $message);
$redirect_to = add_query_arg( 'bulk_emailed_posts', count( $post_ids ), $redirect_to );
return $redirect_to;
}
3. Mostrar los avisos
Podemos usar los notice hooks
que nos proporciona wordpress para mostrar al usuario el resultado de la operación, dependiendo del estado que hayamos puesto en la URL:
add_action( 'admin_notices', 'my_bulk_action_admin_notice' );
function my_bulk_action_admin_notice() {
if ( ! empty( $_REQUEST['bulk_emailed_posts'] ) ) {
$emailed_count = intval( $_REQUEST['bulk_emailed_posts'] );
printf( '<div id="message" class="updated fade">' .
_n( 'Se han enviado por email %s artículos a Jesús.',
'%s artículos enviados a Jesús.',
$emailed_count,
'email_a_jesus'
) . '</div>', $emailed_count );
}
}
Aquí puedes ver como es el mensaje tras realizar la acción:
En este ejemplo he usado un email desechable en mailinator, por lo que podréis verlo en mailinator.com y será algo así
Este sólo es un ejemplo básico de lo que podemos llegar a hacer con las acciones en lote personalizadas. Podéis ver más información en la página oficial sobre esta nueva funcionalidad.
Como puedes ver WordPress sigue evolucionando cada vez más para ofrecernos un completo framework para la creación de sitios web.