プラグインを使わずに「見る」サイトマップを導入する方法 | WordPressデザインブック買っ…てしまった その3

Sitemap (Notepade1)
Sitemap (Notepade1) Photo by harpreet thinking

おはよじ!おはよじ!
どうも、おはよじ継続中の@knk_nです。

おはよじについてはまた今度書くとして、今回はプラグインを使わずにWordPress TIPSで導入したサイトマップの紹介です。

かなり前から書こうと思ってはいましたが忘れてた。。ははは(^_^;)

サイトマップを全く知らなかった私がプラグインを使わずにサイトマップ導入

それはさかのぼることひと月前…

こんなツイートを見た。サイトマップってなあに?

なるほど、目次か。
たまーに導入しているページもあったものの、あまり気にしていなかったのですが、あると便利らしい。
Google Sitemap XMLとか機械的なものは無くてもいいけど、人が見る用に目次くらいはあってもいいんじゃなかと。

@ika621さんは、プラグインを探してたようなのですが、私はそう簡単にプラグインを使うわけにはいかない
そこで、プラグインを使わずにサイトマップを導入する方法を調べてみた。

プラグインを使わずに「見る」サイトマップを導入する方法

お手軽WordPress Tips:プラグインを使わず、簡単なコードでシンプルなサイトマップを作成する – かちびと.net

探せばあるものですね。もとはこちらのページ。

WordPress Simple Sitemap – PHP – Snipplr Social Snippet Repository

載ってたコードを少しいじってこんな感じ。テーマ内のfunctions.phpの<?php 〜 ?>の間に書きましょう。
※ 導入前に必ずfunctions.phpのバックアップをとることを激しくオススメします

/** サイトマップ **/
function pinpon($the_cats,$cat_obj) {

  $rtn = false;
  $n = count($the_cats);
  if ($n==1) {
    $rtn = true;
  } else {
    if ($cat_obj->category_parent!=0) {
      $rtn = true;
      for ($i = 0; $i <$n ; $i++) {
        if ($cat_obj->cat_ID!=$the_cats[$i]->cat_ID) {
          if (!(cat_is_ancestor_of($the_cats[$i]->cat_ID,$cat_obj->cat_ID))) {
            $rtn = false;
            break;
          }
        }
      }
    } else {
      $rtn = false;
    }
  }
  return $rtn;
}

function disp_child($catid) {
  if ($catid==0) {
    $categories = get_categories('parent=0&orderby=name&order=DESC');
  } else {
    $categories = get_categories('hierarchical=0&orderby=name&order=DESC&child_of='.$catid);
  }

  if (!(empty($categories))) {
    echo '<ul>';
    foreach($categories as $category) : ?>
      <li><a href="<?php echo get_category_link($category->cat_ID); ?>"><?php echo esc_html($category->cat_name); ?></a>
      <ul>
<?php $myposts = get_posts('numberposts=-1&order=ASC&cat='.$category->cat_ID);
      foreach ($myposts as $p) {
          $cat_array = get_the_category($p->ID);
          if (pinpon($cat_array,$category)) { ?>
           <li><a href="<?php echo get_permalink($p->ID); ?>"><?php echo esc_html($p->post_title); ?></a></li>
      <?php }
      }
      disp_child($category->cat_ID); ?>
      </ul>

<?php echo '</li>';
        endforeach;
        echo '</ul>';
  }
}

function simple_sitemap(){
    echo '<div id="sitemap"><ul id="primaryNav">';
    echo '<li id="home"><a href="'. get_settings('home') .'">'. get_bloginfo('name') .'</a></li>';
    echo '<li><span>固定ページの一覧</span>';

    global $wpdb;
    $args = array('depth'        => 0,
        'show_date'    => NULL,
        'date_format'  => get_option('date_format'),
        'child_of'     => 0,
        'exclude'      => NULL,
        'include'      => NULL,
        'title_li'           => '',
        'echo'         => 1,
        'authors'      => NULL,
        'sort_column'  => 'menu_order, post_title',
        'link_before'  => NULL,
        'link_after'   => NULL,
        'exclude_tree' => NULL );

    echo '<ul>';
        wp_list_pages($args);
    echo '</ul></li>';

    echo '<li><span>カテゴリーの一覧</span>';
        disp_child(0);
        echo '</li>';

        echo '</ul>';
}
add_shortcode('sitemap', 'simple_sitemap');

あとは、WordPressの固定ページ作成でサイトマップ用のページを作り、

[sitemap]

と、書くだけ。「[]」は半角に直してください。

Nonplugin sitemap designbook wordpress theme remake3

こんな感じのお手軽サイトマップ!完全版はこちらです。
CSSもいろいろといじり倒しましたが、そのままがシンプルで一番見やすい気がしますね。

複数カテゴリの記事が表示されないので、このあたりは好みかもしれませんね。そもそも基本は1記事1カテゴリなのに複数付けてる自分が悪いんだけど。

わざわざプラグイン入れるのはちょっと…という方。functions.phpを触るのは難しいけど、コピペだけなので試してみるといいですよ。

Categories:
記事が気に入ったらシェアお願いします!