Accesarea conținutului postării cu WP_Query

29 ian. 2015, 20:59:24
Vizualizări: 30.8K
Voturi: 4

Am următorul cod dintr-un șablon pentru a vedea și a obține informațiile postării:

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

Aș dori să afișez titlul postării și altele, dar când am încercat să o fac ca mai sus nu s-a afișat nimic. Cum pot accesa informațiile postării?

0
Toate răspunsurile la întrebare 2
2

În primul rând, nu utilizați și abuzați variabila globală $wp_query. Această variabilă globală ar trebui rezervată doar pentru interogarea principală. Folosiți orice altă variabilă care nu va crea conflicte.

În al doilea rând, nu utilizați proprietățile brute ale WP_Post. Acestea sunt brute și nefiltrate. WP_Query configurează implicit datele postului, ceea ce face posibilă utilizarea etichetelor de șablon.

În al treilea rând, întotdeauna resetați toate instanțele de WP_Query pentru a evita conflictele cu alte interogări pe aceeași pagină.

În al patrulea rând, aveți o eroare de sintaxă în această linie <?php echo $wp_query->post_title.'<br>';. Lipsește închiderea tag-ului PHP.

Puteți rescrie codul în felul următor:

 $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();
}

EDITARE

Dacă aveți nevoie să accesați direct proprietățile WP_Post, puteți utiliza, de exemplu:

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

pentru a afișa conținutul postului,

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

va afișa titlul postului. Starea postului poate fi accesată prin

$query->post_status

Consultați o listă cu toate proprietățile disponibile aici.

Trebuie să rețineți că există etichete de șablon disponibile în timpul buclei pentru a afișa aceste informații fără a utiliza proprietățile WP_Post.

29 ian. 2015 21:14:01
Comentarii

Am pus aceeași întrebare mai jos: Ce se întâmplă dacă vreau să accesez mai multe detalii, cum ar fi post_status și alte asemenea? Este o idee bună să folosesc WP_Query în acest fel pentru asta?

user1048676 user1048676
29 ian. 2015 21:15:40

Vezi actualizarea mea. Sper că te ajută

Pieter Goosen Pieter Goosen
29 ian. 2015 21:22:05
2

O mică eroare în codul tău. Odată ce ai început bucla (pe care o faci după setarea $wp_query->the_post();), poți începe să accesezi conținutul postării folosind tag-urile de șablon WordPress. Deci, dacă ai vrea să afișezi un titlu și conținut, ar arăta astfel:

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

Recomand să citești mai multe despre WP_Query și tag-urile de șablon.

29 ian. 2015 21:11:23
Comentarii

Dar dacă vreau să accesez mai multe elemente, cum ar fi post_status și alte lucruri de genul acesta?

user1048676 user1048676
29 ian. 2015 21:12:42

Toate acestea se realizează cu ajutorul tag-urilor de șablon, vezi link-ul de mai sus. <?php the_author(); ?> va afișa numele autorului, <?php echo get_post_status(); ?> vă va oferi statusul postării, etc.

Jason Hoffmann Jason Hoffmann
29 ian. 2015 21:16:40