使用分页在Single.php内创建自定义循环

时间:2016-04-28 作者:Jabel Márquez

我想在single-ediciones.php 文件和我需要分页(实际上是AJAX分页)。

我需要我的普通循环,因为我需要显示CPT“指令”的一些数据,我需要一个自定义循环,以通过ID显示与当前CPT相关的一些CPT。

实际上,我不知道是否可能有一个普通的循环,并且在一个带有分页的自定义循环中。

现在我可以拿到"ALL_THE_URL/page/2" 工作,但不分页。甚至使用new WP_Query 并添加get_next_posts_link( \'Older Entries\', $the_query->max_num_pages );.

<?php if ( have_posts() ) :
    while( have_posts() ) : the_post();
        $edicion_ID = get_the_ID();
        $edicion_titulo = get_the_title();
        $edicion_titulo = strtolower($edicion_titulo); ?>
        <div class="container ediciones-detalle-contenedor">
            <div class="row">
                <div class="col-md-4 col-md-push-8 col-sm-4 col-sm-push-8">
                    <h3><?php echo $edicion_titulo; ?></h3>
               </div>

               <div class="col-md-8 col-md-pull-4 col-sm-8 col-sm-pull-4">
                   <div class="row">
                        <?php 
                        $paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;
                        $args = array(
                            \'numberposts\'   => 4,
                            \'post_type\'     => array(\'temas\', \'perfiles\', \'udem-mundo\', \'deportes\', \'cultura\'),
                            \'meta_query\'    => array(
                                \'relation\'      => \'AND\',
                                array(
                                    \'key\'       => \'contenido_relacionado_impreso\',
                                    \'value\'     => \'si\',
                                    \'compare\'   => \'=\',
                                ),
                                array(
                                    \'key\'       => \'contenido_relacionado_edicion\',
                                    \'value\'     => $edicion_ID,
                                    \'compare\'   => \'=\',
                                ),
                            ),
                            \'paged\'         => $paged,
                        );

                        $posts_relacionados_edicion = get_posts($args);
                        if ( !empty($posts_relacionados_edicion) ) :
                            foreach ($posts_relacionados_edicion as $post) : setup_postdata( $post ); ?>
                                <div class="col-md-6 col-sm-6">
                                    <a href="<?php the_permalink(); ?>" class="blog-titulo-chico"><h3><?php the_title(); ?></h3></a>
                                </div>
                            <?php endforeach;
                            wp_reset_postdata();
                        endif; ?>
                    </div>
                </div>
            </div>
        </div>
    <?php endwhile;
endif; ?>

1 个回复
最合适的回答,由SO网友:cybmeta 整理而成

据我所知,get_posts() 函数不能用于分页结果。它旨在获取一系列帖子和it sets no_found_rows to true by default from WP 3.1. 除非将分页设置为false,或者更好地使用WP\\u Query,否则分页将无法工作。

numberposts 也是无效参数。

