web-dev-qa-db-fra.com

Quand utiliser une instruction if après get_posts?

En recherchant la fonction get_posts dans le codex , j'ai constaté que, dans la plupart des exemples, ils ne montraient pas d'instruction if après l'appel de get_posts

Exemple:

<?php
$args = array( 'posts_per_page' => 10, 'order'=> 'ASC', 'orderby' => 'title' );
$postslist = get_posts( $args );
foreach ( $postslist as $post ) :
  setup_postdata( $post ); ?> 
    <div>
        <?php the_date(); ?>
        <br />
        <?php the_title(); ?>   
        <?php the_excerpt(); ?>
    </div>
<?php
endforeach; 
wp_reset_postdata();
?>

Et:

<?php
$args = array( 'post_type' => 'attachment', 'posts_per_page' => -1, 'post_status' =>'any', 'post_parent' => $post->ID ); 
$attachments = get_posts( $args );

**if ( $attachments ) {**
    foreach ( $attachments as $attachment ) {
    echo apply_filters( 'the_title' , $attachment->post_title );
    the_attachment_link( $attachment->ID , false );
    }
}
?>

Je ne sais pas si le codex part du principe que vous aurez toujours des publications, vous n'avez donc pas besoin de vérifier?

Personnellement, je l'utilise toujours, mais je me demande si quelqu'un pourrait m'éclairer si c'est nécessaire. Quel est le bon moment pour utiliser l'instruction if?

1
Malisa

À mon avis, nous ne pouvons pas garantir la post-existence dans db pour une requête spécifique. peut-être qu'il retourne un tableau vide. il est donc préférable d’utiliser l’énoncé conditionnel. De plus, je pense que nous avons affaire à un tableau, donc pour vérifier le tableau vide, nous devrions utiliser la fonction php empty.

par exemple:

if ( !empty( $attachments ) ) {
  foreach ( $attachments as $attachment ) {
   // do some stuff here.
  }
}
else {
  _e('Sorry! No posts found.');
}
3
Anwer AR

La get_posts() peut retourner un tableau vide

Dans ce cas, la boucle foreach ressemble à ceci:

foreach ( [] as $post ) 
{
    // ...
}

où il n'y a rien à boucler. Ce code est valide.

Si l'extrait de code ressemble à ceci:

echo '<ul>';
foreach ( $postslist as $post ) 
{
    // <li>...</li>
}
echo '</ul>';

alors nous devons vérifier si $postslist est non vide:

if( $postslist )
{   
    echo '<ul>';
    foreach ( $postslist as $post ) 
    {
        // <li>...</li>
    }
    echo '</ul>';
}

pour éviter d'afficher une liste <ul></ul> vide.

Voici un exemple parmi tant d'autres où il serait judicieux de vérifier si la liste de diffusion n'est pas vide, mais ce n'est pas obligatoire, comme si vous n'aviez besoin que du décompte:

echo count( (array) $postslist );
1
birgire