ページコンテンツをページテンプレートに表示する方法


13

私のWordPressサイトでは、[を使用してWP_Query()] カスタムクエリを含むカスタムページテンプレートを作成しました。そのクエリを使用すると、特定のカテゴリの投稿を完全に取得できます。ただし、クエリされた投稿と共にページのコンテンツを表示したいと思います。

ものは次のようになります:
---------------------------

ページ見出し

ページ内容

クエリされた投稿の見出し

問い合わせられた投稿内容
---------------------------

  • 私に何ができる?

2
何が問題ですか?これはページテンプレートであるため、ページコンテンツにアクセスできます。別のクエリを使用して、たとえば特定の投稿にアクセスし、そのコンテンツを出力できます。そう?
tfrommen 2013年

投票する前にしばらくお待ちください。私はそれに苦労していて、解決策を見つけました。ロジックを他の人と共有するためにここでQ&Aを試みました-私が探している方法でそれが事実を明らかにすることになると思います。Q&Aがあなたにとって明確であることを願っています。
Mayeenul Islam 2013

まず、私はあなたの質問に反対票を投じませんでした。第二に、私たちとあなたの知識を共有してくれてありがとう。あなたはそうすることは絶対に正しいです。問題は、この質問は経験豊富なWPユーザー/開発者にとってはそれほど難しい問題ではなく、また、質問を1人で投稿したという事実です。質問と回答を最初からやりたい場合は、質問と同じページに回答/解決策を直接含めてください。[ 質問投稿 ]ボタンの下に、[ 自分の質問に回答する]チェックボックスがあります。再度、感謝します。
tfrommen 2013年

wp_reset_postdata()救助のために。各カスタムクエリの後に実行する必要があります
カイザー2013年

回答:


21

2つのループを使用しています。最初のループはページコンテンツを表示することであり、2番目のループはクエリされた投稿コンテンツを表示することです。必要に応じてコードにコメントしました。Deckster0 がWordPressのサポートで言っているように、私はループを強調しましたが、これthe_content()はWordPressループ内でのみ機能します。これらのコードを自分のテンプレートに配置します。

<?php
/*
* Template Name: My Template
*/
get_header(); ?>

<div id="container">
    <div id="content" class="pageContent">

    <h1 class="entry-title"><?php the_title(); ?></h1> <!-- Page Title -->
    <?php
    // TO SHOW THE PAGE CONTENTS
    while ( have_posts() ) : the_post(); ?> <!--Because the_content() works only inside a WP Loop -->
        <div class="entry-content-page">
            <?php the_content(); ?> <!-- Page Content -->
        </div><!-- .entry-content-page -->

    <?php
    endwhile; //resetting the page loop
    wp_reset_query(); //resetting the page query
    ?>

    <?php
    // TO SHOW THE POST CONTENTS
    ?>                        
        <?php
        $my_query = new WP_Query( 'cat=1' ); // I used a category id 1 as an example
        ?>
        <?php if ( $my_query->have_posts() ) : ?>
        <div id="post-<?php the_ID(); ?>" <?php post_class(); ?>>
        <?php while ($my_query->have_posts()) : $my_query->the_post(); ?>

            <h1 class="entry-title"><?php the_title(); ?></h1> <!-- Queried Post Title -->
            <div class="entry-content">
                <?php the_excerpt(); ?> <!-- Queried Post Excerpts -->
            </div><!-- .entry-content -->

        <?php endwhile; //resetting the post loop ?>

        </div><!-- #post-<?php the_ID(); ?> -->

        <?php
        wp_reset_postdata(); //resetting the post query
        endif;
        ?>

    </div><!-- #content -->         
</div><!-- #container -->

その2番目のクエリはif( have_posts() )、そのステートメントが常にtrueになるため、内部にあってはなりません。クエリに結果があるかどうかを確認したい場合if( $my_query->have_posts() )は、$my_query = new WP_Query( 'cat=1' );とargs行の後に呼び出す必要があります。
t31os

@ t31osあなたは正しい。それは私のせいです。コードをそのように修正しました。識別していただきありがとうございます。:)
Mayeenul Islam 2014

0

これを行うには2つのループが一般的ですが、少しやりすぎです。

すべての投稿またはページは、超可変性を提供します$post。なぜあなたget_post_meta()がシンプルな$post->ID;)で動作するのか疑問に思ったことはありませんか?

あなたが記載されている記事を取得しますWP_Query()を開始する前に、あなたが現在PAGE- /ポスト・データにアクセスすることができ$post->ID$post->post_content$post->guidというように。

ループでは、この変数はループされたポストによって埋められます。後で保存するために、新しい変数を作成することができます

$temp_post = $post

// new WP_Query() + loop here

または電話する

wp_reset_query()

リストの後。とにかく最後の関数を呼び出して、サイドバーのデータが現在のページ/投稿に適切であることを確認する必要があります。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.