Làm cách nào để hiển thị nội dung trang trong một mẫu trang?


13

Trong trang web WordPress của tôi, tôi đã tạo một mẫu trang tùy chỉnh, chứa một truy vấn tùy chỉnh [bằng cách sử dụng WP_Query()]. Với truy vấn đó, tôi hoàn toàn có thể nhận được các bài đăng của một danh mục nhất định. Nhưng tôi muốn hiển thị nội dung trang cùng với các bài viết được yêu cầu.

Điều sẽ giống như:
---------------------------

Tiêu đề trang

nội dung trang

Truy vấn bài

truy vấn nội dung bài
---------------------------

  • Tôi có thể làm gì?

2
Vấn đề là gì? Đây là một mẫu trang, vì vậy bạn có quyền truy cập vào nội dung trang. Ví dụ, bằng một truy vấn riêng biệt khác, bạn có quyền truy cập vào một bài đăng cụ thể và do đó có thể xuất nội dung của nó. Vì thế?
tfrommen

Hãy kiên nhẫn trước khi bỏ phiếu xuống. Tôi đang đấu tranh cho nó và sau đó tôi tìm thấy giải pháp. Tôi đã cố gắng hỏi và đáp ở đây để chia sẻ logic với người khác - tôi nghĩ nó sẽ làm rõ sự thật theo cách mà tôi đang tìm kiếm nó. Hy vọng Q & A rõ ràng với bạn.
Mayeenul Hồi giáo

Đầu tiên, tôi không đánh giá thấp câu hỏi của bạn. Thứ hai, cảm ơn vì đã chia sẻ kiến ​​thức của bạn với chúng tôi. Bạn hoàn toàn đúng khi làm như vậy. Tôi đoán, vấn đề là / câu hỏi này không khó giải quyết đối với người dùng / nhà phát triển WP có kinh nghiệm, cũng như thực tế là bạn đã đăng câu hỏi một mình. Nếu bạn muốn đặt câu hỏi và trả lời ngay từ đầu, chỉ cần đưa câu trả lời / giải pháp của bạn trực tiếp vào cùng một trang mà bạn viết câu hỏi của mình. Bên dưới nút Đăng câu hỏi của bạn có một hộp kiểm Trả lời câu hỏi của riêng bạn . Cảm ơn một lần nữa.
tfrommen

wp_reset_postdata()để giải cứu. Nên được thực hiện sau mỗi truy vấn tùy chỉnh .
kaiser

Câu trả lời:


21

Tôi đang sử dụng hai vòng. Vòng lặp đầu tiên là để hiển thị nội dung trang và vòng lặp thứ hai là hiển thị nội dung bài được yêu cầu. Tôi nhận xét vào các mã khi cần thiết. Tôi đã nhấn mạnh vào các vòng lặp, như Deckster0 đã nói trong WordPress hỗ trợ rằng, the_content()chỉ hoạt động bên trong Vòng lặp WordPress. Tôi đang đặt các mã này vào một mẫu của riêng tôi:

<?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 -->

Truy vấn thứ hai không nên ở bên trong if( have_posts() )vì tuyên bố đó sẽ luôn đúng. Bạn nên gọi if( $my_query->have_posts() )sau các dòng $my_query = new WP_Query( 'cat=1' );và args nếu bạn muốn kiểm tra xem truy vấn đó có kết quả hay không.
t31os

@ t31os bạn nói đúng. Đó là lỗi của tôi. Bây giờ sửa mã thành như vậy. Cảm ơn đã xác định. :)
Hồi giáo Mayeenul

0

Hai vòng là phổ biến để làm điều này, nhưng một chút quá liều.

Mỗi bài đăng hoặc trang cung cấp cho bạn siêu biến $post. Đã bao giờ tự hỏi tại sao get_post_meta()công việc của bạn với một đơn giản $post->ID;)?

Vì vậy, trước khi bạn bắt đầu WP_Query () mà được liệt kê bài viết của bạn, bạn có thể truy cập vào trang của bạn- / sau dữ liệu hiện tại với $post->ID, $post->post_content, $post->guidvà vân vân.

Trong vòng lặp, biến này được điền bởi bài viết lặp. Để lưu nó sau này, bạn có thể tạo một biến mới

$temp_post = $post

// new WP_Query() + loop here

hoặc gọi

wp_reset_query ()

sau khi niêm yết Chức năng cuối cùng phải được gọi bằng mọi cách để đảm bảo rằng dữ liệu trong thanh bên của bạn là đúng cho trang / bài đăng hiện tại.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.