StaticPressで投稿者アーカイブやアタッチメントページ、wp-contentなどの生成を除外する方法

WordPressで静的ページを生成するのに便利なプラグイン、StaticPress。そのまま使用しても何も問題はないのですが、必要のないアタッチメントページや投稿者アーカイブが生成されてしまうのが何となく面倒に感じたので、除外する方法を調べたのでメモ。

使用しているStaticPressのバージョン:0.4.4

除外する方法は凄くシンプル、「/staticpress/includes/class-static_press.php」の中で、必要のないページを生成する部分をコメントアウトするだけ。

アタッチメントページを除外

ギャラリーというんでしょうか、画像が1枚だけ表示されているアタッチメントのページを除外する方法。

「class-static_press.php」の719行目を、

where (post_status = 'publish' or post_type = 'attachment')

から

where (post_status = 'publish' /* or post_type = 'attachment' */)

へ、コメントアウト。

これでアタッチメントのページは生成されなくなります。

投稿者アーカイブを除外

投稿者の名前でソートされる記事一覧のページを除外する方法。

「class-static_press.php」の193行目と376行目を、

//case 'author_archive':

650行目を、

//$urls = array_merge($urls, $this->author_url());

3箇所をコメントアウト。

wp-contentフォルダなどを除外

wp-contentフォルダなどを除外する方法。

「class-static_press.php」の869行目から872行目、

$this->scan_file(trailingslashit(ABSPATH), '{'.implode(',',$static_files_filter).'}', false),
$this->scan_file(trailingslashit(ABSPATH).'wp-admin/', '{'.implode(',',$static_files_filter).'}', true),
$this->scan_file(trailingslashit(ABSPATH).'wp-includes/', '{'.implode(',',$static_files_filter).'}', true),
$this->scan_file(trailingslashit(WP_CONTENT_DIR), '{'.implode(',',$static_files_filter).'}', true)

必要のないフォルダの行をコメントアウト。全部必要のない時は、

//$this->scan_file(trailingslashit(ABSPATH), '{'.implode(',',$static_files_filter).'}', false),
//$this->scan_file(trailingslashit(ABSPATH).'wp-admin/', '{'.implode(',',$static_files_filter).'}', true),
//$this->scan_file(trailingslashit(ABSPATH).'wp-includes/', '{'.implode(',',$static_files_filter).'}', true),
//$this->scan_file(trailingslashit(WP_CONTENT_DIR), '{'.implode(',',$static_files_filter).'}', true)

このようにコメントアウト。

headの中に書き込まれる、Last-Modifiedを除外

StaticPressでページを生成すると、headの中に「<meta http-equiv=”Last-Modified” content=」というメタタグでページの生成日時が書き込まれるので、コレを除外。

Last-Modifiedがあるほうがブラウザやクローラーなどに対していいのかもしれませんが、無くすことによるデメリットも分からなかったので、とりあえず除外してみました。

「class-static_press.php」の463行目から478行目、

public function add_last_modified($content, $http_code = 200) {
 if (intval($http_code) === 200) {
  $type = preg_match('#<!DOCTYPE html>#i', $content) ? 'html' : 'xhtml';
  switch ( $type ) {
  case 'html':
   $last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT">', gmdate("D, d M Y H:i:s"));
   break;
  case 'xhtml':
  default:
   $last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT" />', gmdate("D, d M Y H:i:s"));
   break;
  }
  $content = preg_replace('#(<head>|<head [^>]+>)#ism', '$1'."\n".$last_modified, $content);
 }
 return $content;
}

を、以下のように3箇所をコメントアウト。

public function add_last_modified($content, $http_code = 200) {
 if (intval($http_code) === 200) {
  $type = preg_match('#<!DOCTYPE html>#i', $content) ? 'html' : 'xhtml';
  switch ( $type ) {
  case 'html':
   //$last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT">', gmdate("D, d M Y H:i:s"));
   break;
  case 'xhtml':
  default:
   //$last_modified = sprintf('<meta http-equiv="Last-Modified" content="%s GMT" />', gmdate("D, d M Y H:i:s"));
   break;
  }
  //$content = preg_replace('#(<head>|<head [^>]+>)#ism', '$1'."\n".$last_modified, $content);
 }
 return $content;
}

のようにコメントアウト。

まとめ

必要のない部分を適宜コメントアウトしていけば、凄くスッキリした静的ページが生成されるので管理も楽になります。