• Buenas noches.

    Necestio mostrar en la home page un listado de 8 entradas entre las cuales se encuentren 2 de las últimas. Pero la dificultad está en que el resto de las 6 deben ser random.

    El efecto que quiero conseguir es que se muestren 8 entradas RANDOM, pero siempre dentro de estas se encuentren las 2 últimas (en las más nuevas muestro un cartel de «nuevo», eso ya está resuelto).

    ¿Alguna pista de cómo conseguir un query que integre los dos criterios y no duplique entradas?

    El sitio es este http://www.genocidioarmenio.org/inicio/
    Y lo que quiero lograr es algo así: http://www.genocidioarmenio.org/wp-content/uploads/nuevos-posts.jpg

    ¡Gracias!

Viendo 1 respuesta (de un total de 1)
  • Iniciador del debate Martín

    (@suberek)

    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:


    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);


    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);


    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 );


    Uno los dos array y mezclo todo

    $array_posts = array_merge($array_posts_nuevos[0],$array_posts_viejos);
    shuffle($array_posts);


    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;
    }
Viendo 1 respuesta (de un total de 1)
  • El debate ‘Mostrar recientes y últimas’ está cerrado a nuevas respuestas.