web-dev-qa-db-ja.com

ホームページの3列に3つの異なるループを表示する方法

私はこのトピックについていくつか検索をしてきましたが、これまでのところ私の質問には何も見当たらない。これに対処する方法がいくつかあることを私は知っていますが、私は最もクリーンで安定したものになるような方法を探しています。

私がやりたいことは、私のホームページに3つの異なる投稿のセットを表示することです。各投稿グループには、異なるカテゴリの最新の投稿数が表示されます。そのうちの2つは「メイン」コンテンツ領域内の同じスペースを占有し、「タブ」リンクを使用してユーザーはいつでもどちらを表示するかを選択できます。 3つ目は右側のサイドバーに表示されます。最新のX件の投稿が表示された後は、「詳細を読む」へのリンクをクリックして、その特定のカテゴリのアーカイブページにユーザーを誘導するので、投稿グループをページ付けする必要はありません。

私が遭遇した2つの可能な解決策がありますが、私はどちらが最善であるか、またはどちらかが良い選択肢であるかどうかわかりません。

  1. 静的フロントページを設定し、それにカスタムページテンプレートを作成します。これは3つの異なるループで構成できます。

  2. フロントページを「最新の投稿」に設定し、表示されるデフォルトのループを変更します。

これまでのところ、 "Sidebar"グループの投稿を簡単に設定できます。私が問題を抱えているのは、ちょうど2つの主要な投稿グループです。

これで任意の方向は大歓迎です。私は多重ループのトピックについていくつか読んだことがありますが、私がすべきことについて明確な考えを与えるのに十分なほど私の状況には当てはまりません。

前もって感謝します。

1
JLW

front-page.phpテンプレートファイルを作成するという3番目のオプションがあります。それはあなたのオプション#1に似ていますが、オプション#1はあなたが管理者の中にページを作成することを含む、そしてあなたの場合あなたがそうする必要があるように聞こえません。テーマではなく通常のエディタでフロントページのコンテンツの一部を管理したい場合にも、オプション#1が適しています。

まだ子テーマを持っていない場合は、まず作成します。テーマがある場合はfront-page.phpをコピーします - そうでない場合は、どのファイルがテーマのホームページを実際に制御しているかを確認するために階層を突く必要があります。それをあなたの子供のテーマにコピーしてから必要に応じて調整してください。サイドバーではすでに1つのループが処理されているので、2番目のセットにmain/defaultループを使用し、3番目のセットにwp_queryを追加することができます。

たとえば、現在のテーマファイルにループがある場合、

if ( have_posts() ) :
    while ( have_posts() ) : the_post();
        // This inner part of the Loop varies by theme
        the_content();
    endwhile;
endif;

その部分をあなた自身のコードで置き換えてください - あなたのマークアップは変わりますが、うまくいけばこれはあなたがどのようにタブのためにあなたのHTMLを設定しそれからその中に2つのループを置くことができるかを示します

<div class="row container">
    <div class="left column">
        <?php
        // Your standard Loop goes here
        if ( have_posts() ) :
            while ( have_posts() ) : the_post();
                // Format as desired
                the_content();
            endwhile;
        endif;
        ?>
    </div>
    <div class="right column">
        <?php
        // This is where you create an additional Loop
        $args = array(
            'post_type' => 'post',
            'category_name' => 'your-category', // change to your category
            'posts_per_page' => 5 // change to the total you want to display
        );
        // run the query
        $thirdLoop = new WP_Query($args);
        // Now this looks mostly like a normal Loop:
        if($thirdLoop->have_posts()):
            while ( have_posts() ) : the_post();
                // Format as desired
                the_content();
            endwhile;
        endif;
    </div>
</div>

ここから、あなたはいくつかのことをしたいと思うでしょう:あなたが3番目のループのカテゴリーとあなたが表示したい投稿の数をカスタマイズします。両方のループのHTML出力をカスタマイズし、the_title()the_permalink()のような詳細情報を出力して、実際に各投稿にリンクし、それらのコンテンツを表示するだけではないようにします。メインのクエリもカスタマイズしたいかもしれませんが、それはそれ自体がトピックです。ホームページのメインクエリをカスタマイズするためにpre_get_postsでWPSE投稿を探すと、そのループに表示するカテゴリに制限したり、投稿の総数を制限したりできます。

2
WebElaine