私はこれを私のsearch.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
は現在のページです。
なぜそれが起こる可能性がありますか?
アップデート
カスタム関数がテンプレート内で呼び出される場所は次のとおりです。
<?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()
を使います。
mypage.com/search/term/seite/2
(seiteはページのドイツ語の単語です)。パーマリンクをそのように機能させ続けることは可能ですか。ページ番号はあなたのコードで動作します、パーマリンクはこのようになっています:
mypage.com/search/term?paged=2
私はこれがどこか他のところで答えられると確信しています、しかし私はここでそれを再び追加します。
あなたの問題はここにあると思います。
'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' => '<<',
'next_text' => '>>'
);
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 );
}
これは正確なコードを使用した解決策ではありませんが、おそらくWordPressコーデックで使用した例とは対照的に、 this / pagination手法を使用して試すことができます。
この問題は、このコード行でテンプレート部分を取得することにあると思います。
<?php get_template_part( 'inc/search', 'result' ); ?>
これで問題が解決しない場合は、「inc/search」からコンテンツを取得して、<?php get_template_part(); ?>
を使用せずに検索結果ページに含めることを検討します。