Encontré una forma de hacer esto, pero pienso que alguien encontrará otra más eficiente de lograr lo mismo.
Agradeceré cualquier forma de optimizar esto.
Les dejo abajo mi trabajo:
1°
Selecciono 3 (eran 2 pero lo cambié a 3) entradas nuevas < a 1 mes en forma aleatoria. Para esto me ayudé del plugin
random-posts-within-date-range-widget
$cantidad_total = 8;
$cantidad_nuevos = 3;
$intervalo_meses = 1;
$blogcat = 15;
// parámetros del plugin
$settings['count'] = $cantidad_nuevos;
$settings['no_end'] = true;
$settings['use_relative'] = true;
$settings['relative_months'] = $intervalo_meses;
$settings['relative_days'] = 0;
$settings['relative_years'] = 0;
$settings['use_category'] = true;
$settings['category'] = $blogcat;
$random_posts = random_posts_within_date_range($settings);
2°
Guardo en un string separado por comas los ID de estos posts
Guardo los resultados en un array
$i = 0;
while ( $random_posts->have_posts() ) : $random_posts->the_post();
$array_posts_nuevos[$i] = $random_posts->posts;
$str_ids = get_the_ID() . ',' . $str_ids;
$i++;
endwhile;
// Sacamos la coma final
$str_ids = substr ( $str_ids , 0, -1 );
// Guardo cantidad encontrada
$cantidad_nuevos = count($array_posts_nuevos);
3°
Hago otro array con un random de posts aleatorios en donde excluyo los posts encontrados arrriba (para eso es el string con los IDs)
$cantidad_viejos = $cantidad_total - $cantidad_nuevos;
global $post;
$args = array(
'numberposts' => $cantidad_viejos,
'offset' => 0,
'category' => $blogcat,
'orderby' => 'rand',
'post_type' => 'post',
'exclude' => $str_ids,
'post_status' => 'publish' );
$array_posts_viejos = get_posts( $args );
4°
Uno los dos array y mezclo todo
$array_posts = array_merge($array_posts_nuevos[0],$array_posts_viejos);
shuffle($array_posts);
5°
Listo los resultados y resalto las entradas que tienen menos de un mes.
foreach( $array_posts as $post ) : setup_postdata($post);
$fecha_entrada = new DateTime(get_the_date('Y-m-d'));
$fecha_hoy = new DateTime(date('Y-m-d'));
$interval = $fecha_entrada->diff($fecha_hoy);
$dias_intervalo = $interval->format('%m');
if ($dias_intervalo <= $intervalo_meses) {
?>
<span class="nuevo">nueva entrada</span>
<?php
}
?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
<?php
endforeach;
}