Pages_Links()在earch.php中不能正常工作吗?

时间:2012-09-01 作者:mathiregister

我在搜索中使用这个。php模板…

<div class="pagination">
    <?php echo get_pagination_links(); ?>
</div>
这是函数…

function get_pagination_links() {
    global $wp_query;
    $big = 999999999;

    return paginate_links( array(
        \'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) ),
        \'format\' => \'?paged=%#%\',
        \'current\' => max( 1, get_query_var(\'paged\') ),
        \'total\' => $wp_query->max_num_pages,
        \'prev_next\'    => false
    ) );
}
-

输出有效:如果我搜索“test”,结果超过10个,分页显示1 2 哪里2 是一个链接。单击页面时2 地址栏正确更新为mysite.com/search/test/page/2 但生成的页面仍然是数字1.

仍有与页码相同的结果1 分页链接仍然相同-2 仍然是链接和1 是当前页。

你知道为什么会这样吗?

Update

以下是在模板中调用自定义函数的位置:

<?php
/**
 * The template for displaying Search Results pages
 */

get_header(); ?>

<?php if ( have_posts() ) : ?>
    <hgroup class="section-heading wrapper">
        <h1>Results</h1>
    </hgroup>

    <section id="results">
        <?php while ( have_posts() ) : the_post(); ?>
            <ul class="event-items">
                <?php get_template_part( \'inc/search\', \'result\' ); ?>
            </ul>
        <?php endwhile; ?>
    </section>

    <div class="pagination tiny wrapper">
        <?php echo get_pagination_links(); ?>
    </div>

    <?php else : ?>
        <div class="wrapper">
            <h2>Nothing found</h2>
        </div>
<?php endif; ?>

<?php get_footer(); ?>
使用以下答案中的推荐代码编辑:

/**
 * Pagination links for search and archives
 */

function get_pagination_links() {
    global $wp_query;
    $wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;
    $big = 999999999;

    return paginate_links( array(
        \'base\' => @add_query_arg(\'paged\',\'%#%\'),
        \'format\' => \'?paged=%#%\',
        \'current\' => $current,
        \'total\' => $wp_query->max_num_pages,
        \'prev_next\'    => false
    ) );
}
分页现在正在工作,但是“永久链接”并不是我想要的那样。我使用custom_pagination_base() 要拥有此permalink结构:

  • mypage.com/search/term/seite/2 (其中seite是德语中page的单词)

    • mypage.com/search/term?paged=2

2 个回复
最合适的回答,由SO网友:Chip Bennett 整理而成

我很肯定其他地方也回答了这个问题,但我会在这里再补充一次。

我认为你的问题在于:

\'current\' => max( 1, get_query_var(\'paged\') ),
请尝试以下操作:

global $wp_query;
$wp_query->query_vars[\'paged\'] > 1 ? $current = $wp_query->query_vars[\'paged\'] : $current = 1;
。。。然后:

\'current\' => $current;
您的\'base\' 也可能是一个问题。而不是这样:

$big = 999999999;
//...
\'base\' => str_replace( $big, \'%#%\', esc_url( get_pagenum_link( $big ) ) )
我用这个:

\'base\' => @add_query_arg(\'paged\',\'%#%\')
如果有帮助,请编辑paginate_links() 包装函数:

/**
 * Paginate Archive Index Page Links
 */
function oenology_get_paginate_archive_page_links( $type = \'plain\', $endsize = 1, $midsize = 1 ) {
    global $wp_query, $wp_rewrite;  
    $current = get_query_var( \'paged\' ) > 1 ? get_query_var(\'paged\') : 1;

    // Sanitize input argument values
    if ( ! in_array( $type, array( \'plain\', \'list\', \'array\' ) ) ) $type = \'plain\';
    $endsize = absint( $endsize );
    $midsize = absint( $midsize );

    // Setup argument array for paginate_links()
    $pagination = array(
        \'base\'      => @add_query_arg( \'paged\', \'%#%\' ),
        \'format\'    => \'\',
        \'total\'     => $wp_query->max_num_pages,
        \'current\'   => $current,
        \'show_all\'  => false,
        \'end_size\'  => $endsize,
        \'mid_size\'  => $midsize,
        \'type\'      => $type,
        \'prev_text\' => \'&lt;&lt;\',
        \'next_text\' => \'&gt;&gt;\'
    );

    if ( $wp_rewrite->using_permalinks() )
        $pagination[\'base\'] = user_trailingslashit( trailingslashit( remove_query_arg( \'s\', get_pagenum_link( 1 ) ) ).\'page/%#%/\', \'paged\' );

    if ( ! empty( $wp_query->query_vars[\'s\'] ) )
        $pagination[\'add_args\'] = array( \'s\' => get_query_var( \'s\' ) );

    return paginate_links( $pagination );
}

SO网友:Craig Pearson

虽然这不是一个使用精确代码的解决方案,但您可以尝试使用this 分页技术与您在WordPress编解码器中使用的示例相反

我猜,问题在于您使用以下代码行获取模板部分:

<?php get_template_part( \'inc/search\', \'result\' ); ?>
如果这不能解决您的问题,我会考虑将“inc/search”中的内容包含在您的搜索结果页面中,而不使用<?php get_template_part(); ?> - 它可能会帮助你发现任何奇怪的东西

结束

相关推荐

只在本地主机上运行的Functions.php代码?

我想在函数中运行add\\u操作。仅当主题是从我的localhost开发站点加载时才使用php。如何使其仅在本地主机上运行?function livereload(){ ?> // mycode <?php } add_action(\'headway_body_close\', \'livereload\');