質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.77%

wordpress 記事全部表示ページ

受付中

回答 3

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 4,216

score 15

Wordpressでテーマを自作しています。

縦長系のデザインをしたテーマを作っています。
Index.phpには最新5件のお知らせを(Post)を表示されるようにしました。

<?php query_posts('posts_per_page=5'); ?>

を使用しました。

投稿が5件以上言った場合、(過去の記事はこちら)というリンクを表示させて、
Index.phpとは別に記事全部が表示されるページを作成したいと思っています。

Index.phpにnext_posts_link()を利用すると縦長デザインのため非常に見づらくなってしまいます。

質問です。
1 記事全部を表示さるページはアーカイブページとして作成すればいいのでしょうか?
アーカイブの場合、Indexからアーカイブに飛ぶにはリンクには何て書けばいいのでしょうか?(プログラム)
(もしかしたら私がアーカイブページの意味を誤認識してる場合もあります。)

2 投稿が5件以上の場合のみ、(過去の記事はこちら)のリンクを表示させるにはどのような条件分岐を使えばいいでしょうか?

※記事全部が表示されるページにはnext_posts_link()を使用しようと思っています。

以上です。説明がわかりづらくてすみません。
もし解る方いましたら解答宜しくお願い致します。
説明不足がありましたら返信しますので解答にお願いします。

追記
イメージはこのような形です。
参考にしたサイト

Indexにはニュースが5件、See All で全てのページに飛ばす。

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • 8-0_nyan5

    2017/08/12 09:36

    「記事全部のページ」と「最新5件のお知らせを(Post)を表示」どちらもページ分けするのなら、その違いがよくわからないのですが?

    キャンセル

回答 3

0

【1,アーカイブページの作成】
2通りの方法があります。

《その①》

1, 下記をfunctions.phpのどこかへ記述

function post_archive( $args, $post_type ) {
  if ( 'post' == $post_type ) {
    $args['rewrite'] = true;
    $args['has_archive'] = 'news-list';
  }
  return $args;
}
add_filter( 'register_post_type_args', 'post_archive', 10, 2 );

2, 設定>パーマリンク>何も変更せずに保存をクリック
http://〇〇/news-list/ へアクセス。ここがアーカイブページになります。

3, archive.phpというファイルを作成

archive.phpの中身はこのような感じで。

<?php get_header(); ?>

<?php if(have_posts()): ?>
<?php while(have_posts()): the_post(); ?>

<!-- ここはテンプレートに合わせてください。 -->
<article>
<?php the_post_thumbnail(); ?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
</article>

<?php endwhile; ?>
<?php else: ?>
<p>記事がありません。</p>
<?php endif; ?>

<?php next_posts_link(); ?>

<?php get_footer(); ?>

続きは分けて書きます。。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

《アーカイブの作り方その②》

1, 固定ページを作成(URLのスラッグは例として「news-list」とします)

2, page-news-list.php というファイルを作成
page-news-list.phpの中身はこんな感じにします。

<?php get_header(); ?>

<?php
$paged = (get_query_var('paged'))?get_query_var('paged'):1;
$news_query = new WP_Query(array(
    'post_type' => 'post', 
    'posts_per_page' => -1,
    'paged' => $paged 
));
?>

<?php if ($news_query->have_posts()): ?>
<?php while($news_query->have_posts()): $news_query->the_post(); ?>

<!-- ここはテンプレートに合わせてください。 -->
<article>
<?php the_post_thumbnail(); ?>
<h3><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></h3>
</article>

<?php endwhile; wp_reset_postdata(); ?>
<?php else: ?>
<p>記事がありません。</p>
<?php endif; ?>

<?php next_posts_link(); ?>

<?php get_footer(); ?>

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

【2, トップページで5件以上ならばmoreボタン】

私はこういったコードで書きます。

<?php if ( get_next_posts_link() ): ?>
   <a href="<?php echo home_url(); ?>/news-list/">過去の記事はこちら</a>
<?php endif; ?>

「5件以上なら...」ではなく、「次のページがあれば...」という意味のコードになります。
つまり結果的に「5件以上ならば」と同じ意味になります。

【query_postsについて】
トップページでの件数制御に「query_posts」を使われているとのことですが、query_postsはメインクエリを変更してしまう上、パフォーマンスも悪く、WordPressも公式に非推奨としていますので削除して下さい。

代わりに、pre_gets_postで制御しましょう。

pre_gets_postはfunctions.phpのどこかに記述して下さい。

//トップ新着記事のループ制御
function pre_get_posts_top($query) {
  if( is_admin() || ! $query->is_main_query() ){
      return;
  }

  if ( $query->is_home() ) { //トップページのみ
      $query->set( 'posts_per_page', '5' ); //件数制御
      return;
  }
}
add_action( 'pre_get_posts', 'pre_get_posts_top' );

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.77%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

同じタグがついた質問を見る