サポート » その他 » サイトマップ作成

  • 解決済 bootscafe

    (@bootscafe)


    ご質問させてください。

    現在、サイトマップを作ろうとして
    カテゴリの一覧を出そうとしているのですが
    下記のコードをご覧ください。

    <?php
    $cats = get_categories('parent=0&hide_empty=0');
    foreach ($cats as $cat) :
    $desc_cats = get_categories('child_of=' . $cat->cat_ID);
    $desc_cat_ids = array($cat->cat_ID);
    foreach ($desc_cats as $desc_cat) {
    array_push($desc_cat_ids, $desc_cat->cat_ID);
    }
    $desc_cat_ids_str = implode(',', $desc_cat_ids);
    $cat_posts = get_posts('category=' . $desc_cat_ids_str . '&numberposts=5&orderby=date&order=DESC');
    if ($cat_posts) : ?>
    <ul>
    <li class="tree"><a href="<?php get_category_link($cat->cat_ID) ?>"><?php echo($cat->cat_name); ?></a>
    <ul>
    <?php foreach ($cat_posts as $post) : setup_postdata($post); ?>
    <li class="tree"><a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
    <?php endforeach; ?>
    </ul>
    <?php endif; ?>
    </li>
    </ul>
    
    <?php endforeach; ?>

    上記のように作ってみたのですが

    ・<?php get_category_link($cat->cat_ID) ?>が取得できていない。
    ・foreachで最後のループだけ「<li class=”tree_last”>」と処理を変えたい

    上記のようなことが実現できず、困っております。
    どなたかおわかりの方がいましたらご教授願えますでしょうか。
    よろしくお願いします。

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • 1)リンク

    <?php get_category_link($cat->cat_ID) ?>
      ▼
    <?php echo get_category_link($cat->cat_ID) ?>

    2)tree_last
    カテゴリリンクやポストリンクの最後の

    • だけ、tree_last にしてみました。
      あまり美しくはないですが、$catsや$cat_postsの配列の数を数え、最後の処理だけ tree_last 変更しています。
    • 真剣には見ていませんが、カテゴリのネストがもっと深くなった場合には対処できないような気がします。Dagon Design Sitemap Generator のようなプラグインを使った方が良いのではないでしょうか?

      <?php
      $cats = get_categories('parent=0&hide_empty=0');
      $m = count($cats);
      $c_cnt = 0;
      foreach ($cats as $cat) :
      	$desc_cats = get_categories('child_of=' . $cat->cat_ID);
      	$desc_cat_ids = array($cat->cat_ID);
      	foreach ($desc_cats as $desc_cat) {
      		array_push($desc_cat_ids, $desc_cat->cat_ID);
      	}
      	$desc_cat_ids_str = implode(',', $desc_cat_ids);
      	$cat_posts = get_posts('category=' . $desc_cat_ids_str . '&numberposts=5&orderby=date&order=DESC');
      
      	if ($cat_posts) : ?>
      
      		<ul>
      		<?php if ($c_cnt==$m-1) : ?>
      			<li class="tree_last">
      		<?php else : ?>
      			<li class="tree">
      		<?php endif; ?>
      
      		<a href="<?php echo get_category_link($cat->cat_ID) ?>"><?php echo($cat->cat_name); ?></a>
      			<ul>
      			<?php $p_cnt = 0; ?>
      			<?php $n = count($cat_posts); ?>
      			<?php foreach ($cat_posts as $post) : setup_postdata($post); ?>
      				<?php if ($p_cnt==$n-1) : ?>
      					<li class="tree_last">
      				<?php else : ?>
      					<li class="tree">
      				<?php endif; ?>
      				<a href="<?php the_permalink(); ?>"><?php the_title(); ?></a></li>
      				<?php $p_cnt += 1; ?>
      			<?php endforeach; ?>
      			</ul>
      	<?php endif; ?>
      		</li>
      		</ul>
      		<?php $c_cnt += 1; ?>
      <?php endforeach; ?>

    表示にミスがありました。
    2)tree_last
    カテゴリリンクやポストリンクの最後の

    <li class="tree">

    だけ、tree_last にしてみました。

    下のほうの

    <?php endif; ?>
    </li>
    </ul>

    は、

    </li>
    </ul>
    <?php endif; ?>

    であるべきではないでしょうか?

    トピック投稿者 bootscafe

    (@bootscafe)

    わざわざご対応いただきまして誠にありがとうございます!
    動作も完璧でした。お手数おかけしました。

    <?php endif; ?>
    </li>
    </ul>

    上記については申し訳ございません。
    提示していなかったのですがこのコードの上にもう1つ
    全体を囲う

    <ul>
    <li>

    があるのです。
    お騒がせしました。

    実は1点だけ困っていることがありまして・・。

    最初からなのですがなぜか小カテゴリが出なくて
    困ってしまっています。やはりプラグインですかね・・。

    トピック投稿者 bootscafe

    (@bootscafe)

    一番上で

    $cats = get_categories('hide_empty=0');

    とすれば全部出てくるとは思いますが、Tree構造にはなりません。

    りカーシブに関数を書けば、割とすっきりとプログラムすることができます。が、リカーシブコールの関数を書いたことがないのなら、Dagon Design Sitemap Generator を導入して POST だけを表示するようにした方がてっとり早いと思います。表示が気に食わないときは、HTMLを表示しているところを見つけてPHPを修正してやればOKだと思います。

    他にも探せば、もっとピッタリのプラグインがあるかもしれません。

    トピック投稿者 bootscafe

    (@bootscafe)

    Dagon Design Sitemap Generatorを使ってみたいと思います!
    ありがとうございました!

6件の返信を表示中 - 1 - 6件目 (全6件中)
  • トピック「サイトマップ作成」には新たに返信することはできません。