私はページネーションに関して非常に独特のバグを抱えています:(私はスラッグ "lastest-news"を持つカテゴリのためにページごとに4の投稿を表示しようとしています。
ページ付け機能は正しく機能しているようです。 33投稿ありますページ付けは、9ページと次の形式のリンクで正しく作成されます。/ category/lastest-news/page //
おもしろいことに、1-4ページから(1ページに4つの投稿を表示します)正しく動作するということです。ただし、5〜9ページではまったく機能しません。それはテンプレートを提供するようにさえ思えません...私が見つけることができる唯一の誤りは「カテゴリLastest-news Page 5のために何も見つからない」と言っているページです。
それがまったく機能しないのであれば私は理解するでしょう、しかしランダムに4ページでそれ以上ではないのですか?
私は本当にどんな助けにでも本当に感謝するでしょう!私は4時間以上かけて何が悪いのかを突き止めようとしていて、それは私を悩ませています。
手伝ってくれてありがとう :)
私はクエリに次のコードを使用しています。
<?php
$page = get_query_var('paged');
$posts_on_page = new WP_Query("posts_per_page=4&category_name=lastest-news&paged=".$page);
//loop to display every one of 4 posts
//pagination
pagination($posts_on_page->max_num_pages);
?>
私はこの記事から改ページ機能を使っています: http://www.kriesi.at/archives/how-to-build-a-wordpress-post-pagination-without-plugin
これは関数です(これはうまくいくようです):
function pagination($pages = '', $range = 2){
$showitems = ($range * 2)+1;
global $paged;
if(empty($paged)) $paged = 1;
if($pages == '')
{
global $wp_query;
$pages = $wp_query->max_num_pages;
if(!$pages)
{
$pages = 1;
}
}
if(1 != $pages)
{
echo "<div class='pagination'>";
if($paged > 2 && $paged > $range+1 && $showitems < $pages) echo "<a href='".get_pagenum_link(1)."'>«</a>";
if($paged > 1 && $showitems < $pages) echo "<a href='".get_pagenum_link($paged - 1)."'>‹</a>";
for ($i=1; $i <= $pages; $i++)
{
if (1 != $pages &&( !($i >= $paged+$range+1 || $i <= $paged-$range-1) || $pages <= $showitems ))
{
echo ($paged == $i)? "<span class='current'>".$i."</span>":"<a href='".get_pagenum_link($i)."' class='inactive' >".$i."</a>";
}
}
if ($paged < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($paged + 1)."'>›</a>";
if ($paged < $pages-1 && $paged+$range-1 < $pages && $showitems < $pages) echo "<a href='".get_pagenum_link($pages)."'>»</a>";
echo "</div>\n";
}
}
WordPressは各ページに対して独自のクエリを実行します。新しいクエリを作成するのではなく、そのクエリを変更する必要があります。今起こることはWordPressが10のページあたりの標準の投稿で質問をするということです、しかし、あなたはこれらの結果に関して何もしないで、あなた自身の質問をします。これはうまくいきます... WordPressがページ番号4にあるポスト#33を超えるまで。
そのため、代わりにWordPressが実行する標準的なクエリをfunctions.php
またはプラグインに配置して修正する必要があります。
add_action( 'pre_get_posts', 'wpse7687_pre_get_posts' );
function wpse7687_pre_get_posts( &$wp_query ) {
if ( $wp_query->is_category && 'latest-news' == $wp_query->get_queried_object()->slug ) {
$wp_query->set( 'posts_per_page', 4 );
}
}
@ Jan Fabryの回答に基づいて、構文を少し変更しました。それはうまくいきます。説明をありがとうJan。
add_action( 'pre_get_posts', 'wpse7687_pre_get_posts' );
function wpse7687_pre_get_posts( &$wp_query ) {
if ($wp_query->query_vars['category_name'] == 'latest-news'){
$wp_query->query_vars['posts_per_page'] = 4;
}
}