Accedere al contenuto del post con WP_Query

29 gen 2015, 20:59:24
Visualizzazioni: 30.8K
Voti: 4

Ho il seguente codice da un template per visualizzare le informazioni del post:

<?php
 $args = array(
    'post_type'      => 'post',
    'posts_per_page' => $count,
    'paged'          => $paged,
);
$wp_query = new WP_Query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
    <?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
        <?php echo $wp_query->post_title.'<br>';
    <?php endwhile; ?>
<?php endif; ?>

Vorrei visualizzare il titolo del post ecc. qui ma quando ho provato a farlo come sopra non ha mostrato nulla. Come posso accedere alle informazioni del post?

0
Tutte le risposte alla domanda 2
2

Innanzitutto, non utilizzare e abusare della variabile globale $wp_query. Questa variabile globale dovrebbe essere riservata solo alla query principale. Usa qualsiasi altra variabile che non crei conflitti.

In secondo luogo, non utilizzare le proprietà grezze di WP_Post. Queste sono grezze e non filtrate. WP_Query imposta i postdata per default, il che rende possibile l'uso dei tag del template.

In terzo luogo, sempre resetta tutte le istanze di WP_Query per evitare conflitti con altre query sulla stessa pagina.

In quarto luogo, hai un errore di sintassi in questa riga <?php echo $wp_query->post_title.'<br>';. Manca il tag di chiusura php.

Puoi riscrivere il tuo codice in questo modo:

$args = array(
  'post_type'      => 'post',
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$query = new WP_Query( $args );

if ( $query->have_posts() ) {
    while ( $query->have_posts() ) { 
    $query->the_post();
        the_title();
        the_content();
    }
    wp_reset_postdata();
}

MODIFICA

Se hai bisogno di accedere direttamente alle proprietà di WP_Post, puoi usare ad esempio

echo apply_filters( 'the_content', $query->post_content );

per visualizzare il contenuto del post,

echo apply_filters( 'the_title', $query->post_title );

visualizzerà il titolo del post. Lo stato del post può essere accessibile con

$query->post_status

Vedi una lista di tutte le proprietà disponibili qui

Ricorda che ci sono tag del template disponibili durante il loop per visualizzare queste informazioni senza utilizzare le proprietà di WP_Post

29 gen 2015 21:14:01
Commenti

Ho fatto la stessa domanda qui sotto: E se volessi accedere a più elementi, come post_status e cose simili? Non è una buona idea usare WP_Query in quel modo per questo scopo?

user1048676 user1048676
29 gen 2015 21:15:40

Vedi il mio aggiornamento. Spero sia utile

Pieter Goosen Pieter Goosen
29 gen 2015 21:22:05
2

Piccolo errore nel tuo codice. Una volta iniziato il loop (cosa che fai dopo aver impostato $wp_query->the_post();) puoi iniziare ad accedere al contenuto del tuo post utilizzando i tag template di WordPress. Quindi, se vuoi mostrare un titolo e il contenuto, dovrebbe apparire così:

<?php
$args = array(
  'post_type'      => 'post',
  'posts_per_page' => $count,
  'paged'          => $paged,
);
$wp_query = new WP_Query( $args );
?>

<?php if ( $wp_query->have_posts() ) : ?>
<?php while ( $wp_query->have_posts() ) : $wp_query->the_post(); ?>
<h3><?php the_title(); ?></h3>
<p><?php the_content(); ?></p>
<?php endwhile; ?>
<?php endif; ?>

Ti consiglio di leggere la documentazione su WP_Query e i tag template.

29 gen 2015 21:11:23
Commenti

E se volessi accedere a più elementi, come post_status e cose simili?

user1048676 user1048676
29 gen 2015 21:12:42

Tutto ciò si fa con i tag template, vedi il link sopra. <?php the_author(); ?> mostrerà il nome dell'autore, <?php echo get_post_status(); ?> ti darà lo stato del post, ecc.

Jason Hoffmann Jason Hoffmann
29 gen 2015 21:16:40