てがろぐスキンを自動生成

てがろぐ
https://www.nishishi.com/cgi/tegalog/

自鯖にマイクロブログを置けるCGI。何とも懐かしいデザイン(CGI自体が懐かしい)だが2017年作で、更新も精力的になされている。Spotify等の埋め込みにも対応している最新スクリプトである。

CSSとスキン(懐かしい)で自由にデザイン出来るという事で、WordPress製サイトの一部として馴染むように設置を試みた。

スキンの構成

  • skin-cover.html ページ全体
  • skin-onelog.html ↑に差し込まれる記事部分
  • tegalog.css

skin-cover.htmlにWordPressのヘッダとフッタを読み込ませたい。
ヘッダ内サイドバーには最新記事リスト等があるので自動生成したい。

WordPressのパーツ付きスキンを自動生成

  1. skin-cover.htmlからヘッダ・フッタを削除したskin-pre.htmlを作成
    (title、css、OGPはdocument.titleinsertAdjacentHTMLでヘッダ内に追加)
<script>
	document.title = '[[SITUATION:TITLE]] [[FREE:TITLE:MAIN]] [[FREE:TITLE:SUB]]'
	const head = document.head;
	head.insertAdjacentHTML('beforeEnd', '<link type="text/css" rel="stylesheet" href="tegalog.css">' + `[[OGP]]`);
</script>
  1. WordPressヘッダ→skin-pre.html→WordPressフッタを取り込みskin-cover.htmlを出力する関数を作成
    (file_put_contents関数は非推奨の為、WP_FileSystemを使用)
  2. function.phpでアクションフックpublish_postに関数を追加
function tg_skin() {
	require_once(ABSPATH.'wp-admin/includes/file.php');
	if (WP_Filesystem()) {
		global $wp_filesystem;
		ob_start();
		include(ABSPATH.'wp-load.php');
		get_header();
		include(ABSPATH.'../tg/skin-pre.html');
		get_footer();
		$wp_filesystem->put_contents(ABSPATH.'../tg/skin-cover.html', ob_get_contents());
		ob_end_clean();
	}
}
add_action('publish_post', 'tg_skin');

publish_postフックによってWordPressの記事を投稿・更新した際に作動し、てがろぐフォルダにskin-cover.htmlが生成される。

参考