waka8*stakes

〜馬絵+林檎+Wordpress〜

Exec-PHPを捨てて、ページ+サイトマップ用固定ページテンプレート+テンプレートタグでサイトマップ

wordpress-logo-notext-rgb

投稿画面でPHPが実行できるプラグインを使って固定ページにサイトマップを作っていたのですがそのプラグインがセキュリティ以上よろしくないので同じ記述をを直接ページテンプレートに書き専用のテンプレートをこしらえる方法に変えました。

まず、固定ページでサイトマップ作成時に専用テンプレートが使えるようにするには以下のコードをテンプレートファイルの先頭に書いておきます。

<?php
/*
Template Name: サイトマップ
*/ 
?>

サイトマップを作ってみました。

必要なもの
  • 新規ページ
  • Exec-PHP専用の固定ページテンプレート
  • テンプレートタグ

当サイトは『イラスト』と『投稿』の2つの投稿タイプのコンテンツがあります。Exec-PHPを入れているページテンプレートに直接テンプレートタグを書いてのでページの編集欄に書いたテンプレートタグ等のPHPが実行されます。これによりテンプレートタグを使って投稿タイプ別にカテゴリやタクソノミーの一覧をリストで出力し、全ての個別頁へのリンクを出力して作りました。

コンテンツとメニューのリストを出力

ソース

<h2>コンテンツ1</h2>
<ul>
 <li><a href="<?php bloginfo('url'); ?>/customposts">CustomPosts</a>
  <ul>
   <?php wp_list_categories('taxonomy=タクソノミー名&title_li='); ?>
  </ul>
 </li>
</ul>
<h2>ブログ</h2>
<ul>
 <li><a href="<?php bloginfo('url'); ?>/blog">Blog</a>
  <ul>
   <?php wp_list_categories('title_li='); ?>
  </ul>
 </li>
</ul>
<h2>メニュー</h2>
<ul>
 <?php wp_list_pages('title_li='); ?>
</ul>

出力

コンテンツ1
  CustomPosts
   ・ターム1
   ・ターム2
   ・ターム3

ブログ
  Blog
   ・カテゴリー1
   ・カテゴリー2
   ・カテゴリー3

メニュー
   ・メニュー1
   ・メニュー2
   ・メニュー3

投稿タイプ毎に全記事を出力

ソース

<h3>全ての記事一覧</h3>
<?php
 $loop = new WP_Query( array( 'post_type' => '設定した投稿タイプ名' /*通常の『投稿』は『post』*/, 'posts_per_page' => -1 ) ); ?>
<ul>
<?php while ( $loop->have_posts() ) : $loop->the_post(); ?>
<li id="post-<?php the_ID(); ?>"><a href="<?php the_permalink(); ?>" title="『<?php the_title(); ?>』の絵" rel="bookmark"><?php the_title(); ?></a></li>
<?php endwhile; ?>
</ul>

以上のソースをページ編集欄に書く事で、やっつけで人間用のサイトマップを作成できました。Exec-PHPの威力を試してみたかったという気持ちもありましたがw

追記

2014-03-03 加筆

このExec-PHPというプラグインは危険な関数が使われているいう事、それから何年もアップデートされてないという事をいくつかのブログ記事で知り、現在はこのブログから既に削除しており使っておりません。特に、PHPを深く知らない素人が下手にこういうものに手を出すのは危険だと思ったので…。今あるサイトマップは専用のページテンプレートを作成し直接上記のコードを書いてアップロードしたものを使っております。
Exec-PHPを嬉しそうに使うのは「危険やぞ!」っていう事の説明は以下のサイト様が詳しいです。投稿画面でデータベースにログインする事もできてしまうみたいです。怖っ!

こういう方法もあるみたいなので機会があればショートタグ作りにも挑戦してみたいです。