【WordPress】投稿がないカテゴリ非表示方法

このQ&Aのポイント
  • カテゴリーの1つを決め、すべての子カテゴリーと投稿を表示させる際に、子カテゴリー内に投稿がない場合、子カテゴリー名を表示させない方法について教えてください。
  • 下記のソースでカテゴリー名を非表示にする方法を試しましたがうまくいきませんでした。
  • お手数ですが、どなたかご教授いただけますと幸いです。
回答を見る
  • ベストアンサー

【WordPress】投稿がないカテゴリ非表示方法

【WordPress】 投稿がないカテゴリー 非表示 方法 カテゴリーの1つを決め すべての子カテゴリーと投稿を表示させる際に、 子カテゴリー内に投稿がない場合、 子カテゴリー名を表示させないようにしたいです。 下記のソースでうまくいきませんでした。 <?php $chihirdren=get_categories( 'parent=5&hide_empty=0&orderby=slug&order=DESC'); foreach($chihirdren as $child){ ?> <?php if(have_posts()):?> <h2><?php echo $child->cat_name ?></h2> <?php else: // no post ?> <?php endif; ?> <?php $wp_query->query(array('cat'=>$child->cat_ID,'posts_per_page'=>-1)); while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <h3><?php the_title(); ?></h3> <?php endwhile; } ?> 大変申し訳ございません。 ご教授をお願いいたします。。

  • hk-c
  • お礼率95% (21/22)
  • PHP
  • 回答数2
  • ありがとう数3

質問者が選んだベストアンサー

  • ベストアンサー
  • pluto1234
  • ベストアンサー率84% (11/13)
回答No.2

$wp_query->query(array('cat'=>$child->cat_ID,'posts_per_page'=>-1)); がおかしいのですが、Syntax Error にはならないようですね。気持ち的には $wp_query = new WP_Query(array('cat'=>$child->cat_ID,'posts_per_page'=>-1)); でしょうか? get_posts() を使うと以下のようになります。 <?php $children=get_categories('parent=5&hide_empty=1&orderby=slug&order=DESC'); foreach($children as $child){ ?> <h2><?php echo esc_html($child->cat_name); ?></h2> <?php $my_posts = get_posts(array('cat'=>$child->cat_ID,'numberposts'=>-1)); foreach ($my_posts as $post) { setup_postdata($post); ?> <h3><?php the_title(); ?></h3> <?php } } wp_reset_postdata(); ?>

hk-c
質問者

お礼

こちらのコードで正常に動作確認いたしました! ありがとうございます! ずっと調べていたのですが見つけられず。。 藁をもつかむ気持ちで質問させて頂きました。 修正コードまで書いて頂き大変ありがとうございます! 自分ももっと勉強し皆様に貢献できるように頑張ります! 本当にありがとうございました!

その他の回答 (1)

  • pluto1234
  • ベストアンサー率84% (11/13)
回答No.1

「投稿がないカテゴリー 非表示 方法」は、hide_empty=1 うまくいくいかない以前に、Syntax Error が出ているのでは?

hk-c
質問者

お礼

hide_empty=1 に するんですね! ありがとうございました!

関連するQ&A

  • 5つずつ15件の記事を分割して表示したい

    <!--ループ1--> <?php $wp_query = new WP_Query(); $args = array( 'post_type' => "post", //投稿タイプ設定 'posts_per_page' => 2, // 表示する投稿数(-1を指定すると全投稿を表示) ); $wp_query->query($my_posts); if ($wp_query->have_posts()) : $i = 0; $i <= 10; while ($wp_query->have_posts()) : $wp_query->the_post(); ?> <?php /**** ▼1件分の投稿内容HTML ****/ ?> <?php $i++; ?> <?php if ($i >= 3) break; ?> <?php endwhile; ?> <?php endif; ?> <!--//ループ1--> <!--ループ2--> <?php $wp_query = new WP_Query(); $args = array( 'post_type' => "post", //投稿タイプ設定 'posts_per_page' => 2, // 表示する投稿数(-1を指定すると全投稿を表示) ); $wp_query->query($my_posts); while ($wp_query->have_posts()) : $i<=7;//iが7より小さい時は処理を繰り返す。 if ($wp_query->have_posts()) : $i>4; //iが4より大きい時は、実施する。 continue; // 以降の処理をスキップし、次の回(条件2)に移る $wp_query->the_post(); ?> <?php /**** ▼1件分の投稿内容HTML ****/ ?> <?php $i++; ?> <?php if ($i >= 3) break; ?> <?php endif; ?> <?php endwhile; ?> <!--//ループ2--> $wp_query->query($my_posts);で投稿ページの情報を吸い取り、そこからタイトルや画像やコメントを取得しているようですが。 $my_postsは先頭に戻る特性があって、それを読み飛ばす処理が必要となっているようです。 そこで $i>4;//iが3より大きい時は、while文を強制終了する $wp_query->the_post(); continue; // 以降の処理をスキップし、次の回(条件2)に移る?>として 読み飛ばす処理を実装したつもりが記事が表示されません。原因は何が考えられるでしょうか?

    • ベストアンサー
    • PHP
  • WordPressにおいて、サブカテゴリーに画像を表示させる。

    WordPressにおいて、サブカテゴリーに画像を表示させる。 WordPress,PHP初心者です。 現在 情報サイトを作っているのですが、 あるカテゴリーのループ中に、サブカテゴリーにも属していると、画像を表示させたいです。 ショッピングサイト等で例を言うと 「シャツ」という大カテゴリーをループを使って一覧で出力し、 その中で、サブカテゴリー「売り切れ」や「NEW」にチェックを入れていると(管理画面で) それに適した画像が表示されるようにしたいのです。 ”「売り切れ」と「NEW」にどちらも属している場合もあります” なおかつ、そのサブカテゴリーにチェックが入っていると 上位に表示されると一層良いのですが。 ループの中で、更にループ処理?という考えがあまり正しくないような気がするのですが、 試している所やはりうまくいきません。 ソースは下記の通りです。 <!--大カテゴリーのループ開始--> <?php query_posts("cat=3&showposts=10"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="list-box"> <a href="<?php the_permalink() ?>"> <img src="<?php echo get_post_meta($post->ID,'faceimage',TRUE); ?>" alt="<?php the_title(); ?>" width="141" height="141" /> </a> <p class="name"><?php the_title(); ?></p> <p class="size"><?php echo get_post_meta($post->ID,'textfield',TRUE); ?></p> <!--売り切れの場合、画像表示--> <?php query_posts("cat=4"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="ico-on"><img src="hogehoge" alt="売り切れ" /></div> <?php endwhile; ?> <?php endif; ?> <!--新着アイテムの場合、画像表示--> <?php query_posts("cat=6"); ?> <?php if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="ico-new"><img src="hogehoge2" alt="新着アイテム" /></div> <?php endwhile; ?> <?php endif; ?> </div> <!--ループ完全に終了--> <?php endwhile; ?> <?php endif; ?> 調べてみたものの、行き詰まっています。 稚拙な質問ではございますが、 どうぞご教授お願い致します。

  • wordpressが表示されない原因は?

    非常に困っております。 html文書にwordpressを組み込もうと思っています。 その前提として、httpd.confには AddType application/x-httpd-php .php .html が記述されてあります。 以下が問題のソースです。 <?php require('絶対パス(省略)/wp-blog-header.php'); ?> <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> <?php query_posts('showposts=1');?> <?php if(have_posts()):while(have_posts()):the_post(); ?> ~~~内容(省略)~~~~ <?php endwhile;endif; ?> <?php wp_reset_query()?> これをアップすると、ページは表示されますが、記事部分が表示されません。 ソースを見ると、 <?php require('絶対パス(省略)/wp-blog-header.php'); ?> <?xml version="1.0" encoding="UTF-8"?> ←★変わった部分 <?php query_posts('showposts=1');?> <?php if(have_posts()):while(have_posts()):the_post(); ?> ~~~内容(省略)~~~~ <?php endwhile;endif; ?> <?php wp_reset_query()?> となっています。 wp-blog-header.phpへの絶対パスに間違いは無く、 また、 <?php echo '<?xml version="1.0" encoding="UTF-8"?>'; ?> が <?xml version="1.0" encoding="UTF-8"?>となっていることから、 php命令文は解釈されている(動いている)と思われます。 ということは、wordpressを組み込むソースが悪いと思うのですが、 何が悪いのか全く分かりません。 絶対パスが間違っていれば、エラー表示になる(ページが表示されるはずない)と思うのですが、 サーバーによっては絶対パスが間違っていても、エラーが表示されなかったりするのでしょうか? ちなみに、wp-blog-header.phpは別ドメインで動かすので“絶対パス”指定は必然設定です。 wordpress熟練者の皆様、どうか力を貸してください。 よろしくお願いします。

  • WordpressでテンプレにIDを表示できない…

    現在、初めてWordpressのテンプレートを作っています。 そこで、カスタマイズ方法についてお伺いさせてください。 行いたいこととしては、特定のIDの場合、特定の文言を表示というシンプルなカスタマイズです。 対象としているページは単一記事の投稿(single.php)です。 今回仮にカテゴリIDが10を対象としてみます。 その場合、以下のように記述しています。 <?php if(is_category('10')): ?> <p>カテゴリのIDが10のメッセージ!</p> <?php else: ?> <p>それ以外のメッセージ!</p> <?php endif; ?> と記述しています。 ちなみに、デフォルトのテンプレートを使うと上手く表示できるのですが、今回自分で作っているテンプレートなので、それが問題だと思います。 カテゴリID番号をテンプレート側で出力していない為、上手く動作しないのかな?と思いsingle.phpには こんな感じで記述してみました。 <?php if (have_posts()) : ?> <?php while (have_posts()) : the_post(); ?> <?php $post_cat=get_the_category(); $cat_id=$post_cat[0]->cat_ID; ?> <?php $post_cat=get_the_category(); $cat=$post_cat[0]; ?> <div class="entry" id="category-<?php echo $cat->cat_ID ?>"> ↑これでページ上には一応、 <div class="entry" id="category-10">とカテゴリIDが10として表示されています。 しかしながら、前述した<p>カテゴリのIDが10のメッセージ!</p>というメッセージが表示されません…。 カテゴリIDが一致しているのに、何故分岐の処理が行われないのでしょうか?何か根本的に間違っていますでしょうか。 WPのテンプレートカスタマイズにお詳しい方いらっしゃいましたら、アドバイスをいただけませんでしょうか。よろしくお願いします。 再度お伝えいたしますが、デフォルトのテンプレートに <?php if(is_category('10')): ?> <p>カテゴリのIDが10のメッセージ!</p> <?php else: ?> <p>それ以外のメッセージ!</p> <?php endif; ?> こちらを入れると表示されますので、この部分は問題ないのかと思います。 宜しくお願いします。

  • WordPress PCとスマホで表示を切り替える

    PCでは記事一覧5件、スマホでは3件表示するようにしたいです。 条件分岐タグを使って、PCとスマートフォンで記事の一覧表示を切り替える方法がうまくいきませんでした。 https://handywebdesign.net/2017/11/wp-is-mobile/ 改造前のコード(問題なく表示できました) <ul> <?php $latest_posts = get_posts( array( 'posts_per_page' => 5, // 表示する記事の数 'category_name' => '投稿ID',// 投稿IDを取得 'fields' => 'ids', ) ); foreach( $latest_posts as $post ): setup_postdata( $post ); if( has_post_thumbnail() ) { $post_thumb = get_the_post_thumbnail( '', 'post_thumbnail' ); // アイキャッチがあるときはアイキャッチを表示 } else { $post_thumb = '<img src="' . get_template_directory_uri() . '/img/noimage.gif" width="100" height="100" alt="デフォルト画像" />'; // アイキャッチがないときは《noimage.gif》を表示 } $post_categories = get_the_category(); // カテゴリーを取得 $post_content = wp_trim_words( get_the_content(), 30, '…' ); // 30字分を抜粋 ?> <li <?php post_class(); ?>> <a href="<?php the_permalink(); ?>"> <div class="blogListimg"> <?php echo wp_kses_post( $post_thumb ); ?> </div> <!-- アイキャッチここまで --> <p class="post-time blogDt"><?php the_time('Y.m.d'); ?></p> <p class="post-categories blogCt"><?php echo esc_html( $post_categories[0]->name ); ?></p> <h3 class="post-title"><?php the_title(); ?></h3> <p class="post-content blogBf"><?php echo esc_html( $post_content ); ?></p> </a> </li> <?php endforeach; wp_reset_postdata(); ?> </ul> PCとスマートフォンで記事の一覧表示を切り替えるコード 参考サイトを参考にfunctions.phpにfunction is_mobile() コードを追加。 トップページのphpに以下を改造。 <?php if ( is_mobile() ) : ?> <?php $latest_posts = get_posts( array( 'posts_per_page' => 5, // 表示する記事の数 'category_name' => '投稿ID',// 投稿IDを取得 'fields' => 'ids', ) ); foreach( $latest_posts as $post ): setup_postdata( $post );  ・  ・  ・ <?php else: ?> <?php $latest_posts = get_posts( array( 'posts_per_page' => 3, // 表示する記事の数 'category_name' => '投稿ID',// 投稿IDを取得 'fields' => 'ids', ) ); foreach( $latest_posts as $post ): setup_postdata( $post );  ・  ・  ・ <?php endforeach; wp_reset_postdata(); ?> </ul> 結果は真っ白になってしまいました。 HTMLソースも真っ白です。 空白はSublime Textのテキストエディターを使っていますので、確認しております。 どこが違うか、教えてくださいますか? よろしくおねがいします。

    • ベストアンサー
    • PHP
  • wordpressの投稿記事のリストを表示したい

    固定ページにすべての投稿記事の投稿日とタイトルだけを表示したかったのですが,タイトルリストの下に記事の内容までもが表示されてしまっています。 http://zen73.net/zwp/ <固定ページに書いた記事>blog ------------------------------------------------------------ <h3>全ブログ一覧</h3> <div class="dl_list"> <?php query_posts('showposts=10'); ?> <?php if (have_posts()):while(have_posts()):the_post(); ?> <dl><dt><?php the_time('Y.n.j'); ?></dt> <dd><a href="<?php the_permalink() ?>" rel="bookmark"><?php the_title_attribute(); ?></a></dd></dl> <?php endwhile; endif; ?> </div></div> ------------------------------------------------ PHPは全くの素人なのですが ア 日付とタイトルだけを表示する方法をお教え願います。 イ 'showposts=10'ですと,10件だけの表示になるのではないかと思いますが,すべてを表示したいときの記述の仕方をお教え願います。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • Wordpressで特定カテゴリーの一覧ページ

    今特定のカテゴリーの一覧ページを作りたいのですがうまく作れません。 http://snapkidz.biz/wp/?cat=4(現状) 本当はhttp://blackartcard.com/?cat=4のような感じで作りたいんですがうまくいきません。 二つとも自分のサイトなのですが、http://blackartcard.com/?cat=4の方はテンプレートをいじって作ったので、うまくいっただけです。 アーカイブ.phpを同じ物をsnapkidz.bizにいれたのですがレイアウトがヘッダー部分に表示されるようになってしました。 アーカイブの中身は以下です。 <?php /** * @package WordPress * @subpackage Modularity */ ?> <?php get_header();?> <div> <?php query_posts($query_string.'&posts_per_page=2'); if (have_posts()) : ?> <?php $post = $posts[0]; // Hack. Set $post so that the_date() works. ?> <div class="clear"></div> <div class="content"> <?php while (have_posts()) : the_post(); ?> <div class="archive-top"> <?php the_post_thumbnail('full'); ?> <h2><a href="<?php the_permalink() ?>" rel="bookmark" title="<?php printf( esc_attr__( 'Permalink to %s', 'modularity' ), the_title_attribute( 'echo=0' ) ); ?>"><?php the_title() ?></a></h2> <div class="clear"></div> <p class="postmetadata alt quiet"> <?php $tag_list = get_the_tag_list( '| Tags: ', ', ' ); printf( __( '%1$s | Categories: %2$s %3$s | ', 'modularity' ), get_the_time( get_option( 'date_format' ) ), get_the_category_list( ', ' ), $tag_list ); ?> </p> <hr /> </div> <?php endwhile; ?> <div class="clear"></div> <div class="navigation"> <div class="alignleft"><?php next_posts_link( __( '&laquo; 前の記事', 'modularity' ) ); ?></div> <div class="alignright"><?php previous_posts_link( __( '次の記事 &raquo;', 'modularity' ) ) ?></div> </div> <div class="clear"></div> <?php else : ?> <h2 class="center"><?php _e( 'Not Found', 'modularity' ); ?></h2> <?php get_search_form(); ?> <?php endif; ?> </div> </div> </div> <!-- Begin Footer --> <?php get_footer(); ?> どうすればヘッダー下にうまく表示できるでしょうか?? 宜しくお願い致します。

    • 締切済み
    • CSS
  • WordPressで孫ページ一覧を取得

    下記のコードで子ページ一覧を取得していたのですが、子ページ一覧ではなく孫ページ一覧を取得する必要が出てきました。 <?php $parentId = get_the_ID(); $args = 'posts_per_page=-1&post_type=page&orderby=menu_order&post_parent='.$parentId; query_posts($args); if (have_posts()) : while (have_posts()) : the_post(); ?> <div class="child-box"> <a href="<?php the_permalink(); ?>"><img src="<?php echo wp_get_attachment_url( get_post_thumbnail_id() ); ?>" width="190" alt=""></a> <p class="title"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></p> <p>価格:<span class="price"><?php $selling_price = get_field('selling_price'); echo $selling_price."円"; ?></span></p> </div> <?php endwhile;?> <?php wp_reset_query(); ?> <?php else:?> <?php endif;?> 上記のような形で孫ページ一覧を取得する方法をご存知のかた、是非ご教授ください。

    • ベストアンサー
    • PHP
  • wordpress カスタム投稿タイプについて

    カスタム投稿タイプにより、カタログサイトを作っているのですがwp-pagenaviがページ送りがうまくいきません。phpはよくわからないのでご指導いただければと書き込みました。 状況は下記の通りです。 ■index-frame.php (カスタムテンプレートとして、フレームカタログ一覧を表示。wp-pagenaviはこのphp内に表記しています。) パーマリンクは/%category%/%post_id%/ に設定 index-frame.phpによりサムネイルを表示させ、wp-paginaviでページ送りするとカスタム投稿タイプから投稿済みの別のサムネイルを表示させたいのですが、そうならず、index.phpが使用されてカスタム投稿タイプのタイトルと本文が表示されてしまいます。 サイトURL (”フレーム”に関しての表示部分です。)  http://cm-creation.net/yoshida/localwork/megane-catalog/frame/ index-frame.phpの表記は下記のとおりです。 <?php /* Template Name:インデックス・フレームのテンプレート */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=<?php bloginfo('charset'); ?>" /> <title><?php bloginfo('name');?><?php wp_title(); ?></title> <link rel="stylesheet" href="<?php bloginfo('stylesheet_url'); ?>" type="text/css"/> <?php wp_head(); ?> </head> <body <?php body_class(); ?>> <div id="head-section"> <div id="header"> <h1><a href="#"><?php bloginfo('name'); ?></a></h1> </div> </div> <div id="wrapper-section"> <div class="clearfix" id="wrapper"> <!--カテゴリーナビ用フレーム強調--> <div id="cate_navi_container"> <?php wp_nav_menu(array( 'theme_location' => 'framebar', 'link_before' => '<img src="' . get_bloginfo('template_url') . '/images/', 'link_after' => '" alt="*" />' )); ?> </div> <!--サイドメニュー用--> <div class="clearfix" id="side-container"> <div id="sidebar"> <?php wp_nav_menu(array( 'theme_location' => 'sidebar', 'depth' => '2' )); ?> </div> </div> <!--メインコンテンツ用--> <div class="clearfix" id="main-container"> <?php if(have_posts()): while(have_posts()): the_post(); ?> <div class="title"> <h2><?php the_title(); ?></h2> <?php the_content(); ?> </div> <?php endwhile; endif; ?> <div class="itemlist"> <?php query_posts('post_type='.$post->post_name); ?> <?php if(have_posts()): while(have_posts()): the_post(); ?> <a href="<?php the_permalink(); ?>"> <?php the_post_thumbnail('ssize'); ?> </a> <?php endwhile; endif; ?> </div> <div id="pagenavi"> <!--ロールナビゲーション--> <div id="roll"><?php if(function_exists('wp_pagenavi')) { wp_pagenavi(); } else { vicuna_paging_link('next_label=Newer Entries&prev_label=Older Entries&indent=2'); } ?> </div> </div> </div> </div> </div> <?php get_footer(); ?> カスタム投稿タイプとwp-pagneviの問題についてネットで見ましたが、すいません、phpについてよくわかっておらずどこをどう表記変更したら良いかわからずにおります。よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • [wordpress] 固定ページで、カテゴリ名の

    [wordpress] 固定ページで、記事の一覧を表示し、その記事の属するカテゴリ名の表示 wordpressで、商品一覧ページを作成していて、一覧を表示するページは固定ページにしています。 その商品一覧の中で、記事(商品)の属するカテゴリ名を表示させたいのですが どうすればいいでしょうか? 商品が服なので、その商品が属するカテゴリを項目の一つとして出力したいのです。 つまり『抽出した商品毎(have_post()の出力結果)にカテゴリ名を抽出』という感じです。 具体的なソースも教えて頂けると助かります。 <?php the_category(); ?> はダメでした。 [参考ソース] <div id="collectionWrap" class="clearfix"> <?php $loop = new WP_Query( array( 'post_type' => 'collection', 'posts_per_page' => 8 ) ); while ( $loop->have_posts() ) : $loop->the_post(); ?> <div class="collection"> <div class="image"> <a href="<?php the_permalink() ?>"><?php echo wp_get_attachment_image(get_post_meta($post->ID,"画像",true),'medium' ); ?></a> </div> <div class="txt"> <div class="clearfix mb10"> <p class="upDate"><?php echo get_post_meta($post->ID,"性別",true); ?></p> <p class="seasons"> <span> /*ここにカテゴリの種類を出力 */ </span></p> </div> <p class="itemName"><a href="<?php the_permalink() ?>"><?php the_title(); ?></a></p> <p class="itemPrice">&yen;&nbsp;<?php echo get_post_meta($post->ID,"価格",true); ?></p> </div> </div> <?php endwhile; ?> <?php wp_reset_query(); ?> </div> どうかよろしく御願いします。足りない情報等あればおっしゃってください。 自分でもいろいろ調べてるのですが、わかりません。。急いでます。

    • ベストアンサー
    • PHP

専門家に質問してみよう