web-dev-qa-db-ja.com

Get_postsの後にif文を使用する場合

get_posts関数の codex を見ているうちに、ほとんどの例で、get_postsを呼び出した後にif文が表示されないことに気付きました。

例:

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

そして:

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

コーデックスがあなたが常に投稿をすると想定しているのかどうか確信が持てないのでチェックする必要はありませんか?

私は個人的にはいつもそれを使いますが、必要ならば誰かが私を啓発することができるかどうか疑問に思います。 if文を使用する適切なタイミングはいつですか。

1
Malisa

私の意見では、特定のクエリに対してdb内にpostが存在することを保証することはできません。多分それは空の配列を返します。そのため、条件付きステートメントを使用することをお勧めします。さらに、空の配列をチェックするためにphp empty関数を使用する必要があるので、配列を処理していると思います。

例えば:

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

get_posts()は空の配列を返すことができます

その場合、foreachループは次のようになります。

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

ループするものは何もありません。このコードは有効です。

コードスニペットが次のようになっているとします。

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

$postslistが空でないかどうか確認する必要があります。

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

空の<ul></ul>リストを表示しないようにするため。

これは、投稿リストが空でないかどうかを確認するのが合理的な例です。ただし、件数のみが必要な場合は必須ではありません。

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