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

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

新規登録して質問してみよう
ただいま回答率
85.48%
WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

Q&A

解決済

1回答

1613閲覧

【WordPress独自テーマ開発】カスタム投稿タイプでループを使って記事一覧を出力する方法について

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

WordPressは、PHPで開発されているオープンソースのブログソフトウェアです。データベース管理システムにはMySQLを用いています。フリーのブログソフトウェアの中では最も人気が高く、PHPとHTMLを使って簡単にテンプレートをカスタマイズすることができます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

ページネーション

Webアプリケーションにおいて、1ページに収まらないコンテンツを、各ページへのリンクを並べてアクセスしやすくする手法をページネーションと呼びます。

ループ

ループとは、プログラミングにおいて、条件に合致している間、複数回繰り返し実行される箇所や、その制御構造を指します

0グッド

0クリップ

投稿2021/07/25 03:05

【カスタム投稿タイプで記事一覧を出力する方法】

概要
https://dezanari.com/wordpress-cpt-archive/
上記の記事を参考にサブループとやらを使うことはわかりました、しかし、以下の内容が発生しており困惑しています。
カスタム投稿で記事一覧を出す場合は、通常のメインループの書き方で問題ないのでしょうか。
ちなみにカスタム投稿を使うプラグインは「Custom Post Type UI」を使用しております。

問題
カスタム投稿を出力するループ文が以下の記述で出てくるようになっている

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

カスタム投稿は以下のコードの感じで記述するイメージでしたが、普通のメインループ?の書き方でもカスタム投稿の記事が出るようになっているので
これは大丈夫なのか?と思いました。また、この記述で行うとarchive-blog.phpにあるページネーションが正常に動作しなくなります。(次のページにURLは飛ぶが同じ記事が出続ける)

if ( $blog_query->have_posts() ): while ( $blog_query->have_posts() ): $blog_query->the_post(); ?> コード

通常の投稿タイプのアーカイブページと、カスタム投稿のアーカイブページのコード
category.php
こちらのテンプレートファイルは、「デフォルトの投稿タイプ」の記事一覧にしようします。

<?php get_header(); ?> <main class="under__main-wrapper"> <!-- パンくずリスト --> <?php echo '<div class="breadcrumbs">' ; if(function_exists('bcn_display')){ bcn_display(); } echo '</div>'; ?> <!-- パンくずリスト --> <h2 class="under__title">Works</h2> <h3 class="under__title-ja">制作実績</h3> <!-- 制作実績一覧 --> <ul> <?php if(have_posts()): while(have_posts()): the_post(); ?> <li class="archive__item"> <?php if(has_post_thumbnail()){ the_post_thumbnail(''); } else{ echo '<img src="' . esc_url(get_template_directory_uri()) . '/img/noimg.png" alt="">'; } ?> <div class="archive__item-info"> <h4><?php the_title(); ?></h4> <p> <?php the_excerpt(); ?> </p> <a href="<?php the_permalink(); ?>" class="archive__btn">もっと見る</a> </div> </li> <?php endwhile; endif; ?> </ul> <!-- 制作実績一覧 --> <!-- ページネーション --> <div class="pagenation__list"> <?php if ( paginate_links() ) : //ページが1ページ以上あれば以下を表示 ?> <!-- pagenation --> <div class="pagenation"> <?php echo paginate_links( array( 'end_size' => 2, 'mid_size' => 0, 'prev_next' => true, 'prev_text' => '<i class="fas fa-angle-left"></i>',//FontAwesome 'next_text' => '<i class="fas fa-angle-right"></i>',//FontAwesome 'format' => '?paged=%#%', ) ); ?> </div><!-- /pagenation --> <?php endif; ?> </div> <!-- ページネーション --> </main> <?php get_footer(); ?> コード

archive-blog.php
こちらのテンプレートファイルは、「カスタム投稿タイプ」の記事一覧にしようします。(スラッグはblogとします)
こちらで動くのですが、通常のループ文の書き方で問題ないかしりたいです。

<?php get_header(); ?> <main class="under__main-wrapper"> <!-- パンくずリスト --> <?php echo '<div class="breadcrumbs">' ; if(function_exists('bcn_display')){ bcn_display(); } echo '</div>'; ?> <!-- パンくずリスト --> <h2 class="under__title">Blog</h2> <h3 class="under__title-ja">ブグ</h3> <!-- 制作実績一覧 --> <ul> <?php if(have_posts()): while(have_posts()): the_post(); ?> <li class="archive__item"> <?php if(has_post_thumbnail()){ the_post_thumbnail(''); } else{ echo '<img src="' . esc_url(get_template_directory_uri()) . '/img/noimg.png" alt="">'; } ?> <div class="archive__item-info"> <h4><?php the_title(); ?></h4> <p> <?php the_excerpt(); ?> </p> <a href="<?php the_permalink(); ?>" class="archive__btn">もっと見る</a> </div> </li> <?php endwhile; endif; wp_reset_postdata();?> </ul> <!-- 制作実績一覧 --> <!-- ページネーション --> <div class="pagenation__list"> <?php if ( paginate_links() ) : //ページが1ページ以上あれば以下を表示 ?> <!-- pagenation --> <div class="pagenation"> <?php echo paginate_links( array( 'end_size' => 2, 'mid_size' => 0, 'prev_next' => true, 'prev_text' => '<i class="fas fa-angle-left"></i>',//FontAwesome 'next_text' => '<i class="fas fa-angle-right"></i>',//FontAwesome 'format' => '?paged=%#%', ) ); ?> </div><!-- /pagenation --> <?php endif; ?> </div> <!-- ページネーション --> </main> <?php get_footer(); ?> コード

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

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

私の認識ですが通常の投稿、カスタム投稿ともに、アーカイブページで一覧を表示する場合はメインループで良いと思います。
基本的にメインループで読み込まれている投稿一覧とは別の投稿一覧を読み込みたい時にサブループを使用する(トップページにカスタム投稿の一部を表示し[more]リンクをつけてアーカイブページへ飛ばす時など)という感じなので、メインループで実現できるならわざわざサブループを使用する必要は無いと思います。

投稿2021/07/25 03:50

webgoto

総合スコア1293

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/07/25 05:44

なるほど!ありがとうございます! トップページに通常投稿とカスタム投稿の記事が別の場合等に、サブループ使いそうですね。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問