if you set the fields
parameter to ids you will get an array of ids instead of unneeded post data ex:
$ongoing_args = array(
'post_type' => 'promotions',
'meta_key' => 'sp_ongoingPromotion',
'meta_value' => 1,
'fields' => 'ids'
);
$current_args = array(
'post_type' => 'promotions',
'meta_key' => 'sp_endDate',
'meta_value' => date("Y/m/d"),
'meta_compare' => '>=',
'orderby' => 'meta_value',
'order' => 'ASC',
'fields' => 'ids'
);
// Get promotions using the arguments outlined above.
$ongoing_promotions = get_posts( $ongoing_args );
$current_promotions = get_posts( $current_args );
// Merge arrays
$all_promotions = array_merge( $ongoing_promotions, $current_promotions );
$args = array(
'post__in' => $promotion_ids,
'numberposts' => 5,
'post_status' => 'publish'
);
$all_query = new WP_Query($args);
if($all_query->have_posts()){
while($all_query->have_posts()){
$all_query->the_post();
//loop stuff here
}
}