$paged = ( get_query_var( \'page\' ) ) ? get_query_var( \'page\' ) : 1;

$args = array(
    \'posts_per_page\'   => 4,
    \'post_type\'       => array(\'temas\', \'perfiles\', \'udem-mundo\', \'deportes\', \'cultura\'),
    \'meta_query\'    => array(
        \'relation\'      => \'AND\',
         array(
            \'key\'       => \'contenido_relacionado_impreso\',
            \'value\'     => \'si\',
            \'compare\'   => \'=\',
         ),
         array(
             \'key\'       => \'contenido_relacionado_edicion\',
             \'value\'     => $edicion_ID,
             \'compare\'   => \'=\',
         ),
     ),
     \'paged\'         => $paged,
 );

 $posts_relacionados_edicion = new WP_Query( $args );

 if ( $posts_relacionados_edicion->have_posts() ) :

     while( $posts_relacionados_edicion->have_posts() ) :

         $posts_relacionados_edicion->the_post(); ?>

         <div class="col-md-6 col-sm-6">
                 <a href="<?php the_permalink(); ?>" class="blog-titulo-chico"><h3><?php the_title(); ?></h3></a>
              </div>

      <?php endwhile;

      echo paginate_links( array(
          \'current\' => $paged,
          \'total\' => $posts_relacionados_edicion->max_num_pages,
          \'format\' => \'?page=%#%\'
      ) );

       wp_reset_postdata();

  else : ?>

     <?php _e( \'No found posts.\', \'textdomain\' ); ?>

  <?php endif; ?>
上面的代码以以下格式生成分页链接example.com/{post-name}/{page-number} 它似乎正在发挥作用。

下一段代码以以下格式生成分页链接example.com/{post-name}/page/{page-number}, 但它们被重定向到example.com/{post-name}/ 并使分页不起作用。如果您想使用URL,如example.com/{post-name}/page/{page-number}:

$paged = ( get_query_var( \'paged\' ) ) ? get_query_var( \'paged\' ) : 1;

$args = array(
    \'posts_per_page\'   => 4,
    \'post_type\'       => array(\'temas\', \'perfiles\', \'udem-mundo\', \'deportes\', \'cultura\'),
    \'meta_query\'    => array(
        \'relation\'      => \'AND\',
         array(
            \'key\'       => \'contenido_relacionado_impreso\',
            \'value\'     => \'si\',
            \'compare\'   => \'=\',
         ),
         array(
             \'key\'       => \'contenido_relacionado_edicion\',
             \'value\'     => $edicion_ID,
             \'compare\'   => \'=\',
         ),
     ),
     \'paged\'         => $paged,
 );

 $posts_relacionados_edicion = new WP_Query( $args );

 if ( $posts_relacionados_edicion->have_posts() ) :

     while( $posts_relacionados_edicion->have_posts() ) :

         $posts_relacionados_edicion->the_post(); ?>

         <div class="col-md-6 col-sm-6">
                 <a href="<?php the_permalink(); ?>" class="blog-titulo-chico"><h3><?php the_title(); ?></h3></a>
              </div>

      <?php endwhile;

      echo paginate_links( array(
          \'current\' => $paged,
          \'total\' => $posts_relacionados_edicion->max_num_pages
      ) );

       wp_reset_postdata();

  else : ?>

     <?php _e( \'No found posts.\', \'textdomain\' ); ?>

  <?php endif; ?>
也可以构建自己的分页端点:

$paged = ( get_query_var( \'my_page\' ) ) ? get_query_var( \'my_page\' ) : 1;

$args = array(
    \'posts_per_page\'   => 4,
    \'post_type\'       => array(\'post\'),
    \'paged\'         => $paged,
 );

 $posts_relacionados_edicion = new WP_Query( $args );

 if ( $posts_relacionados_edicion->have_posts() ) :

     while( $posts_relacionados_edicion->have_posts() ) :

         $posts_relacionados_edicion->the_post(); ?>

         <div class="col-md-6 col-sm-6">
                 <a href="<?php the_permalink(); ?>" class="blog-titulo-chico"><h3><?php the_title(); ?></h3></a>
              </div>

      <?php endwhile;

      echo paginate_links( array(
          \'current\' => $paged,
          \'total\' =>  $posts_relacionados_edicion->max_num_pages,
          \'format\' => \'?my_page=%#%\'
      ) );

       wp_reset_postdata();

  else : ?>

     <?php _e( \'No found posts.\', \'textdomain\' ); ?>

  <?php endif; ?>
与重写标记结合使用:

add_action(\'init\', function() {
    add_rewrite_tag( \'my_page\', \'([0-9]+)\' );
} );

相关推荐

Add pagination to WP_Query

我试图在下面的代码中添加分页,但不知道如何与之集成。请帮忙在帖子上找到页码。<?php $child_query = new WP_Query(array(\'post_type\' => \'blogpost\', \'orderby\' => \'date\', \'order\' => \'DESC\')); while ( $child_query->ha