Cocoonフォーラム

サイト内検索
書き込みの前に以下の3点をご確認ください。
  1. 1つのトピックにつき1つの質問を書き込んでください
  2. 不具合・カスタマイズ対象ページのURLを提示高速化を無効にしてください
  3. 該当部分のキャプチャ・環境情報とともに書き込んでいただけると助かります

何を書き込んだら良いか分からない場合は、以下のテンプレートをコピペしてご利用ください。

不具合・カスタマイズ対象ページのURL:

相談内容:

不具合の発生手順:

解決のために試したこと:

※文字だけでは正しく伝わらない可能性があるため、スクショ画像の添付もお願いします。
※高速化設定をしている場合は無効にしてください。
環境情報:

※↑こちらに「Cocoon設定 → テーマ情報」にある「環境情報」を貼り付けてください。

環境情報の取得方法はこちら。
https://wp-cocoon.com/theme-report/
高速化設定を無効にするにはこちら。
https://wp-cocoon.com/theme-trouble/

フォーラム利用ガイドリンク

  1. フォーラムガイドライン
  2. よくある質問と答え(FAQ)
  3. サポート対象外のケース
  4. 原因不明の不具合用トラブルシューティング
  5. トピックにHTMLを貼り付ける方法(推奨ツール:notepad.pw
  6. 真っ白画面でのエラーメッセージの確認方法
  7. ブラウザ環境チェックツール
  8. Cocoonカスタマイズ依頼

フォーラム質問後、問題等が解決した場合は結果を書き込んでいただけると幸いです。同様の問題で調べている方には、結果が一番気になる部分となります。

サイトマップをツリー上に作る方法
 
共有:
通知
すべてクリア

[解決済] サイトマップをツリー上に作る方法

8 投稿
2 ユーザー
6 Reactions
105 表示
(@xxxciho)
Eminent Member Registered
結合: 3週間前
投稿: 12
トピックスターター  

表題の通り、サイトマップをツリー構造で作る方法はあるでしょうか。

 

6年以上前、ルクセリタスを使っていた頃に画像のようなツリー型のサイトマップを作成したことがあり、

その時はプラグインか何かを使って簡単に作成でき、またページが増えるたびに自動更新できていた覚えがあるのですが、

どのプラグインか失念してしまったため質問しました。

Cocoonならではの機能でなくてもプラグインなどで可能であれば教えていただきたいです。

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

 


   
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3544
 

●回答

サイトマップのツリー表示はテーマLuxeritasの独自機能のようです。

https://thk.kanzae.net/wp/point/t295/

Cocoonはツリー表示しません。

https://wp-cocoon.com/sitemap-shortcode/


●プラグイン

PS Auto Sitemapのスタイル「ドキュメントツリー」が似た感じかと思います。
現在、プラグインはダウンロード停止となっています。

https://fujimotoyousuke.com/ps-auto-sitemap_wordpress/


●補足

カテゴリーをツリー表示し、各投稿を表示させる独自のショートコードとCSSで実現可能です。
ツリー表示するにあたり、投稿に複数カテゴリーを設定した場合の考慮が必要です。

サイトマップ自体、余り閲覧されなず、わざわざツリー表示する必要はないと思います。


   
わいひら reacted
(@xxxciho)
Eminent Member Registered
結合: 3週間前
投稿: 12
トピックスターター  

@chu-ya 

回答ありがとうございます。やはりルクセリタスの機能だったんですね…。

現在、縦軸で上から下に年代が下る年表のようなものをサイトのメインに据えたいと思っており、
ツリー構造のサイトマップが一番それに近かったので、もしCSSなどで実現できればそうしたいと思っています。

浅学で申し訳ないのですが、投稿していただいた画像のようなツリーは
どのようなコードで描かれているのでしょうか。


   
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3544
 

浅学で申し訳ないのですが、投稿していただいた画像のようなツリーは
どのようなコードで描かれているのでしょうか。

以下が参考になりませんか?

https://www.will3in.co.jp/frontend-blog/article/expression-sitemap-tree-with-css-only/

 

 


   
わいひら reacted
(@xxxciho)
Eminent Member Registered
結合: 3週間前
投稿: 12
トピックスターター  

@chu-ya 

ご教示ありがとうございます。
確かに上記HTMLとCSSを設定すると、罫線を使ったサイトツリーのようにはなりましたが、
こちらは投稿が増えたときに自動更新される機能はないですよね?

もしそうであれば、毎回手動で増やすとなると手間になってしまうので、
自動更新される方を優先し罫線デザインは諦めようと思いますが、
上記はお間違い無いでしょうか。


   
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3544
 

投稿者:: @xxxciho

こちらは投稿が増えたときに自動更新される機能はないですよね?

本件はコピペで実現でできる内容ではありません。

ご自身で、ツリー表示するCSSとHTMLを参考に、ショートコードを作成すれば、自動化できると言うことです。

Cocoonのsitemapショートコードで十分だと思いますが?

 


   
わいひら reacted
大門未知子
(@chu-ya)
Illustrious Member Registered
結合: 3年前
投稿: 3544
 

●答え

ショートコードsitemap_treeでツリー表示します。自己責任で願います。

functions.phpに追加。

// サイトマップをツリー形式で表示するショートコード
add_shortcode('sitemap_tree', function() {
  $output = '<ul class="my-hierarchy">';

  // 固定ページのツリー表示
  $output .= '<li><strong>固定ページ</strong><ul>';
  $pages = get_pages(['sort_column' => 'menu_order']);
  $output .= sitemap_tree_render_pages($pages);
  $output .= '</ul></li>';

  // 投稿のカテゴリーと投稿のツリー表示
  $output .= '<li><strong>投稿</strong><ul>';
  $output .= sitemap_tree_render_categories(0);
  $output .= '</ul></li>';

  $output .= '</ul>';

  return $output;
});


// 固定ページを階層構造で再帰的に表示
function sitemap_tree_render_pages($pages, $parent_id = 0) {
  $output = '';
  foreach ($pages as $page) {
    if ($page->post_parent == $parent_id) {
      $output .= '<li><a href="' . get_permalink($page) . '">' . esc_html($page->post_title) . '</a>';
      $children = sitemap_tree_render_pages($pages, $page->ID);
      if ($children) {
        $output .= '<ul>' . $children . '</ul>';
      }
      $output .= '</li>';
    }
  }
  return $output;
}

// カテゴリーと投稿を階層構造で再帰的に表示
function sitemap_tree_render_categories($parent_id) {
  $output = '';
  $categories = get_categories([
    'parent' => $parent_id,
    'hide_empty' => false
  ]);

  foreach ($categories as $category) {
    $output .= '<li>' . esc_html($category->name);
    
    // 投稿を取得
    $posts = get_posts([
      'category' => $category->term_id,
      'numberposts' => -1
    ]);

    // 投稿または子カテゴリーがあればリスト表示
    if (!empty($posts) || has_child_category($category->term_id)) {
      $output .= '<ul>';

      // 投稿をリスト化
      foreach ($posts as $post) {
        $output .= '<li><a href="' . get_permalink($post) . '">' . esc_html($post->post_title) . '</a></li>';
      }

      // 子カテゴリーを再帰的に処理
      $output .= sitemap_tree_render_categories($category->term_id);

      $output .= '</ul>';
    }

    $output .= '</li>';
  }

  return $output;
}

// 指定カテゴリーに子カテゴリーが存在するかチェック
function has_child_category($term_id) {
  $children = get_categories([
    'parent' => $term_id,
    'hide_empty' => false
  ]);
  return !empty($children);
}

style.cssに追加。

.article .my-hierarchy {
  background-color: #000;
  color: #eaeaea;
  font-family: 'Menlo', 'Consolas', 'monaco', 'monospace', 'MS ゴシック', sans-serif;
  padding: 15px;
  overflow-x: auto;
  white-space: nowrap;
}

.article .my-hierarchy::-webkit-scrollbar {
  height: 10px;
}

.article .my-hierarchy::-webkit-scrollbar-thumb {
  background-color: #ccc;
}

.article .my-hierarchy li {
  list-style: none;
  margin: 0;
  padding-left: 1em;
  position: relative;
}

.article .my-hierarchy ul {
  margin: 0;
  padding-left: 1em;
}

.article .my-hierarchy ul li:before {
  background-color: #fff;
  content: '';
  height: 1px;
  left: -0.5em;
  margin: auto;
  position: absolute;
  top: 0.75em;
  width: 1em;
}

.article .my-hierarchy ul li:after {
  background-color: #fff;
  bottom: 0;
  content: '';
  height: 100%;
  left: -0.5em;
  position: absolute;
  top: 0;
  width: 1px;
}

.article .my-hierarchy ul li:last-child:after {
  height: 0.75em;
}

   
わいひら reacted
(@xxxciho)
Eminent Member Registered
結合: 3週間前
投稿: 12
トピックスターター  

@chu-ya 
とてもわかりやすい解説ありがとうございました。
無事導入することができました。


   
共有:

問題の解決に至った場合には、トピック冒頭の「解決済み」をクリックしていただけますと幸いです。

また、有用な回答があった場合は返信右下にある「いいね!」もご活用ください。回答者の励みになります。

「いいね!」機能はフォーラム登録者のみが利用できる機能です。

CC BY-ND 2.1)準じていれば(リンクを貼っていただければ)転載も自由です。カスタマイズ記事を書く際にコード等をコピペ利用していただいて構いません。

フォーラムの使い方がよくわからない場合は、テストトピックで自由にテストしていただいて構いません。

最近の書き込みはこちら。

詳細なカスタマイズ依頼をするならこちら。

タイトルとURLをコピーしました