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

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

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

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

Q&A

解決済

2回答

5476閲覧

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

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

0グッド

0クリップ

投稿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. 非公開になったイベント情報をバイオグラフィに自動的に表示したい

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

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

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

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

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

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

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

kei344

2017/03/29 09:23

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

退会済みユーザー

2017/03/29 09:42

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

回答2

0

ベストアンサー

質問者様が利用しようとしている方法とは別の方法になりますが、類似の質問と回答を一応ご参考までに。

https://teratail.com/questions/67797

投稿2017/03/31 04:35

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

退会済みユーザー

退会済みユーザー

2017/03/31 15:55 編集

ありがとうございました!だいたい実現たのですが、管理画面からログアウトすると年のリストが消えてしまいます。 また、一点ご相談なのですが 1.カスタムフィールドの日付でソート 2.非公開記事も含んで表示したい というのは可能でしょうか。 よろしくお願いします
退会済みユーザー

退会済みユーザー

2017/04/01 05:42

> 管理画面からログアウトすると年のリストが消えてしまいます 記事がない年、もしくは非ログインユーザには公開されていない記事しかない年なのでしょう。正常な動きだと思います。 > 1.カスタムフィールドの日付でソート 可能だと思います。 > 2.非公開記事も含んで表示したい わざわざ非公開記事を含む理由がわかりません。公開できる記事ならば、公開してしまえばいいのではないですか。
退会済みユーザー

退会済みユーザー

2017/04/01 06:07 編集

>>記事がない年、もしくは非ログインユーザには公開されていない記事しかない年なのでしょう。正常な動きだと思います。 こちら、ブラウザのキャッシュだったのか、今見ると年別リスト表示されていました。申し訳ございません! custom01→今回実現させる年別アーカイブページがあるカスタム投稿タイプ custom02→custom01の年別アーカイブページで非公開で表示したい custom03→custom01の年別アーカイブページで公開状態で表示 custom02に関してはイベント関連で、イベントが終了した場合、custom02に表示したくないという意図があります。 custom02では、Post Expiratorを使用して、自動で非公開にしているため設定を変えずともcustom01に表示されることを望んでいます。
退会済みユーザー

退会済みユーザー

2017/04/01 06:23

質問者様が実現しようとしている仕様が今のところ私には全く理解できません。 「非公開で表示」とは誰に対して、どのように表示することをさしているのか? 現在のコードはどうなっているのか?など、不明点が多いです。 質問者様の上記のコメントが質問への補足ならばこちらのコメント欄ではなく、質問文へ追記してください。 もしくは、新しい趣旨の質問であるならば、別質問として投稿してください。
退会済みユーザー

退会済みユーザー

2017/04/01 08:58

>「非公開で表示」とは誰に対して、どのように表示することをさしているのか? 現在のコードはどうなっているのか?など、不明点が多いです。 非公開で表示したいcustom02に関しては、非ログインユーザーへの表示です。 custom02イベント情報ページなので、custom02に情報が残ってもらったら困るので、 非公開の状態で非ログインユーザーにも表示したいのです。 custom01に関して言うと、バイオグラフィとして年別アーカイブページを作りたいと考えているため、この方法でないと厳しいのが現状です。(当方で更新するとは限らないため) 上記質問に追記しますが、この流れの中での質問なので、敢えてコメントさせていただいていることもご理解いただけますでしょうか? よろしくお願いいたします
退会済みユーザー

退会済みユーザー

2017/04/01 09:45

追加質問に書かれた問題点については、query_postsに入れている条件をpre_get_postsで適用すればよいように見えます。
退会済みユーザー

退会済みユーザー

2017/04/02 03:56

post_status以外は全てpre_get_postsでなんとかなりました! ありがとうございました。 一旦こちら解決とさせていただきます。
guest

0

下記URLの表記方法で大体解決
WPの月別アーカイブを複数のカスタム投稿が混在した形で表示したい

アーカイブ一覧の部分のみ

<?php $args = array( 'type' => 'yearly', 'limit' => '', 'format' => 'html', 'before' => '', 'after' => '', 'show_post_count' => false, 'echo' => 1, 'post_type' => array('custom01', 'custom02','custom03'), ); my_wp_get_archives( $args ) ?>

monthlyをyearlyと変更。

ただ、これだと、カスタムフィールドの日付でソートができないので

function myaction_archive_sortorder( $wp_query ) { if( is_admin() ){ return $wp_query; } if( $wp_query->is_main_query() && $wp_query->is_archive() ){ $wp_query->set( 'posts_per_page',-1 ); $wp_query->set( 'meta_key', 'first_date' ); $wp_query->set( 'orderby', 'meta_value' ); $wp_query->set( 'order', 'ASC' ); $wp_query->set( 'post_status', array('private','publish') ); } return $wp_query; if( $wp_query->is_post_type_archive( 'post_type' )){ } return $wp_query; } add_action( 'pre_get_posts', 'myaction_archive_sortorder' );

非公開の件はまだ解決できませんが、別の質問でもあるので、一旦解決済とさせていただきます。
回答いただいたmizさん、質問の追記・修正の依頼にコメントしてくださったkei344さんありがとうございました。

投稿2017/04/02 04:08

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.51%

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

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

質問する

関連した質問