<?php $myposts = query_posts(array('post_type' => array( 'post'),'posts_per_page' => 3,)); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php if(has_post_thumbnail()) { echo the_post_thumbnail(); } ?>
<div class="article">
<div class="h3 index_news_title"><div class="index_news_day"><?php the_time('Y') ?>.<?php the_time('m') ?>.<?php the_time('d') ?></div><div class="index_news_text"><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></div></div>
<p><?php echo mb_substr(strip_tags($post-> post_content), 0, 100); ?>....</p>
</div>
<?php endwhile; ?>
<?php else : ?>
<?php endif; ?>
このように修正したら、先頭に固定はできたのですが、newsというカテゴリで表示ができなくなってしまいました。
ニュース記事をindexに3件表示させているのですが、その際特定の記事を先頭に固定できずに困っています。
これはつまり、投稿画面で「この投稿を先頭に固定表示」にチェックを入れたものが1件目、
それ以外に新しいものをあと2件、という意味でしょうか?
・ニュースカテゴリーの固定記事
・ニュースカテゴリーの最近記事
・ニュースカテゴリーの最近記事
また、「この投稿を先頭に固定表示」にチェックを入れた記事が仮に2件ある場合は、
・ニュースカテゴリーの固定記事
・ニュースカテゴリーの固定記事
・ニュースカテゴリーの最近記事
という感じで3件表示したい、という意味でしょうか?
ニュース記事をindexに3件表示させている
query_postsで指定しているので、大丈夫
↓
index.phpのこの3件表示部分以外がどうなっているかにもよりますが、
条件によってはquery_postsでなくWP_Queryを使ったほうがいいかもかもしれません。
ちょっと今でてるだけの情報ではなんともアドバイスしづらいので、
index.php内の、問題の3件表示したい部分以外も含めて完成形がどういう表示になって欲しいのか書き添えてもらえますか?
RESありがとうございます。
説明不足失礼しました。
表示としては、投稿画面で「この投稿を先頭に固定表示」にチェックを入れたものが1件目、
それ以外に新しいものをあと2件を表示したいのです。
ご教授頂けると助かります。
できればお使いのテーマが何か、などの基本的な情報もください。回答が変わってくる可能性があるので。
必読→ http://ja.forums.wordpress.org/topic/13?replies=1
—–
そもそもの仕様として、「この投稿を先頭に固定表示」の設定は何も手を加えていない全ての投稿一覧では有効ですが、カテゴリーアーカイブではききません。
※詳しくは以下のスレッドを。
query_postsで表示条件を特定のカテゴリーに絞ってしまうと、お望みの表示にならなくなります。
そこで発想を変える必要があります。
たとえば、
- まず「この投稿を先頭に固定表示」したものの中から1件表示
- 次に、「newsカテゴリー」内の通常の投稿の中から最新の2件を表示
という風に、2つに分けて取得するというのではいかがでしょう。
ここでもう少し仕様を確認したいんですが、
- 「この投稿を先頭に固定表示」したものが2つ以上になった時はどうしたいですか?
- 「この投稿を先頭に固定表示」したい投稿は「newsカテゴリー」のものだけでOKですか?
ここまでお答えください。
具体的な実装方法は今検証してますので。
——
もうひとつ言うとindex.phpは、archive.phpやその他あてはまるテンプレートファイルがなかった場合、最後に適用されるファイル(最後の砦)なのでquery_postsなどで表示設定をいじらないほうがいいです。テンプレが足りなかった場合おかしなことになる可能性があるので。(どのカテゴリーを開いてもニュース記事3件表示されるなど)
ブログのトップページで使いたいならindex.phpをコピーしてhome.phpとか作ったほうがいいです。
RESありがとうございます。
まず、テーマですが、オリジナルで作成しているテーマで、テンプレートで利用しているモノはありません。
また、
1. まず「この投稿を先頭に固定表示」したものの中から1件表示
2. 次に、「newsカテゴリー」内の通常の投稿の中から最新の2件を表示
このような表示できるのであれば、全然問題ありません。
おそらくはnewsカテゴリのみの特定の記事だけをトップに持っていきたいので・・・
ただ、これだと固定ページがないと最新2件しか表示されない可能性がありますよね?
それだとちょっと問題があるかも知れないです。
また、
・「この投稿を先頭に固定表示」したものが2つ以上になった時はどうしたいですか?
に関しては、固定表示は常に一つと考えています。
・「この投稿を先頭に固定表示」したい投稿は「newsカテゴリー」のものだけでOKですか?
newsカテゴリのみです。
以上、index.phpとhome.phpの関係、なるほどその通りですね。
ちょっとその辺の実装を考え直してみます。
以上、よろしくお願いします。
あまりスマートじゃないかもしれませんが、以下を試してみてください。
$query01で固定表示の1件を、$query02で残りの2件を表示しています。
<?php //先頭に表示するnews1件を取得
// The Query
$query01 = new WP_Query( array(
'category_name' => 'news',
'post__in' => get_option('sticky_posts'),
'posts_per_page' => 1
));
// The Loop
if ( $query01->have_posts() ):
while ( $query01->have_posts() ):
$query01->the_post(); ?>
<?php if(has_post_thumbnail()) { echo the_post_thumbnail(); } ?>
<div class="article">
<div class="h3 index_news_title">
<div class="index_news_day"><?php the_time('Y.m.d') ?></div>
<div class="index_news_text"><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></div>
</div>
<p><?php echo mb_substr(strip_tags($post->post_content), 0, 100); ?>....</p>
</div>
<?php endwhile;
endif;
wp_reset_query(); ?>
<?php //その後のnews2件を取得
// The Query
$query02 = new WP_Query( array(
'category_name' => 'news',
'ignore_sticky_posts' => 1,
'posts_per_page' => 2
));
// The Loop
if ( $query02->have_posts() ) :
while ( $query02->have_posts() ):
$query02->the_post(); ?>
<?php if(has_post_thumbnail()) { echo the_post_thumbnail(); } ?>
<div class="article">
<div class="h3 index_news_title">
<div class="index_news_day"><?php the_time('Y.m.d') ?></div>
<div class="index_news_text"><a href="<?php the_permalink() ?>" title="<?php the_title_attribute(); ?>"><?php the_title(); ?></a></div>
</div>
<p><?php echo mb_substr(strip_tags($post->post_content), 0, 100); ?>....</p>
</div>
<?php endwhile;
endif;
wp_reset_query(); ?>
おそらくはnewsカテゴリのみの特定の記事だけをトップに持っていきたいので・・・
ただ、これだと固定ページがないと最新2件しか表示されない可能性がありますよね?
それだとちょっと問題があるかも知れないです。
if分岐を追記して、
先頭固定された記事があるか判定
↓
あれば表示して次へ | なければ次へ
↓
先頭固定された記事があったなら残り2件を表示|なかったなら3件表示
という感じでやれないこともないと思います。そのへんはご自身でよしなに。
##補足
<?php the_time('Y') ?>.<?php the_time('m') ?>.<?php the_time('d') ?>
なんか煩わしかったので以下に変えました。
↓
<?php the_time('Y.m.d') ?>
RESありがとうございます。
コードの方、試させて頂きます。
色々お手数おかけしました。