Soluciones Web

Mailpress Users to Default Newsletters

Usando Mailpress, el plugin para wordpress para envío de Newsletters, me vi en la necesidad de crear un newsletter nuevo que sería el usado por defecto.
El problema fue asignarles a 107000 usuarios el nuevo Newsletter, ya que no hay algún proceso por lotes que lo haga. (aunque antes de hacerlo pensaba que si 🙁 )

En este enlace: How To Add Users To Your MailPress Newsletter Manually Comentan que debajo de la lista de usuarios de wordpres hay un campo para asignar mailing lists en forma masiva, dicen que al usarlo además les asigna el/los newsletters que haya marcados como “Default”.
Pero no me anduvo para los newsletters y no lo hace con los usuarios de la lista, sino que hay que agregar a mano las direcciones de email de los usuarios en un campo de texto.

Así que hice un script muy simple y para ejecutar sólo por fuera de wordpress, pero en su mismo directorio para tomar todo el framework, librerías, clases y constantes de WordPress y Mailpress.
El script lista todos los usuarios de MailPress y les va asignando los Newsletters por Default SOBREESCRIBIENDO los newsletters no marcados como Default que no serán asignados a ningun usuario.

mp1Newsletters reemplazados en el listado de usuarios. Debajo está el botón Bulk Add pero no funciona con los usuarios de la lista, sino agregando los emails en el campo de texto previo.
mp2Newsletters que se verán afectados. Solo los que tienen marcado el campo Default. (ejemplo marcados en Verde y azul, los rojos no serán asignados)

Descripción del código

ABOUT
Info en inglés acerca del script, su forma de uso y licencia Gratuita GPL
/*
Script Name: Mailpress Users to Default Newsletters
Script URI: https://www.netmdp.com/2015/08/mailpress-users-to-default-newsletters/
Description: Overwrite Newsletters assigned to every Mailpress User and assigns to everyone the Newsletters checked as Default on Mailpress Settings.
Mailing lists on users remains without changes.
Version: 1.0
Author: etruel <esteban@netmdp.com>
Author URI: http://www.etruel.com
*/
# @charset utf-8

/*
* Instructions:  Copy this file inside any WordPress dir.  Run the file from browser or console and wait few seconds.  The magic is done.
* Tests are made in the theme directory but would works well in WordPress root too.
* Was tested on development WordPress 4.2.4 and on Production enviroment with WordPress 3.7.1, MailPress Version 5.4.2 and 106721 MailPress Users.
*/
Load Libraries
Carga las librerías del WordPress. Con parche para buscar en la mayor cantidad posible de paths el archivo principal.
if ( !defined('ABSPATH') ) {
    /** Set up WordPress environment */
    //require_once( '/wp-load.php');
    if( !(include $_SERVER['DOCUMENT_ROOT'].'/wp-load.php') )
        if( !(include $_SERVER['DOCUMENT_ROOT'].'../wp-load.php') )
        if( !(include 'wp-load.php') )
        if( !(include '../../../wp-load.php') )
        if( !(include '../../../../wp-load.php') )
        if( !(include '../../../../../wp-load.php') )
            die('<H1>Can\'t include wp-load. Report to etruel@gmail.com</H1>');
}
Do the magic
Por último corro un query SQL para obtener todos los usuarios de MailPress en un array de objetos.
Luego tomo los newsletter marcados por default en MailPress y recorro todos los usuarios del array asignandole a cada uno dichos newsletters.
Fácil eh?
global $wpdb;
$sql = $wpdb->prepare( "SELECT DISTINCT id, email, name, status, confkey FROM $wpdb->mp_users");
$results = $wpdb->get_results( $sql , OBJECT );
$newsletters = MP_Newsletter::get_defaults();
foreach($results as $key => $mp_user) {
    MP_Newsletter::set_object_terms( $mp_user->id, $newsletters );
}

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *