get_post & foreach  カスタム投稿名出力「get_post_types」0件の場合表示させない

get_post & foreach  カスタム投稿名出力「get_post_types」0件の場合表示させないメモ

 

カスタム投稿名出力「get_post_types」0件の場合表示させない

まず存在するカスタム投稿名の出力に get_post_types を使います。

<?php
$args = array(
'public' => true,//公開されているもののみ
'_builtin' => false//設定値などは除外する
);
$post_types = get_post_types( $args );
?>

<?php foreach ( $post_types as $post_type ) ://カスタム投稿別のサブループ ?>
<?php echo esc_html( $post_type_name->label );//カスタム投稿名を出力 ?>
<?php endforeach;//カスタム投稿別のサブループ ?>

この場合、投稿 のないものも出力されます。例えば投稿のあるものだけ表示したい場合は

get_postsで記事データを拾ってforeachの中で条件分岐させます。

<?php $myposts = get_posts($args);// 記事があるかないか ?>

<?php if (empty($myposts)): ?>

<!-- 記事がない時の処理 -->

<?php else: ?>

<!-- 記事がある時の処理 -->

<?php endif; ?>

以上です。

 

どうやらうまくいっていないようなので別の方法を考えました。

記事の投稿数を出力して、クラスに付与しCSS側から制御しました。

WordPressで記事数を取得する関数wp_count_posts()

$count_posts = wp_count_posts($post_type);
$posts = $count_posts->publish;
<?php echo $posts;//記事数を表示 ?>

 

これを例えば消したいところのクラスのループの中に入れ込みます。

<div class="post_<?php echo $posts;//記事数を表示 ?>"/>

すると記事のないカスタム投稿は post_0というセレクタクラスが付きますのでdisplay noneで消し去ります。

 

サブループ の中でif文噛ませて非表示にすることができました。

<?php if (0 < $posts)://0記事の場合は表示しない?>

ループする要素
<?php endif;//0記事の場合は表示しない ?>