【问题标题】:Pagination links above posts in WordpressWordpress 中帖子上方的分页链接
【发布时间】:2016-01-10 07:14:31
【问题描述】:

我想在 wordpress 博客页面上的帖子上方添加分页,我应该将代码放在哪里? 我正在使用:

<?php
$big = 999999999; // need an unlikely integer
echo paginate_links( array( ..parameters here.. ) );
?> 

和一个自定义循环。如果我把它放在循环下面它工作正常,如果我把它放在循环上面它就不会出现。有解决办法吗?

我的 lopp 看起来像:

<?
$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;   
$args = array(
    'paged' => $paged,
    'posts_per_page'=>12,
    'orderby' => 'meta_value_num',
    'order' => 'DSC',
    'pagination' => 'true',
    'cat' => '2'
);

$the_query = new WP_Query( $args );
     if ( $the_query->have_posts() ) {
        while ( $the_query->have_posts() ) { 
?>  
<?php $the_query->the_post(); ?>
<li id="post-<?php the_ID(); ?>"> ...</li> ....   

【问题讨论】:

标签: wordpress pagination


【解决方案1】:

试试这个:

我在while循环之前添加了paginate_links函数。并在paginate_links->'total'参数中添加了$the_query

$paged = ( get_query_var( 'paged' ) ) ? get_query_var( 'paged' ) : 1;   
$args = array(
    'paged' => $paged,
    'posts_per_page'=>2,
    'post_type'=>'post'        
);

    $the_query = new WP_Query( $args );
     if ( $the_query->have_posts() ) 
     {       
        $big = 999999999; 
        echo paginate_links( array(
        'base' => str_replace( $big, '%#%', esc_url( get_pagenum_link( $big ) ) ),
        'format' => '?paged=%#%',
        'current' => max( 1, get_query_var('paged') ),
        'total' => $the_query->max_num_pages
        ) );         

        while ( $the_query->have_posts() ) 
        { 
            $the_query->the_post(); 
            echo $post->ID;
        }
    }   

【讨论】:

  • 感谢您的回复,我无法使这个示例工作,但最后我通过使用 query_posts 而不是 WP_query 解决了我的问题。可能不是最有效的解决方案,但不知何故,放在 args 和循环之间的分页代码现在可以正常工作了。
  • 很高兴找到您的解决方案。但请在给定的 url wordpress.stackexchange.com/questions/1753/… 中查看解决方案
  • 那里有很好的解释,谢谢。看起来我应该回到 WP_Query,但我无法让 paginate_links() 工作。
【解决方案2】:

我建议你在循环之前和之后使用自定义钩子,如果可能的话,这将帮助你做类似下面的代码,可以在woocommerce中使用,但如果你不使用woocommerce,你需要在循环之前和之后定义你的 CUSTOM HOOKS,来做这样的事情。您已尝试覆盖模板,如果您遵循我的建议,那么您还需要在模板中添加钩子,所以我建议如果可能的话尝试通过覆盖模板在模板中执行此操作,或者最好仅在 @987654323 中执行此操作@ 无需修改模板。但是现在,我可以建议您这样做。

remove_action( 'woocommerce_after_shop_loop', 'woocommerce_pagination', 10 );
add_action( 'woocommerce_before_shop_loop', 'woocommerce_pagination', 10 );
function woocommerce_pagination(){
  echo '<nav class="woocommerce-pagination">'; ?>
  <?php
    echo paginate_links( apply_filters( 'woocommerce_pagination_args', array(
      'base'        => str_replace( 999999999, '%#%', get_pagenum_link( 999999999 ) ),
      'format'      => '',
      'current'     => max( 1, get_query_var('paged') ),
      'total'       => $wp_query->max_num_pages,
      'prev_text'   => '&larr;',
      'next_text'   => '&rarr;',
      'type'        => 'list',
      'end_size'        => 3,
      'mid_size'        => 3
    ) ) );

【讨论】:

  • 感谢您的回复,但我无法完成这项工作,因为我没有使用钩子的经验
  • 嘿,不要使用query_post,那是更改主查询,最好使用pre_get_postsget_post,您只需将此代码放在functions.php中即可。跨度>
  • 那么$the_query = new WP_Query( $args ); 像我以前那样呢?没事吧?
  • @yennefer yeh ,你可以这样做,但记得使用 wp_reset_query();就在循环之后重置查询。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 2013-01-23
相关资源
最近更新 更多