| yumのインストールエラーブログトップ | CMS関連 | PHP関連 | WEB関連全般 | プラグイン作るときは自動保存に注意【WordPress】
WordPressのサイトマップを作る【プラグインなし】
この記事は1年以上前の記事のため、内容が古い可能性があります。
WordPressのサイトマップといえば「Sitemap Generator」プラグインが有名でいつもお世話になってますが、今回はプラグインなしで作ってみることにしました。
早速ですが、出来上がったものがこちら。
//カテゴリーと投稿をツリー構造で取得(引数:親カテゴリID, カテゴリーのulタグの表示フラグ) function getCategoryAndPostTree($parent_id = 0, $cat_ul_use_flag = 1){ $numberposts = 20; //投稿の表示件数 $return = ""; //カテゴリー取得 $categories = get_terms('category','parent='.$parent_id.'&hide_empty=0&orderby=order&order=asc'); if($categories){ if($cat_ul_use_flag == 1) $return .= "<ul>\n"; foreach($categories as $category_values){ $return .= '<li><a href="'.get_category_link($category_values->term_id).'" >'.$category_values->name."</a>\n"; //投稿取得 add_filter('pre_option_category_children', 'my_category_children'); $posts = get_posts(array('numberposts'=>$numberposts, 'category'=>$category_values->term_id)); remove_filter('pre_option_category_children', 'my_category_children'); $arg_ul_use_flag = 1; if($posts){ $return .= "<ul>\n"; foreach($posts as $post_values){ $return .= '<li><a href="'.get_permalink($post_values->ID).'">'.$post_values->post_title."</a></li>\n"; } $arg_ul_use_flag = 0; } $return .= getCategoryAndPostTree($category_values->term_id, $arg_ul_use_flag); if($posts) $return .= "</ul>\n"; $return .= "</li>\n"; } if($cat_ul_use_flag == 1) $return .= "</ul>\n"; } return $return; } //サブカテゴリに所属する投稿記事を排除する function my_category_children( $return ) { return array(); } //サイトマップ function simple_sitemap(){ global $wpdb; echo '<div id="sitemap">'; //カテゴリと投稿のツリー $get_category_and_post .= getCategoryAndPostTree(0); echo $get_category_and_post; //固定ページのツリー $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>'; echo '</div>'; } add_shortcode('sitemap', 'simple_sitemap');
02~35行目:カテゴリーおよび投稿のツリーを作る関数
38~40行目:サブカテゴリーの投稿を表示しないために使用する関数
43~72行目:サイトマップ本体の関数
73行目:ショートコード設定
03行目の「$numberposts」には「投稿」の表示件数を入れてください。
07行目、「orderby=order」となってますが、これは「My Category Order」プラグインを使っていること前提となっています。使っていない場合は、他の値に変えるか、&orderby=orderを消してください。
15行目(add_filter~)と17行目(remove_filter~)は、サブカテゴリー以下に所属する投稿を表示しないための処理です(Wordpressは親切なんだか迷惑なんだか、とあるカテゴリーに所属する投稿を取得した場合、そのサブカテゴリーに所属する投稿まで取得してしまいます。しかもget_postsにはそれを解除するキーワードが存在しない)。もし親カテゴリーの時にもサブカテゴリーに所属する投稿を表示したい場合は、この行は消してください。
functions.phpに上記のプログラムを追加し、固定ページの内容に[sitemap]を記述すれば完成です。
サイトマップのデモ
バリデーションチェックもしたし、リストのもつれは大丈夫なはず・・・
参考サイト
お手軽WordPress Tips:プラグインを使わず、簡単なコードでシンプルなサイトマップを作成する - かちびと.net
トラックバック
トラックバックURL
コメントする
※メールアドレスが公開されることはありません。