web-dev-qa-db-ja.com

ページ上のページとは異なるホームページ上の投稿数

私はこことグーグルでいくつかの検索をしました、しかし私が見つけるすべては正しく働いていません。私は自分のコードをここに投稿して、私がうまくいかないところで助けを得ることを望んでいました。

私のサイトのインデックスページで、私は他の投稿とは異なるレイアウトを持つ「注目の」投稿を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
2

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
curtismchale

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 フィルタをチェックすることをお勧めします。

2
Johannes Pille