サポート » テーマ » 複数カスタム投稿タイプを一つの年別アーカイブページとして、非公開ページを含めて非ログインユーザーに表示したい

  • 今、クライアントからの依頼で、イベント情報ページを作っています。
    クライアントが開催するイベントを掲載するページとなります。

    • Home
    • Event(スケジュール)
    • 自社運営イベント
    • 出店系イベント
    • Goods
    • Biography
    • About
    • Contact

    というサイトマップになります。
    ほぼカスタム投稿タイプで作っています。

    ■Eventページ
    Eventが終了し次第、Post Expiratorで非公開にする。
    また、「自社運営イベント」と「出店系イベント」で、表示する内容が多少変わるため、
    レイアウトなども変わってきます。

    ■やりたいこと
    イベント情報に関することを時系列で残したいため、Biographyというアーカイブページを作成。
    Biographyの詳細ページ(singleページ)は不要

    1. 「Event(非公開分)」と「Goods」をBiographyの年別アーカイブに強制的に表示
    2. Biographyは「Event」と「Goods」以外にも掲載したいものがある場合のために、Biographyからも編集を行う場合があります。実質的には「Event」「Goods」「Biography」の一覧表示となる
    3. Eventは非公開分を表示したい

    ■実現できたところ
    BiographyにBiographyの年別アーカイブページに「Event」「Goods」を強制的に一覧にすることは実現できています。
    参照ページ:https://teratail.com/questions/67797

    archive.phpに記入する
    'type' => 'monthly',

    'type' => 'yearly',
    にして実現

    ■実現できず困っていること
    Biographyは実績一覧みたいなものなので、
    Eventページでは非表示の状態でBiographyに表示させたいと考えています。

    Post Expiratorのカテゴリ移動も別の場所で、提案いただいたのですが、
    更新者が技術的な面で怪しいため、あまり手数を増やしたくないです。

    なので、BiographyでEventのみ非公開情報を非ログインユーザーに表示させたいです。

    で、コードとしては、pre_get_postsを使用して、function.phpに

    
    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' );
    

    と書きました。非公開記事を含めて表示はできているのですが、
    昇順での1件目しか表示されず困っています。

    何か方法があれば教えてください。
    よろしくお願いします。

    • このトピックはsakaenetが6年、 12ヶ月前に変更しました。
    • このトピックはsakaenetが6年、 12ヶ月前に変更しました。
    • このトピックはsakaenetが6年、 12ヶ月前に変更しました。
4件の返信を表示中 - 1 - 4件目 (全4件中)
  • もしかして非表示ページをデータベースのように扱って公開ページから、非公開のページで調整した内容を表示したいということなのでしょうか。
    具体的にデータの整理を人為的におこなう方に非公開ページの更新を担当させることで公開ページのデザインを維持したまま内容を挿入する運用なのでしょうか。

    もしそういう運用なのであれば、ページのテンプレートをそれ用に用意し、特定の記事読み出しクエリで読み出して一旦変数に格納し整形してから表示させるなどの方法が有用かとおもうのですがいかがでしょうか。

    トピック投稿者 sakaenet

    (@sakaenet)

    返信いただきありがとうございます!
    Eventだけでいいますと、

    1. Eventで情報を公開
    2. Eventが終了したら非公開(Post Expiratorを使用)
    3. Biographyで非公開Eventを非ログインユーザーに表示

    Biographyに表示する際に、不要な情報を取り除いて体裁を整えて表示させています。
    実質的に、更新作業する人は各カスタム投稿タイプでの更新はしますが、
    Biographyアーカイブに関しては、Biographyでのカスタム投稿タイプで更新したい情報がなければ、触りません。

    functionに書いたpre_get_postsに変更してから今回の1件のみしか出ない原因ではないかと思っていたのですが、ACFリピーターで使用した関連が干渉しているのかなと思ったりもしています。

    <?php $posts = get_sub_field('live_places02'); if( $posts ): ?>
    <?php foreach( $posts as $post): ?>
    <?php setup_postdata($post); ?>
    <?php the_field('event_add_place'); ?>・<?php the_title(); ?>
    <?php endforeach; ?>
    <?php wp_reset_postdata(); ?>
    <?php endif; ?>

    最悪、

    Eventは「今日以降の新しい情報であれば表示」
    Biographyに表示するEventアーカイブは「今日よりも新しい情報であれば表示」
    のような条件にしたほうがいいのかなと思ったりもしているのですが・・・・
    これに関しての方法はまだ見いだせていません。

    なるほどしましたら以下のような動作なのでしょうか。

    おおよそのながれ

    このバイオグラフィで公開する非公開になった過去イベントが「1件目しか表示されない」の問題についてでしょうか。
    2ページ間をまたぐ処理の記事フラグ変更がなされて1件目が表示されているのであればバイオグラフィページの抽出結果表示状況に影響を与える何らかから切り離して抽出結果をもとめる(準備関数や変数ではなくご自身で変数やループを作成・使用して取得)するか、他と干渉しない状況で抽出結果を整形するなどの作業になるかもしれないかなと思います。

    何らかの進展の一助となれば幸いです。

    • この返信は6年、 11ヶ月前にmsioが編集しました。理由: 画像のリンクの記述方法がわるかったようです…。

    なぜ1っ子なのかはわかりませんが、設計を見直せばどうなのかなと。

    Biographyで公開するわけだからeventの記事を非公開にする必要があるのでしょうか。
    すべてBiographyで(カテゴリーを考える?)公開して、一時的にeventにも表示する。
    >Post Expiratorのカテゴリ移動も別の場所で、提案いただいたのですが、
    これが正解なのでは。

    体裁に関しては、表示するときに、条件分岐で、異なるtemplate-parts使えばいいのでは。
    共通部分は本文。異なる部分はカスタムフィールドみたいな感じの。

4件の返信を表示中 - 1 - 4件目 (全4件中)
  • トピック「複数カスタム投稿タイプを一つの年別アーカイブページとして、非公開ページを含めて非ログインユーザーに表示したい」には新たに返信することはできません。