私はこことグーグルでいくつかの検索をしました、しかし私が見つけるすべては正しく働いていません。私は自分のコードをここに投稿して、私がうまくいかないところで助けを得ることを望んでいました。
私のサイトのインデックスページで、私は他の投稿とは異なるレイアウトを持つ「注目の」投稿を1つ持っています。次のページをクリックすると、そのおすすめの投稿が消えて、投稿数が不均等になり、均等な投稿数が必要になります。これが私が見つけて喜んで実装しようとしたコードです。
私は次のクエリを使用しています(他のすべてはカウントコード以下で同じです)。
<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
query_posts("paged=$page&posts_per_page=10");
?>
これは私が使用できるようにしたいコードです。
<?php
$page = (get_query_var('paged')) ? get_query_var('paged') : 1;
$page_num = $paged;
if ($pagenum='') $pagenum = 1;
if ($pagenum > 1) { $post_num = 10 } else { $post_num = 9 }
query_posts('showposts='.$post_num.'&paged='.$page_num); `
?>
これは、ページの他の部分でも同じです。
<?php $count = 1; ?>
<?php while (have_posts()) : the_post(); ?>
<?php if ((!is_paged()) && ($count == 1 )){ ?>
// FEATURED HTML HERE
<?php } else { ?>
// REGULAR HTML HERE
<?php } $count++; ?>
<?php endwhile; ?>
// PAGINATION HERE
pre_get_posts
フィルタを使うべきです。設定に応じて! is_front_page
または! is_home
でホームページを除外することができます。
/**
* Changes the number of posts per page if not is_home
*
* @author SFNdesign, Curtis McHale
*/
function wptt_change_posts_on_page( $query ) {
if ( ! is_home() && $query->is_main_query() ) {
$query->set( 'posts_per_page', '10' );
}
}
add_action( 'pre_get_posts', 'wptt_change_posts_on_page' );
私が言ったように、あなたはあなたのテーマがどのように設定されているかに応じて! is_front_page
を使う必要があるかもしれません。これらの条件に関する詳細を説明した良いブログ記事があります。
http://wpthemetutorial.com/2011/12/12/clearing-up-confusion-about-is_home-and-is_front_page/
ああ、決してquery_posts
を使ってはいけません。 https://developer.wordpress.com/2012/05/14/querying-posts-without-query_posts/
2番目のスニペットで思いついた論理は理にかなっています。それにもかかわらず、あなたのコードにはいくつか問題があります。
一つには、$pagenum
変数は冗長であり、あなたはそれを必要としません。別の方法として、get_query_var()
の戻り値を$page
に代入してから、次の行で$paged
を使用します - それを同じにします。次のようにしてください。
$paged = (get_query_var('paged')) ? get_query_var('paged') : 1;
$post_num = ($paged > 1) ? 10 : 9;
// query for posts
さらに、マークアップスニペット(3番目の質問)では、$count
は必要ありません。$paged
を使用することもできます。余談として、そして完全を期すために、私はそれほど多くのphp開始タグと終了タグを使用しませんが、それは好みの問題であり、あなたのコードの機能性に影響を与えません。
もう1つ:これがあなたのメインループでない限り、WP_Query
の代わりに query_posts
クラスを使うべきです。もしそうなら、query_posts
の使い方はそれほど間違っていませんが、代わりに pre_get_posts
フィルタをチェックすることをお勧めします。