web-dev-qa-db-ja.com

注目の投稿を2ページ目に隠す

私は特集記事と他の記事の数と一番下の標準的なwp_pagenaviでindex.phpを持っています。

私はこのように wordpressコーデックス からの2つのループを使っています。

<?php $my_query = new WP_Query('category_name=featured&posts_per_page=1');
while ($my_query->have_posts()) : $my_query->the_post();
$do_not_duplicate = $post->ID;?>
  <!-- Do stuff... -->
<?php endwhile; ?>
  <!-- Do other stuff... -->
<?php if (have_posts()) : while (have_posts()) : the_post(); 
if( $post->ID == $do_not_duplicate ) continue; ?>
 <!-- Do stuff... -->
<?php endwhile; endif; ?>

テーマの階層を正しく読んだ場合は、ページ区切りセクションの[前へ]をクリックするときにarchive.phpページを使用する必要があります。

ただし、そうではありません。前へをクリックすると、index.phpと同じレイアウトのページが表示され、同じ機能の投稿が表示されます。 (他の記事のページネーションはうまくいきますが)

私はis_pagedをめちゃくちゃにしていましたが、うまく動かせませんでした...助けてくれてありがとう!

1
Jan Henckens

要するに、いいえ - 使用されるテンプレートはクエリに基づいており、ページネーションを行うときは、基本的に同じクエリを繰り返しますが、異なるページに対して使用します。一般にテンプレートは同じになります。

archive.phpはほとんどのクエリに使用することができますが、望ましいテンプレート(カテゴリテンプレート、タグテンプレート、作成者テンプレートなど)がしばしば存在します。何が望ましいかは、 テンプレートの階層構造 によって決まります。ただし、ホームページではindex.phpがよく使用され、テンプレートはページ区切り付きで保持されます。

「ページ1」に表示されているものだけを表示するには、次の方法を試してください。

<?php 
 //initialize $do_not_duplicate
 $do_not_duplicate=0;
 //is_paged returns true if we are on page 2,3,...
 if(!is_paged()):
      //Get featured content for page 1
      $my_query = new WP_Query('category_name=featured&posts_per_page=1');
      while ($my_query->have_posts()) : $my_query->the_post();
           $do_not_duplicate = $post->ID;
           //Do stuff...
      endwhile;
 endif;

 //Display rest of content
 if (have_posts()) : 
    while (have_posts()) : the_post(); 
         if( $post->ID == $do_not_duplicate ) continue;
         //Do stuff
    endwhile; 
  endif; 
 ?>

テストされていません

1
Stephen Harris

is_pagedは、リストに複数のページがあるかどうかを表すブール関数です。

必要なものは$wp_query->query_vars['paged']です。注目の投稿コードを、で囲みます。

global $wp_query;
if ( !isset($wp_query->query_vars['paged']) || $wp_query->query_vars['paged'] == 1 ) :
# Featured post code
endif;

私はそれがあなたのためにトリックをすると思います。

0
Matthew Boynes

簡単:これにはWPがたくさん参加しました。直接配列/オブジェクトアクセスは必要ありません。

// Before the loop
$paged = get_query_var( 'paged' );

// In the loop
if ( 
    ( ! isset( $paged )  OR ! $paged )
    AND is_sticky( get_the_ID() )
{
    // do stuff
}
0
kaiser

カスタム関数にこの条件文を追加してください。

if ( is_home() && get_query_var( 'paged' ) >= 2 ) 
0
Brad Dalton