1

カスタム メタ フィールドのチェックボックスから追加された投稿を含むカスタム ループがあります。チェックボックスがオンになっている場合のみ、投稿がループに追加されます。そのループを保持するコンテナがあります。私がやりたいことは、そのループが投稿を取得したかどうか、およびそれが空であるかどうかを確認することです-そのコンテナを非表示にするだけです。それ以外の場合、ループが空の場合、コンテナーはページに残っているためです。

<div>
  <ul>
  </ul>
</div>

これはループです:

<?php 
/* Slider ------- */
$slider = new WP_Query('showposts=-1');
if ( $slider->have_posts() ):
?>  
<div>
    <ul>
    <?php while ( $slider->have_posts() ) : $slider->the_post(); ?>
        <?php if ( get_post_meta($post->ID, "mf_homeslider", true) == 'slider_on' ){ // Check if post was added to slider ?>
        <li>
        <?php if (has_post_thumbnail()) {  ?>
            <a href="<?php the_permalink(); ?>">
                <?php the_post_thumbnail('large'); ?> 
            </a>
        <?php } ?>
            <div>
                <?php get_template_part('includes/post_meta'); ?>
                <h2>
                    <a href="<?php the_permalink(); ?>"><?php the_title(); ?></a>
                </h2>
            </div>
        </li>
        <?php } ?>
    <?php endwhile; ?>
    </ul>
</div>
<?php 
endif;
wp_reset_query();
?>

よろしくお願いいたします。

4

1 に答える 1

0

カスタム フィールドでクエリをフィルタリングする必要があります (詳細はこちらを参照)。これにより、パフォーマンスも向上する可能性があります (SQL 条件と while-if ループ)。その後have_posts()、ループに投稿が含まれているかどうかを返します。

だから代わりに

$slider = new WP_Query('showposts=-1');

使用する

$slider = new WP_Query(array(
    'meta_key' => 'mf_homeslider',
    'meta_value' => 'slider_on',
    'posts_per_page' => -1)
);

そして、それ以上の必要はありませんif ( get_post_meta(...

(showpostsは非推奨ですposts_per_page。代わりに使用してください)。

注: 中かっこと if-endif スタイルを混在させています。後者はネスト時に読みやすくなります。

于 2012-10-21T19:16:22.397 に答える