Come visualizzare il contenuto della pagina in un template di pagina?

11 mar 2013, 20:16:23
Visualizzazioni: 181K
Voti: 14

Nel mio sito WordPress, ho creato un template di pagina personalizzato che contiene una query personalizzata [usando WP_Query()]. Con quella query, riesco a ottenere perfettamente i post di una determinata categoria. Ma voglio mostrare i contenuti della pagina insieme ai post interrogati.

La cosa sarà così:
---------------------------

Intestazione Pagina

contenuti della pagina

Intestazione Post Interrogato

contenuti del post interrogato
---------------------------

  • Cosa posso fare?
4
Commenti

Qual è il problema? Questo è un template di pagina, quindi hai accesso al contenuto della pagina. Mediante un'altra query separata puoi accedere a un post specifico, ad esempio, e quindi puoi visualizzarne il contenuto. Quindi?

tfrommen tfrommen
11 mar 2013 20:25:58

Per favore sii paziente prima di votare negativamente. Ho faticato per trovare una soluzione e poi l'ho trovata. Ho provato a fare una domanda e risposta qui per condividere la logica con gli altri - penso che chiarirà il fatto nel modo in cui lo stavo cercando. Spero che la domanda e risposta ti sia chiara.

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

Innanzitutto, non ho votato negativamente la tua domanda. In secondo luogo, grazie per aver condiviso la tua conoscenza con noi. Hai assolutamente ragione a farlo. Immagino che il problema sia/stato che questa domanda non fosse così difficile da risolvere per utenti/sviluppatori WordPress esperti, così come il fatto che tu abbia pubblicato la domanda da solo. Se vuoi fare domanda e risposta fin dall'inizio, includi semplicemente la tua risposta/soluzione direttamente nella stessa pagina in cui scrivi la tua domanda. Sotto il pulsante Pubblica la tua domanda c'è una casella di spunta Rispondi alla tua domanda. Grazie ancora.

tfrommen tfrommen
11 mar 2013 21:10:00

wp_reset_postdata() viene in nostro aiuto. Dovrebbe essere eseguito dopo ogni query personalizzata.

kaiser kaiser
11 mar 2013 22:06:47
Tutte le risposte alla domanda 2
2
27

Sto utilizzando due loop. Il primo loop serve a mostrare il contenuto della pagina, mentre il secondo loop mostra i contenuti dei post richiesti dalla query. Ho inserito dei commenti nel codice dove necessario. Come ha sottolineato Deckster0 nel supporto WordPress, the_content() funziona solo all'interno di un Loop di WordPress. Sto inserendo questo codice in un mio template personalizzato:

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

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

    <h1 class="entry-title"><?php the_title(); ?></h1> <!-- Titolo della Pagina -->
    <?php
    // PER MOSTRARE IL CONTENUTO DELLA PAGINA
    while ( have_posts() ) : the_post(); ?> <!-- Perché the_content() funziona solo dentro un Loop WP -->
        <div class="entry-content-page">
            <?php the_content(); ?> <!-- Contenuto della Pagina -->
        </div><!-- .entry-content-page -->

    <?php
    endwhile; // reset del loop della pagina
    wp_reset_query(); // reset della query della pagina
    ?>

    <?php
    // PER MOSTRARE IL CONTENUTO DEI POST
    ?>                        
        <?php
        $my_query = new WP_Query( 'cat=1' ); // Ho usato la categoria con ID 1 come esempio
        ?>
        <?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> <!-- Titolo del Post Richiesto -->
            <div class="entry-content">
                <?php the_excerpt(); ?> <!-- Estratto del Post Richiesto -->
            </div><!-- .entry-content -->

        <?php endwhile; // reset del loop del post ?>

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

        <?php
        wp_reset_postdata(); // reset della query del post
        endif;
        ?>

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

La seconda query non dovrebbe essere all'interno di if( have_posts() ) perché quella condizione sarà sempre vera. Dovresti chiamare if( $my_query->have_posts() ) dopo le righe $my_query = new WP_Query( 'cat=1' ); e args se vuoi verificare che la query abbia risultati.

t31os t31os
12 apr 2013 11:31:11

@t31os hai ragione. È colpa mia. Ora ho corretto il codice in questo modo. Grazie per averlo segnalato. :)

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

Utilizzare due loop è una pratica comune per ottenere questo risultato, ma risulta un po' eccessiva.

Ogni articolo o pagina ti fornisce la super-variabile $post. Ti sei mai chiesto perché la tua funzione get_post_meta() funziona semplicemente con $post->ID ;) ?

Quindi, prima di iniziare il WP_Query() che recupera i tuoi articoli elencati, puoi accedere ai dati della pagina/articolo corrente con $post->ID, $post->post_content, $post->guid e così via.

Nel loop, questa variabile viene riempita con i dati dell'articolo corrente. Per salvarla per un uso successivo, puoi creare una nuova variabile

$temp_post = $post;

// nuovo WP_Query() + loop qui

oppure chiamare

wp_reset_query()

dopo l'elenco. Quest'ultima funzione dovrebbe essere chiamata comunque per assicurarsi che i dati nella tua sidebar siano corretti per la pagina/articolo corrente.

11 mar 2013 23:34:43