¿Incluir publicaciones adhesivas en las publicaciones de la página?

2

Me gustaría ver 7 publicaciones en mi página de inicio. Me gustaría poder elegir manualmente esas publicaciones pegándolas.

Actualmente, tengo mis publicaciones por página configuradas en '7' en WP Admin. Sin embargo, esto no incluye las publicaciones adhesivas, ya que ahora tengo 7 publicaciones adhesivas + 7 publicaciones más recientes que se muestran con un total de 14 .

¿Cómo incluyo las publicaciones adhesivas en el número de publicaciones por página?

    
pregunta Travis Patron 03.03.2015 - 08:02

1 respuesta

5

Esto es factible, y como dije en un comentario, debes seguir los siguientes pasos

  • Consigue un recuento de la cantidad de publicaciones pegajosas. Esto se puede hacer simplemente contando get_option( 'sticky_posts' ) que contiene los ID de las publicaciones adhesivas en forma de una matriz

  • También deberías obtener la cantidad de publicaciones por página. Usted no quiere hardcode aquí. La cantidad de publicaciones por página se almacena en get_option( 'posts_per_page' ) , por lo que vas a utilizar este

  • Lo importante ahora es hacer uso de las compensaciones para recalcular la cantidad de publicaciones que se mostrarán en la página uno de la consulta principal. Según el ejemplo en el OP, si las publicaciones por página se establecen en 7 y hay 4 publicaciones fijas, solo queremos tres publicaciones de la consulta principal, y no las siete establecidas como predeterminadas del sitio. A partir de la página 2, seguiremos necesitando las 7 publicaciones normales que se muestran en la consulta principal, ya que no tendremos publicaciones adhesivas aquí

  • Sin embargo, este desplazamiento influirá en el cálculo de la propiedad $max_num_pages en la consulta principal, y eso significa que, en la mayoría de los casos, faltará la última página. Para corregir esto, necesitamos ajustar la cantidad de publicaciones encontradas, básicamente agregando nuestro desplazamiento a la cantidad real de publicaciones encontradas para corregir la cantidad de páginas. Esto se hará a través del filtro found_posts

( NOTA: Este código ahora se ha probado y está funcionando )

Aquí está la idea básica en el código:

add_action( 'pre_get_posts', function ( $q ) 
{

    if ( $q->is_main_query() && $q->is_home() ) {

        $count_stickies = count( get_option( 'sticky_posts' ) );
        $ppp = get_option( 'posts_per_page' );
        $offset = ( $count_stickies <= $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp;

        if (!$q->is_paged()) {
          $q->set('posts_per_page', ( $ppp - $offset ));
        } else {
          $offset = ( ($q->query_vars['paged']-1) * $ppp ) - $offset;
          $q->set('posts_per_page',$ppp);
          $q->set('offset',$offset);
        }

    }

});    

add_filter( 'found_posts', function ( $found_posts, $q ) 
{

    if( $q->is_main_query() && $q->is_home() ) {

        $count_stickies = count( get_option( 'sticky_posts' ) );
        $ppp = get_option( 'posts_per_page' );
        $offset = ( $count_stickies <= $ppp ) ? ( $ppp - ( $ppp - $count_stickies ) ) : $ppp;        

        $found_posts = $found_posts + $offset;
    }
    return $found_posts;

}, 10, 2 );     
    
respondido por el Pieter Goosen 03.03.2015 - 11:53

Lea otras preguntas en las etiquetas