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記事の場合は表示しない ?>