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

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

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

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

Q&A

0回答

1573閲覧

年月アーカイブ一覧ページでpre_get_postsを利用してカスタム投稿タイプの非公開を含めたリストを作りたい

退会済みユーザー

退会済みユーザー

総合スコア0

WordPress

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

0グッド

0クリップ

投稿2017/04/02 04:35

編集2022/01/12 10:55

##この操作の意図

イベント公開サイトを作っています。

サイトの構成は

  1. Home
  2. News
  3. Event Schedule
  4. Media
  5. Biography
  6. About us

のような形です。
Biographyで直接記入するものもあるものの、
担当者が専任ではないため、できるだけ自動的に取得する仕組みを作ってあげたいと考えています。
2〜5ははカスタム投稿タイプを用いています。

##実現させたいこと
Event ScheduleやMediaのような過去のものをBiographyに一覧として表示させようと思っています。

最初プラグインでBiographyに移動させる方法も考えていましたが、これだと手間が増えてしまうため、

  1. Event(もしくはMedia掲載期間)の終了後、Post Expiratorで非公開にする
  2. Biographyで非公開にしたEvent(Media)情報を強制的に表示

としたいです。
すでに、アーカイブ一覧ページで別のカスタム投稿タイプの取得は完了していますが、pre_get_postsで公開と非公開を含めた条件にすると、最新1件しか表示されなくて困っています。

##該当のソースコード

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; } add_action( 'pre_get_posts', 'myaction_archive_sortorder' );

色々と方法を考えたり、間違っていないかわからないので方法を教えていただけると幸いです。

##追記
更新する人物

更新作業する人物に関してですが、別の仕事との兼任者で、Webに関しての抵抗感があります。
一つでも作業工数を減らしたいため非公開したEventページをBiographyに表示させたほうが、ハードルが低くなるため

あくまでイベントページです

会員制のページではなく、
前述していますが、カスタム投稿タイプのEvent Scheduleの中のイベント終了ページ(Post Expiratorで非公開にしたもの)とMediaの中の掲載終了したもの(Post Expiratorで非公開にしたもの)をBiographyに一覧として表示したいだけです。

イメージ

作業者から見た場合、

  1. Eventページと、Mediaページからは掲載期間が終了するとページから見えないようになる。
  2. 掲載期間が終了するとBiographyに記事が移動したように見える

実際は、前述した通り、BiographyにEventとMediaの非公開になった情報を一覧として強制的に表示する。
ただし、EventとMedia以外の情報もなきにしもあらずなので、Biographyでも更新可能としています。

##補足
https://teratail.com/questions/70629
全く別問題だと思っていたので、分けて考えていたのですが、
補足として、上記の方法で複数カスタム投稿タイプの年別アーカイブを実現しています。

回答者様がおっしゃる通り、カスタムフィールドで取得した日付でのソートをpre_get_postsで取得。

その流れで、post_statusで、公開、非公開を実現させたいという流れになります。

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

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

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

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

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

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

8-0_nyan5

2017/04/02 05:01

会員制のサイトなのでしょうか?
退会済みユーザー

退会済みユーザー

2017/04/02 05:18

会員制のサイトではありません。単純なイベントページです。ただ、更新する人がWebに精通する人ではなくWebに抵抗感のある人物でしたので、非公開を強制的に表示させる方法を取りたいだけです
kei344

2017/04/02 06:22

「Biography」には記事ページが無いのでしょうか?また、非公開のイベントの記事ページは表示するのでしょうか。
退会済みユーザー

退会済みユーザー

2017/04/02 06:30

Biographyにも記事はあります。Biographyなので、EventとMediaだけで拾えない記事は全てBiographyに記述してもらいますEventとMediaに古い情報は残したくないので表示しないという感じです
kei344

2017/04/02 06:33

非表示のイベント記事を一覧だけでなく個別記事としても表示する運用という事でしょうか。
退会済みユーザー

退会済みユーザー

2017/04/02 06:52 編集

掲題の通り、一覧を表示させたいだけです。掲題に一覧ページと書いているので、今回質問内容をあえて修正しません。
kei344

2017/04/02 08:44

運用方法によって取れる対策が変わるため疑問点を確認していましたが、お気に触ったようでしたら申し訳ない。
退会済みユーザー

退会済みユーザー

2017/04/02 09:06

文字にするというのは難しいなと思っているので、お気になさらず。 ただ、色々なイベント情報ページがあるので、私のイメージが正だとは思っていませんが、Biographyというのは、その企業だったりグループが「過去何をやっているか」という時系列であって、詳細(例えば料金だったり開催時間だったり)は不要だと考えられます。 なので、アーカイブ一覧として取得したいという意図になります。 kei344さんとやり取りをしていて、一点だけ関係性がないだろうと思っていたのですが、追記いたします。 こちらこそ、糸口を探していただいているのに、言い方が悪くてすみません。
8-0_nyan5

2017/04/02 10:22

ご希望の方法とは違う提案ですのでこちらに書いてみます。Post Expiratorを見てみると、カテゴリーを書き換えられるようなので、EventやMediaの期間が終了したら非公開にするのではなく、期間中はカテゴリーを公開、終了したら非公開などとしてカテゴリーによって各々のページで条件分岐し表示、非表示を切り換えてはどうでしょうか。
退会済みユーザー

退会済みユーザー

2017/04/02 12:05

回答いただきありがとうございます。最初それも考えていましたが、一つの手間でハードルが上がるためということと、カテゴリによっては出し分けをしたいので提案していただいたものだと厳しいと感じています。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

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

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

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問