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.
Descripción del código
/* 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. */
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>'); }
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 ); }