วิธีการแสดงเนื้อหาของหน้าในเทมเพลตหน้า?


13

ในเว็บไซต์ WordPress ของฉันฉันสร้างเทมเพลตหน้าเว็บที่กำหนดเองซึ่งมีข้อความค้นหาที่กำหนดเอง [ใช้WP_Query()] ด้วยข้อความค้นหานั้นฉันสามารถรับโพสต์ของบางหมวดหมู่ได้อย่างสมบูรณ์แบบ แต่ฉันต้องการแสดงเนื้อหาของหน้าพร้อมกับโพสต์ที่สอบถาม

สิ่งที่จะเป็นเช่น:
---------------------------

ส่วนหัวของหน้า

เนื้อหาของหน้า

สอบถามหัวข้อการโพสต์

สอบถามเนื้อหาโพสต์
---------------------------

  • ฉันควรทำอย่างไร

2
อะไรคือปัญหา? นี่คือเทมเพลตหน้าดังนั้นคุณจึงสามารถเข้าถึงเนื้อหาของหน้าได้ โดยการใช้แบบสอบถามอื่นที่แยกจากกันคุณจะสามารถเข้าถึงโพสต์ที่เฉพาะเจาะจงและสามารถส่งออกเนื้อหา ดังนั้น?
tfrommen

โปรดอดทนก่อนลงคะแนน ฉันดิ้นรนเพื่อมันแล้วฉันก็พบทางออก ฉันพยายามถามและตอบที่นี่เพื่อแบ่งปันตรรกะกับคนอื่น ๆ - ฉันคิดว่ามันจะชี้แจงความจริงในแบบที่ฉันกำลังมองหา หวังว่าคำถาม & คำตอบนั้นชัดเจนสำหรับคุณ
Mayeenul Islam

ประการแรกฉันไม่ได้ลงคะแนนคำถามของคุณ ประการที่สองขอขอบคุณสำหรับการแบ่งปันความรู้ของคุณกับเรา คุณมีสิทธิ์ที่จะทำเช่นนั้นอย่างแน่นอน ฉันเดาว่าปัญหาคือ / คือคำถามนี้ไม่ยากที่จะแก้ไขสำหรับผู้ใช้ WP ที่มีประสบการณ์ / นักพัฒนารวมถึงความจริงที่ว่าคุณโพสต์คำถามเพียงอย่างเดียว หากคุณต้องการคำถามและคำตอบตั้งแต่เริ่มต้นเพียงแค่ใส่คำตอบ / วิธีแก้ปัญหาของคุณลงในหน้าเดียวกับที่คุณเขียนคำถามไว้ ดังต่อไปนี้โพสต์คำถามของคุณปุ่มมีกล่องกาตอบคำถามของคุณเอง ขอบคุณอีกครั้ง.
tfrommen

wp_reset_postdata()สำหรับการช่วยเหลือ ควรจะทำหลังจากที่แต่ละแบบสอบถามแบบกำหนดเอง
ไกเซอร์

คำตอบ:


21

ฉันใช้สองลูป วงแรกคือการแสดงเนื้อหาของหน้าและวงที่สองคือการแสดงเนื้อหาโพสต์สอบถาม ฉันแสดงความคิดเห็นในรหัสที่จำเป็น ฉันเน้นไปที่ลูปตามที่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 -->

แบบสอบถามที่สองนั้นไม่ควรอยู่ภายในif( have_posts() )เพราะข้อความนั้นจะเป็นจริงเสมอ คุณควรโทรif( $my_query->have_posts() )หลังจาก$my_query = new WP_Query( 'cat=1' );บรรทัดและ args หากคุณต้องการตรวจสอบว่าแบบสอบถามมีผลลัพธ์
t31os

@ t31 คุณพูดถูก มันเป็นความผิดของฉัน ตอนนี้แก้ไขรหัสดังกล่าว ขอบคุณสำหรับการระบุ :)
Mayeenul Islam

0

สองลูปเป็นเรื่องธรรมดาที่จะทำเช่นนี้ แต่ใช้ยาเกินขนาดเล็กน้อย

โพสต์หรือหน้าทุกหน้าให้ตัวแปร$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.