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

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

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

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

解決済

複数のカスタム投稿タイプを混在させた年別アーカイブ(一覧)ページを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

2回答

0リアクション

0クリップ

5016閲覧

投稿2017/03/29 08:58

編集2017/04/01 09:18

###前提・実現したいこと
WordPressである程度カスタマイズして、作業ができる程度の者です。
表題の通り、複数のカスタム投稿タイプを混在させた年別アーカイブページページを作りたいと考えています。
最初面倒だったので、'posts_per_page' => -1で全件表示しようとしていたのですが、
表示するのにも時間がかかってしまったので、改めて年別アーカイブページページを作りたいです。

カスタムフィールドを使っているので、カスタムフィールドのデートピッカーで指定している日付でソートできたら尚いいです。

  1. カスタム投稿タイプ「custom01」のアーカイブページを作成
  2. 「custom01」の年別アーカイブページでcustom01、custom02、custom03の内容を一括表示

これで、下記ソースで強制的に一覧表示はできたのですが、
custom01の投稿数が少ないため、年別アーカイブページを作成すると2017/2016/2014/2002/という形で、
歯抜けのページができてしまいます。
歯抜けができないようにするためにはどうしたらいいのか教えて欲しいです。

###該当のソースコード

<?php $args = array( 'post_type' => array( 'custom01','custom02','custom03'), 'paged' => $paged, 'meta_key' => 'first_date', 'orderby' => 'first_date', 'order' => 'ASC', 'post_status' => array('private','publish') ); ?> <?php query_posts( $args ); ?> <?php if ( have_posts() ): while ( have_posts() ): the_post(); get_template_part( 'content-custom01' ); endwhile; endif; wp_reset_query(); ?>

###補足情報
query_postsって・・・と指摘受けそうですが・・・
そこは、無視していただければ幸いです。
get_postsでの方法でも構いません。

###追加質問
回答してくださったmizさんの方法で大体の実現はできたのですが、最初に記述した
https://teratail.com/questions/67797

<?php $args = array( 'post_type' => array( 'custom01','custom02','custom03'), 'paged' => $paged, 'meta_key' => 'first_date', 'orderby' => 'first_date', 'order' => 'ASC', 'post_status' => array('private','publish') ); ?> <?php query_posts( $args ); ?> <?php if ( have_posts() ): while ( have_posts() ): the_post(); get_template_part( 'content-custom01' ); endwhile; endif; wp_reset_query(); ?>

では年別アーカイブに別の年まで入ってしまったため、

<?php if ( have_posts() ): while ( have_posts() ): the_post(); get_template_part( 'content-custom01' ); endwhile; endif; wp_reset_query(); ?>

とarchive.phpに記述しました。
実現はできましたが、これだと

最初に書いた条件の

<?php $args = array( 'meta_key' => 'first_date', 'orderby' => 'first_date', 'order' => 'ASC', 'post_status' => array('private','publish') ); ?> <?php query_posts( $args ); ?>

が実現されません。
一部カスタム投稿タイプは非公開になっている情報を取得したたいため、上記記述をしています。

コメントにも書いているのですが、
今回イベント情報ページで、
0. イベントが終わり次第、非公開になる
0. 非公開になったイベント情報をバイオグラフィに自動的に表示したい

という意図です。
当方でも調べてはいるものの、うまく実現できないため、再質問とさせてください。

よろしくお願いいたします

以下のような質問にはリアクションをつけましょう

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

リアクションが多い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

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

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

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

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

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

適切な質問に修正を依頼しましょう。

kei344

2017/03/29 09:23

「特定の年に絞り込んで記事を取得したい」という事でしょうか。
退会済みユーザー

退会済みユーザー

2017/03/29 09:42

複数のカスタム投稿タイプを混在させた年別アーカイブページを作りたいというだけです。カスタムフィールドのデートピッカーの日付で年別アーカイブページを取得できるとなおいいのですが。。。

まだ回答がついていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
86.12%

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

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

質問する

関連した質問

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

WordPress

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