Jak wyświetlić zawartość strony w szablonie strony?


13

W mojej witrynie WordPress stworzyłem niestandardowy szablon strony, który zawierał niestandardowe zapytanie [za pomocą WP_Query()]. Dzięki temu zapytaniu mogę idealnie uzyskać posty pewnej kategorii. Ale chcę pokazać zawartość strony wraz z postami, których dotyczy zapytanie.

Będzie to jak:
---------------------------

Nagłówek strony

zawartość strony

Zapytany nagłówek postu

zapytanie o treść postu
---------------------------

  • Co mogę zrobić?

2
Jaki jest problem? To jest szablon strony, więc masz dostęp do zawartości strony. Za pomocą innego osobnego zapytania uzyskujesz na przykład dostęp do określonego postu, a tym samym możesz wyświetlać jego treść. Więc?
tfrommen 11.03.13

Przed głosowaniem prosimy o cierpliwość. Walczę o to, a potem znalazłem rozwiązanie. Próbowałem tutaj zadać pytania i odpowiedzi, aby podzielić się logiką z innymi - myślę, że wyjaśni to fakt w sposób, którego szukam. Mam nadzieję, że pytania i odpowiedzi są dla ciebie jasne.
Mayeenul Islam,

Po pierwsze, nie głosowałem za twoim pytaniem. Po drugie, dziękuję za podzielenie się z nami swoją wiedzą. Masz absolutną rację. Myślę, że problemem jest / było to, że to pytanie nie było tak trudne do rozwiązania dla doświadczonych użytkowników / programistów WP, a także fakt, że wysłałeś pytanie sam. Jeśli chcesz zadać pytanie od samego początku, po prostu umieść swoją odpowiedź / rozwiązanie bezpośrednio na tej samej stronie, na której piszesz pytanie. Pod przyciskiem Prześlij pytanie znajduje się pole wyboru Odpowiedz na własne pytanie . Dzięki jeszcze raz.
tfrommen 11.03.13

wp_reset_postdata()na ratunek. Należy to zrobić po każdym niestandardowym zapytaniu .
kaiser

Odpowiedzi:


21

Używam dwóch pętli. Pierwsza pętla służy do wyświetlania zawartości strony, a druga pętli do wyświetlania treści postu, którego dotyczy zapytanie. W razie potrzeby skomentowałem kody. Podkreśliłem w pętlach, jak powiedział Deckster0 w obsłudze WordPress, która the_content()działa tylko wewnątrz pętli WordPress. Umieszczam ten kod w moim własnym szablonie:

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

To drugie zapytanie nie powinno być w środku, if( have_posts() )ponieważ to stwierdzenie zawsze będzie prawdziwe. Powinieneś wywoływać if( $my_query->have_posts() )po $my_query = new WP_Query( 'cat=1' );wierszach i args, jeśli chcesz sprawdzić, czy zapytanie ma wyniki.
t31os 12.04.13

@ t31os masz rację. To moja wina. Teraz poprawiłem kod do takich. Dzięki za identyfikację. :)
Mayeenul Islam

0

Często stosuje się do tego dwie pętle, ale nieco przedawkowane.

Każdy post lub strona zawiera super-zmienną $post. Czy zastanawiałeś się kiedyś, dlaczego Twoja get_post_meta()praca jest prosta $post->ID;)?

Tak więc, przed rozpoczęciem WP_Query (), która dostaje wymienionych stanowisk, można uzyskać dostęp do aktualnych PAGE- / post-data z $post->ID, $post->post_content, $post->guidi tak dalej.

W pętli ta zmienna jest wypełniana zapętlonym słupkiem. Aby zachować go na później, możesz albo utworzyć nową zmienną

$temp_post = $post

// new WP_Query() + loop here

albo zadzwoń

wp_reset_query ()

po aukcji. Ostatnią funkcję należy jednak wywołać, aby upewnić się, że dane na pasku bocznym są odpowiednie dla bieżącej strony / postu.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.