この記事は公開から1年以上経過しており、内容が古くなっている可能性があります。
WordPressのサイトマップといえば「Sitemap Generator」プラグインが有名でいつもお世話になってますが、今回はプラグインなしで作ってみることにしました。
早速ですが、出来上がったものがこちら。
[PHP]
//カテゴリーと投稿をツリー構造で取得(引数:親カテゴリ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 .= “
- \n”;
- ID).'”>’.$post_values->post_title.”
foreach($categories as $category_values){
$return .= ‘
\n”;
}
$arg_ul_use_flag = 0;
}
$return .= getCategoryAndPostTree($category_values->term_id, $arg_ul_use_flag);
if($posts) $return .= “
\n”;
$return .= “
\n”;
}
if($cat_ul_use_flag == 1) $return .= “
\n”;
}
return $return;
}
//サブカテゴリに所属する投稿記事を排除する
function my_category_children( $return ) {
return array();
}
//サイトマップ
function simple_sitemap(){
global $wpdb;
echo ‘
//カテゴリと投稿のツリー
$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 ‘
- ‘;
wp_list_pages($args);
echo ‘
‘;
echo ‘
‘;
}
add_shortcode(‘sitemap’, ‘simple_sitemap’);
[/PHP]
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に上記のプログラムを追加し、固定ページの内容に
固定ページ
投稿一覧
- Adobe Dreamweaverでリンク切れチェック
- APIを使って自分のInstagram投稿写真を取得する方法【Instagram Basic Display API】
- Bing日本版正式リリース
- bloginfoが非推奨?【WordPress】
- bzip2とかマニアックな圧縮をしたいなら7-zip
- cakePHP2.x系をレンタルサーバで運用する祭の注意点
- cakePHPでvalidatesを使う場合の注意事項
- cakephpでエラー表示
- cakePHPでデータベースのテーブルにフィールドを追加したときに発生した問題
- cakePHPでデータベースのテーブルにフィールドを追加したときに発生した問題2
- cakePHPの初期設定【オールグリーンにする方法】
- Connection error: Too many connections
- Contact form 7が日本語にならない!
- Contact Form 7のメッセージの表示位置【WordPress】
- Contact form 7を使用する際の注意事項
- CPIサーバーでForbiddenが出た場合
- CSS3 PIE 1.0.0がついに公開!
- CSVループコンバータ!
- Custom Field Suiteを使っている場合の、カスタムフィールドの内容登録の方法
- Custom Post Type UI でうっかりDeleteしてしまう【WordPress】
- EC-CUBE2系でドメイン変更するとログインできなくなる
- EC-CUBEでクレジットカード決済が表示されない
- EC-CUBEテンプレート用タグ
- EOF内にて変数を使用する方法
- Error 500 「Internal Server Error」について
- Facebook Developersでアプリを登録する。
- Facebookのフレンド登録には注意しようというお話
- Facebookページにある”すべての”アルバムの写真をPHPで取得する方法
- Facebookページにある”特定の”アルバムの写真をPHPで取得する方法
- Facebookページのタイムラインを取得する方法
- Fatal error: Call to undefined function ldap_connect()
- FCKEditorのファイルアップロードパス変更方法
- Fedora11でLDAPサーバ構築
- Fedora13のインストールと初期設定
- fgetcsvのバグ
- Firefoxは勝手にアクセスする
- fopenをURLで設定可能にするためのhtaccess記述方法
- FQLで特定のページの「いいね!」ボタンが押された回数などを取得する方法【Facebook】
- get_pageの注意事項【WordPress】
- get_postsで取得したデータでも、ショートコードを実行する【WordPress】
- Gmailの2段階認証について
- Google Chromeでチェックボックスが表示されない
- Google Cloudを初めて使う場合
- Google Map API v3のメモ書き
- Google Map APIのAPIキーの取得方法
- Google Map へのリンク
- Google+1(プラスワン)ボタンを設置する
- Google+ページなるものが作れるようになったようです。
- Googleアナリティクスコードは</head>タグの直前に
- Googleカスタム検索
- GoogleマップAPI v3で地図とマーカー・バルーンを表示プログラムのバグ修正
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(個別版)
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(個別版) version1.3
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(個別版) version1.4b
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(複数版)
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(複数版) version1.3
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(複数版) version1.4b
- GoogleマップAPI v3で地図とマーカー・バルーンを表示(複数版) その2
- GoogleマップAPIで地図とマーカー・バルーンを表示(個別版)
- GoogleマップAPIで地図とマーカー・バルーンを表示(複数版)
- GoogleマップAPIで座標取得その1
- GoogleマップAPIで座標取得その2
- Guetzliで10回ほど圧縮を繰り返してみた
- hal.dll.の破損?【WindowsXPが立ち上がらない】
- htcが効かないサーバの場合
- HTML5で3Dやろうぜ!
- HTML5でお絵かきツール
- HTML5で円グラフを表示する(Canvas)
- HTML5で棒グラフを表示する(Canvas)
- HTML5のvideoの現状
- htmlspecialcharsに注意【PHP】
- https(SSL)の警告が消えない
- IE8がよくフリーズする
- IE8がよく落ちる
- IE9でMTが動かないよ問題
- IE9でドロップシャドウ(box-shadow)が効かない
- IE9ベータ版でCSS3テスト
- IE9ベータ版の動作
- IEでHTML5で追加された新要素を使用する方法
- IEでもCSS3 その1(ie-css3)
- IEでもCSS3 その2(PIE)
- IEでもCSS3 その3(css3shadow)
- IEで文字化け
- IE対策で必要なJavascript同士の干渉報告 その1
- ImageMagickをPHPで使う方法【さくらインターネット】
- includeしたものを変数に入れる【PHP】
- inline-blockを使うときはinline要素からアプローチせよ!
- innerHTMLの注意点(Javascript)
- iOSアプリの審査に落ちたこと
- iOS向けのGoogleMapついに帰還!
- iPad向けサイトにてjavascriptを使用する際の注意事項
- iPhoneで撮影した写真が90度傾く
- iPod touchのカレンダーにて「イベントを追加」画面から戻れなくなった
- Javascriptでの加算の注意事項(parseInt)
- Javascriptでタグに囲まれた内容を取得する(innerHTML)
- Javascriptでバルーン表示する
- javascriptでフェードイン・フェードアウトその2
- Javascriptでフェードイン・フェードアウト(setTimeout)
- Javascriptでプルダウンの選択を変更する(getElementsByTagName)
- Javascriptでプルダウンの選択を変更する(jQuery)
- Javascriptで日付の比較
- Javascriptで表示・非表示の切り替え(style)
- javascriptの実行は順番が大事
- Joruri CMSに入力フィールドを追加
- jQueryとprototype.jsを同時に使用する場合
- json_encodeかと思ったらserializeだった話
- Like Boxもうすぐ終了 Page Pluginへ乗り換え
- Like Boxを設置する【facebook】
- LIKEBOXの最小幅は292px
- linuxでよく使用するコマンド
- Linuxでファイルの中に記述さている文字列を検索する方法
- location.href (Javascript)と $_SERVER[‘HTTP_REFERER’]; (PHP)
- MD5を見破る?
- Mediaboxでエラー
- mixiイイネ!ボタン
- mixiチェックの設置方法(mixi)
- mixiページを作る 【新規登録方法】
- Movable Type を Windows環境からLinux環境へ移行する際の注意事項
- Movable Type6系でフォルダー・カテゴリーが保存できない【Ajax error: error】
- MP4(H.264)の動画でクロスブラウザ
- MT5.1ベータ版公開!
- MT5.2.3にて記事が無いカテゴリーアーカイブが出力されない【バージョンアップに注意!】
- MT5でモブログくん
- MTOS 5.1リリース!
- MTSetVarBlockの注意事項
- MTでよく使うんだけどよく忘れること。
- MTで画像一括アップロード!
- MTにてカテゴリを絞り込んで検索する方法1
- MTにてカテゴリを絞り込んで検索する方法2
- MTのエクスポート・インポート時の注意事項
- MTのカテゴリページで階層を取得する
- MTのデータベースの文字コード変換【Movable Type】
- MTのパスワードの有効文字数は8文字まで!!
- MTのプレビューでエラー
- MTタグとWordPressタグ【カテゴリー編】
- MTタグとWordPressタグ【ブログ編】
- MTタグとWordPressタグ【ブログ記事編】
- MySQL server has gone away
- mysqlからmysqliへ変える場合の置換(ただの正規表現について)
- OGP情報のキャッシュ削除
- OSによってもレイアウトに誤差が出る件 【HTML・CSS】
- PHP5.3のインストール
- phpThumb()でサムネイル生成
- PHPでLDAPに接続する
- PHPでアップロードできる上限は2GBまで!【POSTの場合】
- PHPで今現在開いているページのURLを取得する
- PHPで座標取得【Google Map API v3】
- PHPで自分のつぶやきを取得する方法【API1.1】
- PHPを用いてFacebookにログインしているユーザの基本情報を取得する方法【Facebook】
- PHPカンファレス関西がUSTREAMで配信中
- PIE version 1.0 beta3
- PIE version 1.0 beta4
- PIEで「Multiple background images」
- PIEを使用する際の注意点【印刷】
- PIEバグレポート
- PittaからGoogleAdsenseに乗り換え
- Pitta始めてみました。
- Postgresqlはテーブル名に注意
- pre_get_postsを使う場合は、管理画面にまで反映してしまわないよう注意
- prototype.js × scriptaculous.jsで不具合【Internet Explorer9】
- PS Taxonomy Expanderでクイック編集ができなくなる件
- Quick Commentsとjqueryとの併用の注意点
- RewriteCond %{REQUEST_FILENAME}の衝撃
- robots.txtが無い場合のアクセスは404で返さねばならない
- RSS Graffiti本日終了 dlvr.itへ乗り換え
- Search Console(ウェブマスターツール)でインデックス数が激減
- SQLだけでフィールド間のコピーを行う
- suExecをhomeフォルダ以下で有効にする
- SuPHP使ってるときはphp.confいらないよ
- SWFUploadをとりあえず動かす!
- Syntax Highlighter for WordPressがうまく表示されない場合
- System Checkというウィルスに注意!
- target-densitydpi=device-dpiに注意【viewport】
- Thunderbirdで全角の文字変換ができなくなった時の対処法
- TwitterのAPIの仕様変更
- Twitterウィジェット編集時の注意事項
- viewportの設定に注意
- vsftpで設定したサーバにFTP接続できない(パッシブモード)
- WEBプログラム版ブログ設置完了
- window.onloadは2度使えない。
- Windows7で突然ネットがつながらなくなった時の対処法メモ
- Windows8.1のタスクバーがフリーズしまくる
- windowsXPでメイリオを使用する方法
- windowsでppmを使用する際の注意事項
- Windows起動後、60秒後に自動的にIEを全画面表示モードで開く【バッチ】
- WordPressから直接Googleマップを設定できるプラグイン
- WordPressでTinyMCEの入力フィールドを作る場合
- wordpressでよく使用するウィジェットを関数で代用する方法
- wordpressでカテゴリー一覧を表示する方法
- wordpressでカテゴリー一覧を表示する方法2
- WordPressでコメント数とトラックバック数を表示する方法
- wordpressでシングルクォート・ダブルクォートが勝手に変換される問題点の解決方法
- wordpressでタグ一覧を表示する方法
- WordPressでドメインの違うサーバに移転したとき
- WordPressでファイルのアップロードに失敗する
- WordPressでページネイション
- WordPressで入れておきたいプラグイン
- WordPressで入れておきたいプラグイン2
- WordPressで日付を表示する際の注意事項
- WordPressで記事のコメント一覧とトラックバック一覧を表示する方法
- WordPressの「ユーザ」管理画面にてフィールドを増やす方法
- WordPressのカスタムフィールドでGoogleMAPその1
- WordPressのカスタムフィールドでGoogleMAPその2
- WordPressのサイトマップを作る【プラグインなし】
- WordPressのセキュリティについて
- WordPressのバージョン4.7と4.7.1はヤバイ
- WordPressのパーマリンクでindex.phpが勝手に挿入される。
- WordPressのマルチサイトで参加サイトが表示されない
- WordPressの検索機能をカスタマイズ
- WordPressの見落としがちな設定(ゴミ箱)
- Wordで文字キーが受け付けない場合
- wp_insert_attachmentだけではサムネイルが作られない
- wp_list_categories・get_categoriesでデータが取得できない
- WPプラグイン「Category Order and Taxonomy Terms Order」をマルチサイトで使用する場合の注意事項
- Yahooのログインで証明書エラーが出たとき
- Yahooの検索エンジンがBingに変わる?
- YoutubeのコードをW3Cバリデーションチェックでもエラーが出ないコードに変換するプログラム
- yumのインストールエラー
- ZipArchiveのextractToで日本語ファイルが解凍できない【PHP】
- 「About」ウィジェットとカテゴリ絞込み検索の相性(Movable Type)
- 「input」タグの「submit」ボタンを画像にかえる方法
- 「いいね!」ボタンが押されたとき、スクリプトを実行させる方法【Facebook・Javascript】
- 「ブログ」を更新したとき、「ウェブサイト」のインデックスも再構築する【MT】
- 【EC-CUBE2】複数商品・複数届け先を選ぶと「お支払方法・お届け時間等の指定」画面で、「お届け時間の指定」が空っぽになる不具合について
- 【MT】カスタムフィールドのテンプレートタグ名によるバグ【PostgreSQL・SQLite】
- 【WordPress】スラッグ名が重複すると、公開中の投稿ページが404になる
- 【WordPressメモ】カスタムタクソノミーのアーカイブページで、そのページのタクソノミーのスラッグ名を取得する
- 【WordPressメモ】カテゴリー(タクソノミー)のURLを取得する
- 【WordPressメモ】ブログ記事IDからカテゴリー(タクソノミー)情報を取得する
- 【まとめ】cgiを動作させる時「Internal Server Error」にならないために
- あぁ勘違い ー パーミッションについて
- いいね!ボタンを設置する方法(facebook)
- お手軽ロールオーバー
- さくらインターネットでpdftoppm
- さくらインターネットでPDFをJPEGに変換【PHP】
- さくらインターネットに大容量のDBデータをインポートする
- さくらインターネットのレンタルサーバにて、データベース大幅増量!!
- さくらインターネットの謎仕様【mod_rewrite】
- ちょ!?Facebookボタンがえらいことに
- やたらブルートフォースアタックされてる件
- アクセス解析プラグイン「StatPress Reloaded」【WordPress】
- アップロード先自動振り分けプラグイン(MT)
- イベントトラッキングがリアルタイムに反映されない?
- ウェブサイトでpng画像を使う時はカラープロファイルを削除しよう
- カゴヤの共有サーバーでアップロードファイルの上限を上げる方法
- カスタムフィールドの値が空だと、meta_queryの条件に引っかからない【WordPress】
- カスタムフィールド並び替えが数字の場合の注意点【WordPress】
- カスタムポスト(カスタム投稿)のアーカイブページを作る際の注意点
- カスタム投稿(カスタムポスト)ごとにカテゴリーを設定する【WordPress】
- キーボードの入力モードが違う・・・!
- クラウドコンピューティング
- グーテンベルグで記事を作成してみた(いまさら)
- コメントを投稿できませんでした。エラー: 不正な要求です。【MT】
- サイトのタイトルが保存できない現象【WordPress】
- サイトのレイアウトを変更しました
- サイトデザイン変更
- サブウィンドウをフルスクリーンで表示する【Javascript】
- サムネイルのデフォルトサイズを設定する(MT)
- シェアボタン廃止?
- システムテンプレートで「MTWebsites」を使う場合の注意【Movable Type】
- スラッグ名の重複対策
- スラッグ名の重複対策 改
- セッションの保持時間は意外に短い
- ゾーン設定の更新でエラー
- タイトル・内容のフック場所【WordPress】
- ツイッターのプロフィールウィジェットを埋め込む方法
- ツイートボタンを設置する方法(Twitter)
- テーブルの隙間を埋める
- トラックバック!=ピンバック?
- パスワードの「*****」表示を元に戻す方法
- ブログ再開
- プラグイン「A-form」で詰まったこと【MT】
- プラグイン作るときは自動保存に注意【WordPress】
- ベイクの方法(Maya)
- ベーシック認証解除
- ページのスラッグからデータを引き出す方法【WordPress】
- マップ表示用スクリプトをバージョンアップしました[バージョン1.4b2]
- マップ表示用スクリプトをバージョンアップしました[バージョン1.4b3]
- マップ表示用スクリプトをバージョンアップしました[バージョン1.4b4]
- マルチサイト化したWordPressのサーバ移転手順
- マルチサイト化するときはファイルアップロードサイズに注意【WordPress】
- メニューをカスタマイズ(WordPress)
- リバースプロキシ超便利!(専用サーバに限る)
- レーティング機能と「いいね!」を連動させる【Facebook】:STEP1
- レーティング機能と「いいね!」を連動させる【Facebook】:STEP2
- レーティング機能と「いいね!」を連動させる【Facebook】:STEP3
- レーティング機能と「いいね!」を連動させる【Facebook】:STEP4
- 予約公開ができない場合【WordPress】
- 他社で取得したドメインを「移管せずに」さくらインターネットで使用する方法
- 任意のドメインにアクセスしたとき、別のIPアドレスのサイトに接続する方法
- 入力フィールドを複数追加できるタイプのカスタムフィールドを扱う際の注意点
- 共有SSL(共用SSL)でContact Form 7
- 初期テーマの設定【WordPress】
- 商品ページの変数【EC-CUBE】
- 固定ページにも抜粋をつける
- 固定ページの子ページを表示するショートコード【WordPress】
- 大容量のmp4ファイルをPHPで読み込んで出力する場合
- 必要なモジュールが見つかりません Digest::SHA
- 投稿一覧の各投稿のメニューをカスタマイズする方法
- 投稿件数が0件の時、archive.phpでpost_typeを取得する方法
- 携帯サイトを確認できるアドオン
- 携帯サイトチェックアプリ
- 携帯向けサイト用に、ページのサイズを測るサイト
- 改行コードの連打
- 旧式Twitter ウィジェットついに消滅
- 検索結果をPHP化【MT】
- 画像を事前に読み込んでおく(Javascript)
- 画面が上下反転
- 管理画面の投稿やカテゴリー(カスタムタクソノミー)画面でも並び替えを反映させる【WordPress】
- 趣味・日常版のブログをこっちのサーバーへ引っ越しました
- [半角/全角]キーで入力タイプを切り替えるたびに出る通知がうざい【Windows10】
カテゴリー
サイトマップのデモ
バリデーションチェックもしたし、リストのもつれは大丈夫なはず・・・
参考サイト
お手軽WordPress Tips:プラグインを使わず、簡単なコードでシンプルなサイトマップを作成する – かちびと.net