WordPress: gestire una newsletter di Mailchimp con i custom post type

Ho recentemente dato il via alla newsletter di questo sito utilizzando Mailchimp. Avevo bisogno di offrire delle informazioni sulla newsletter oltre al solito collegamento al form di iscrizione. Per questo motivo ho implementato una soluzione in WordPress con i custom post type.

Per una soluzione rapida alla creazione di un custom post type che avesse anche un custom field di tipo data ho preferito utilizzare due plugin che mi hanno spesso fatto risparmiare molto tempo, ossia Custom Post Types UI e Advanced Custom Fields. Si tratta di una soluzione che, in termini di produttività, può fare davvero la differenza.

La data ha lo scopo di dare informazioni sul prossimo numero della newsletter. Il custom field non è altro che un date picker controllato da jQuery UI.

A questo punto ogni custom post type presenterà il titolo del prossimo numero della newsletter, un breve riassunto e la data. La data ha anche un altro scopo: ci permette di mostrare un diverso messaggio a seconda se il numero corrente della newsletter sia già stato pubblicato o meno.

Quindi possiamo utilizzare il seguente codice come shortcode:


function display_newsletter_preview() {
    // 1 post alla volta, l'ultimo pubblicato

	$args = array ( 'post_type' => 'newsletter', 'posts_per_page' => 1 );
	$html = '<div id="newsletter-coming">';

	$loop = new WP_Query( $args );
	while($loop->have_posts()) {
		$loop->the_post();
		$id = get_the_ID();
		$date = get_post_meta($id, 'newsletter-date', true); // la data come stringa unica
        
        // separo anno, mese, giorno

        $year = substr($date, 0, 4);
        $month = substr($date, 4, 2);
        $day = substr($date, 6, 7);

        // creo il formato da visualizzare: gg/mm/aaaa

        $newsletter_date = $day . '/' . $month . '/' . $year;

        // ottengo il timestamp Unix usando il formato aaa-mm-gg

        $newsletter_ts = strtotime($year . '-' . $month . '-' . $day);

		$title = get_the_title();
		$content = strip_tags(get_the_content());
		$today = time(); // data corrente come timestamp Unix
		$message = '';

		if($newsletter_ts == $today) {
			$message = 'In questo numero'; // è oggi?
		}

		if($newsletter_ts > $today) {
			$message = 'Nel prossimo numero'; // è nel futuro?
		}

		if($today > $newsletter_ts) {
			$message = 'Nell\'ultimo numero'; // è nel passato?
		}

		$html .= '<p>' . $message . '</p>';
		$html .= '<h4>' . $title . '</h4>';
		$html .= '<h5>' . $newsletter_date . '</h5>';
		$html .= '<div>' . $content . '</div>';
	}

	$html .= '</div>';

	return $html;

}
add_shortcode('newsletter-preview', 'display_newsletter_preview');

Come si può notare la parte più complessa del codice è quella relativa al calcolo della data.

Torna su