レ点腫瘍学ノート

2021-02-08

descriptionプラグインを使っているかどうかでmetaをわける

Top > pukiwikiカスタマイズ箇所 > 2021 > descriptionプラグインを使っているかどうかでmetaをわける

pukiwikiではdescriptionプラグインを使えばmetaタグに記載するdescriptionの中身をスキンに埋め込まれている$head_tagに挿入することができます。

しかし全てのページにこのプラグインを使っているわけではないので、このプラグインを使っていないページでは自動的に本文の最初の指定文字数だけをmetaタグにdescriptionとして埋め込んでくれると便利です。そこで、スキンの<head>内に下記のコードを記載しておくことにしました。これで本文のうち最初の100文字を自動的にmetaタグ内にdescriptionとして埋め込んでくれます。

<?php if( strpos($head_tag,'<meta http-equiv="description"') === false ) { ?>
<meta name="description" content="<?php echo $str = str_replace(array("\r\n", "\n"), '', mb_substr(strip_htmltag($body, $all = TRUE), 1, 100, "UTF-8")); ?>" />
<?php } ?>

まあ、なんとなくコードが冗長なのでもう少しスマートに記載する方法もありそうな気がしますが…。

OGPも埋め込みたい場合

OGPにもdescriptionがあります。OGPにも同様のものを埋め込みたい場合は

<?php if( strpos($head_tag,'<meta http-equiv="description"') === false ) { ?>
<meta name="description" content="<?php echo $str = str_replace(array("\r\n", "\n"), '', mb_substr(strip_htmltag($body, $all = TRUE), 1, 100, "UTF-8")); ?>" />
<meta property="og:description" content="<?php echo $str = str_replace(array("\r\n", "\n"), '', mb_substr(strip_htmltag($body, $all = TRUE), 1, 170, "UTF-8")); ?>" />
<?php } ?>

としておきます。そしてdescription.inc.phpのほうも17行目あたりを

$head_tags[] = '<meta http-equiv="description" content="'.$content.'">
<meta property="og:description" content="'.$content.'">';

としておけば$head_tagのほうにもOGP用のdescriptionが挿入されますね。

スキンの任意の場所にdescriptionタグの中身を埋め込みたい場合

description.inc.phpにさらに改修を加えて、descriptionプラグインに格納した記載内容をグローバル変数として取得できるようにする方法も記載しておきます。

まずdescriptionプラグインを下記のように改造します。改造箇所は、下記の「// global変数に収納」とした部分と、function plugin_description_inline()以下の部分です。

<?php

function plugin_description_convert()
{
	global $head_tags, $plugin_description_message;

	$num = func_num_args();
	if ($num == 0) { return 'Usage: #description(description)'; }
	$args = func_get_args();
	$description = htmlspecialchars($args[0]);

	// global変数に収納
	$messages['_plugin_description'] = $description;
	set_plugin_messages($messages);

	$head_tags[] = '<meta http-equiv="description" content="'.$description.'"><meta property="og:description" content="'.$description.'">';
	return '';
}

// インライン呼び出しコード
function plugin_description_inline()
{
	global $_plugin_description;
	return $_plugin_description;
}
?>

これで、スキン本体内では下記のPHPコードでdescriptionプラグインを呼び出してやれば任意の場所でdescriptionプラグインに収納した記載内容を呼び出すことができます。

<?php echo plugin_description_inline() /*これで呼び出し*/ ?>

metaタグにdescriptionを入れるだけならわざわざこのような方法を使う必要はありませんが、JSON-LDなどにもdescriptionを入れたいとかサムネイルを作りたいというような場合にはこの方法が便利です。

参考にしたサイト

ここまでたどり着くのにかなり苦戦しました。特にプラグイン内でグローバル変数を定義してもそれがスキンで利用できないことを把握するまでかなりの時間がかかってしまいました。参考になったサイトを記載しておきます。

PukiWiki.dev / Plug-inの仕様
https://pukiwiki.osdn.jp/dev/

DovoWiki / グローバル変数を定義する
https://wiki.dobon.net/

当サイトはpukiwiki 1.5系をカスタマイズして使用しています。pukiwikiは2000年〜2010年の頃に非常にユーザーが増えて様々なカスタマイズが発表されたり派生版が作られたりしましたが、最近はwordpressなどのブログベースのWEBアプリケーションが主流になっておりpukiwikiのカスタマイズに関する情報は入手しにくく
SEO対策のための Webライティング実践講座 | 鈴木 良治 |本 | 通販 | Amazon
Amazonで鈴木 良治のSEO対策のための Webライティング実践講座。アマゾンならポイント還元本が多数。鈴木 良治作品ほか、お急ぎ便対象商品は当日お届けも可能。またSEO対策のための Webライティング実践講座もアマゾン配送商品なら通常配送無料。
https://amzn.to/3rt7mha