レ点腫瘍学ノート

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

#author("2021-02-09T06:51:17+09:00;2021-02-08T23:42:13+09:00","default:tgoto","tgoto")
pukiwikiでは[[descriptionプラグイン>https://pukiwiki.osdn.jp/dev/?BugTrack/721]]を使えば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も埋め込みたい場合 [#w2d0619d]

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タグの中身を埋め込みたい場合 [#i6e93866]

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を入れたいとかサムネイルを作りたいというような場合にはこの方法が便利です。

**参考にしたサイト [#vc028809]

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

PukiWiki.dev / Plug-inの仕様 
[[https://pukiwiki.osdn.jp/dev/>https://pukiwiki.osdn.jp/dev/?PukiWiki/Plug-in%E3%81%AE%E4%BB%95%E6%A7%98]]

DovoWiki / グローバル変数を定義する
[[https://wiki.dobon.net/>https://wiki.dobon.net/index.php?PukiWiki%2FTips%2F%A5%D7%A5%E9%A5%B0%A5%A4%A5%F3%A4%CE%BA%EE%C0%AE%2F%A5%B0%A5%ED%A1%BC%A5%D0%A5%EB%CA%D1%BF%F4%A4%F2%C4%EA%B5%C1%A4%B9%A4%EB]]


#ogpi(https://oncologynote.com/?b733981a8c)