Cum să afișezi conținutul paginii într-un șablon de pagină?

11 mar. 2013, 20:16:23
Vizualizări: 181K
Voturi: 14

În site-ul meu WordPress, am creat un șablon personalizat de pagină, care conține o interogare personalizată [folosind WP_Query()]. Cu această interogare, pot obține perfect postările dintr-o anumită categorie. Dar vreau să afișez și conținutul paginii împreună cu postările interogate.

Structura va arăta astfel:
---------------------------

Titlul Paginii

conținutul paginii

Titlul Postării Interogate

conținutul postării interogate
---------------------------

  • Ce pot face?
4
Comentarii

Care este problema? Acesta este un șablon de pagină, deci ai acces la conținutul paginii. Prin intermediul unei alte interogări separate, poți accesa un anumit articol, de exemplu, și astfel poți afișa conținutul acestuia. Deci?

tfrommen tfrommen
11 mar. 2013 20:25:58

Te rog să fii răbdător înainte de a vota negativ. M-am străduit pentru asta și apoi am găsit soluția. Am încercat să întreb și să răspund aici pentru a împărtăși logica cu alții - cred că va clarifica situația într-un mod în care eu o căutam. Sper că întrebarea și răspunsul sunt clare pentru tine.

Mayeenul Islam Mayeenul Islam
11 mar. 2013 20:41:22

În primul rând, nu am votat negativ întrebarea ta. În al doilea rând, mulțumesc că ai împărtășit cunoștințele tale cu noi. Ai absolută dreptate să faci asta. Presupun că problema a fost/este că această întrebare nu a fost atât de greu de rezolvat pentru utilizatorii/developeri experimentați de WordPress, precum și faptul că ai postat întrebarea singură. Dacă vrei să întrebi și să răspunzi chiar de la început, include-ți răspunsul/soluția direct pe aceeași pagină pe care scrii întrebarea. Sub butonul Postează-ți întrebarea există o casetă de bifat Răspunde la propria întrebare. Mulțumesc din nou.

tfrommen tfrommen
11 mar. 2013 21:10:00

wp_reset_postdata() vine în ajutor. Ar trebui folosit după fiecare interogare personalizată.

kaiser kaiser
11 mar. 2013 22:06:47
Toate răspunsurile la întrebare 2
2
27

Folosesc două bucle. Prima buclă este pentru a afișa conținutul paginii, iar a doua buclă este pentru a afișa conținutul postărilor interogate. Am adăugat comentarii în cod acolo unde a fost necesar. Am subliniat în bucle, așa cum a menționat Deckster0 în suportul WordPress, că the_content() funcționează doar în interiorul unei bucle WordPress. Plasez acest cod într-un șablon personalizat:

<?php
/*
* Șablon nume: Șablonul meu
*/
get_header(); ?>

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

    <h1 class="entry-title"><?php the_title(); ?></h1> <!-- Titlul paginii -->
    <?php
    // PENTRU AFIȘAREA CONȚINUTULUI PAGINII
    while ( have_posts() ) : the_post(); ?> <!-- Deoarece the_content() funcționează doar în interiorul unei bucle WP -->
        <div class="entry-content-page">
            <?php the_content(); ?> <!-- Conținutul paginii -->
        </div><!-- .entry-content-page -->

    <?php
    endwhile; // resetarea buclei paginii
    wp_reset_query(); // resetarea interogării paginii
    ?>

    <?php
    // PENTRU AFIȘAREA CONȚINUTULUI POSTĂRILOR
    ?>                        
        <?php
        $my_query = new WP_Query( 'cat=1' ); // Am folosit ID-ul categoriei 1 ca exemplu
        ?>
        <?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> <!-- Titlul postării interogate -->
            <div class="entry-content">
                <?php the_excerpt(); ?> <!-- Rezumatul postării interogate -->
            </div><!-- .entry-content -->

        <?php endwhile; // resetarea buclei postării ?>

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

        <?php
        wp_reset_postdata(); // resetarea interogării postării
        endif;
        ?>

    </div><!-- #content -->         
</div><!-- #container -->
11 mar. 2013 20:39:12
Comentarii

Al doilea interogare nu ar trebui să fie în interiorul if( have_posts() ) deoarece acea afirmație va fi întotdeauna adevărată. Ar trebui să apelezi if( $my_query->have_posts() ) după liniile $my_query = new WP_Query( 'cat=1' ); și args dacă dorești să verifici dacă interogarea are rezultate.

t31os t31os
12 apr. 2013 11:31:11

@t31os ai dreptate. E vina mea. Acum am corectat codul astfel. Mulțumesc pentru identificare. :)

Mayeenul Islam Mayeenul Islam
28 mai 2014 16:28:30
0

Utilizarea a două bucle este o practică comună pentru a realiza acest lucru, dar este un pic exagerată.

Fiecare articol sau pagină vă oferă super-variabila $post. V-ați întrebat vreodată de ce funcția get_post_meta() funcționează cu un simplu $post->ID ;) ?

Deci, înainte de a începe WP_Query() care obține articolele listate, puteți accesa datele paginii/articolului curent cu $post->ID, $post->post_content, $post->guid și așa mai departe.

În buclă, această variabilă este umplută cu articolul buclă. Pentru a o salva pentru mai târziu, puteți fie să creați o nouă variabilă

$temp_post = $post

// new WP_Query() + bucla aici

sau să apelați

wp_reset_query()

după listare. Ultima funcție ar trebui să fie apelată oricum pentru a vă asigura că datele din bara laterală sunt cele corecte pentru pagina/articolul curent.

11 mar. 2013 23:34:43