I am trying to make some custom emails that will send out the entire output of a query, but I am not sure how to return an entire loop.
$query = new WP_Query( array(
//Stuff
));
$loop = while ( $query->have_posts() ): $query->the_post( );
setup_postdata($events);
$var1 = get_post_meta();
return 'Stuff about each queried post'.$var1;
endwhile; wp_reset_query();
wp_mail($customer, $subject, $loop);
Is there someway to return an entire loop in this way?
Kailey Lampert answers:
try this
$loop = '';
$query = new WP_Query( array(
//Stuff
));
while ( $query->have_posts() ): $query->the_post( );
setup_postdata($events);
$var1 = get_post_meta();
$loop .= 'Stuff about each queried post'.$var1;
endwhile; wp_reset_postdata();
wp_mail($customer, $subject, $loop);
Kailey Lampert comments:
In case you are using functions like the_title() or the_content() which echo instead of return, you can either change them to get_the_title() and get_the_content() or use output buffering
$query = new WP_Query( array(
//Stuff
));
ob_start();
while ( $query->have_posts() ): $query->the_post( );
setup_postdata($events);
$var1 = get_post_meta();
echo 'Stuff about each queried post'.$var1;
endwhile; wp_reset_postdata();
$loop = ob_get_contents();
ob_end_clean();
wp_mail($customer, $subject, $loop);
Kyle comments:
Perfect :) thank you
Christianto answers:
Do you need to save entire query object and email it?
You could [[LINK href="http://php.net/serialize"]]serialize[[/LINK]] $loop so it become string, for example:
$query = new WP_Query( array(
//Stuff
));
$my_string_query = serialize($query);
wp_mail($customer, $subject, $my_string_query);
and if you need to convert it to object again, use unserialize()