#author("2020-04-20T13:25:34+09:00","","")
#author("2020-04-20T14:09:07+09:00","","")
** jsonld.inc.php [#p3a5a41b]
|RIGHT:100|LEFT:360|c
|~サマリ|JSON-LD構造化データを生成・出力|
|~リビジョン|1.02|
|~対応バージョン|1.5.3|
|~投稿者|[[M.Taniguchi]]|
|~投稿日|&new{2020-04-19 (日) 05:07:10};|
**概要 [#yd20b678]
JSON-LDを出力するプラグイン。~

ページの情報に基づくJSON-LD構造化データを生成し出力します。~
具体的には、記事情報 Article とパンくずリスト情報 BreadcrumbList を生成します。~
ウィキの構造を検索エンジンにより良く伝えるため(SEO)に役立ちます。

PukiWiki 1.5.3/PHP 7.4 で動作確認済み。旧バージョンでもおそらく動くと思いますが、PHPは5.2以上が必要です。

**使い方 [#pdd0ef88]

#jsonld

本プラグインは、MenuBar など全画面共通で表示されるページに挿入してください。~
もしくは、次のコードをスキンファイル(skin/pukiwiki.skin.php等)HTML内の</body>閉じタグ直前に挿入してください。~
 <?php if (exist_plugin_convert('jsonld')) echo do_plugin_convert('jsonld'); ?>
なお、本プラグインを挿入できるのは1ページにつき1箇所のみです。

**コード [#s0c8fd29]

jsonld.inc.php~
(下記のコードをコピーして、plugin ディレクトリに jsonld.inc.php というファイル名で保存してください)

 <?php
 /*
 PukiWiki - Yet another WikiWikiWeb clone.
 jsonld.inc.php, v1.02 2020 M.Taniguchi
 License: GPL v3 or (at your option) any later version
 
 JSON-LDを出力するプラグイン。
 
 ページの情報に基づくJSON-LD構造化データを生成し出力します。
 具体的には、記事情報 Article とパンくずリスト情報 BreadcrumbList を生成します。
 ウィキの構造を検索エンジンにより良く伝えるため(SEO)に役立ちます。
 
 【使い方】
 #jsonld
 
 本プラグインは、MenuBar など全画面共通で表示されるページに挿入してください。
 もしくは、次のコードをスキンファイル(skin/pukiwiki.skin.php等)HTML内の</body>閉じタグ直前に挿入してください。
  <?php if (exist_plugin_convert('jsonld')) echo do_plugin_convert('jsonld'); ?>
 なお、本プラグインを挿入できるのは1ページにつき1箇所のみです。
 */
 
 define('PLUGIN_JSONLD_ARTICLE', true);			// Article を出力
 define('PLUGIN_JSONLD_BREADCRUMBLIST', true);	// BreadcrumbList を出力
 
 function plugin_jsonld_convert() {
 	global	$_jsonld_messages, $modifier, $defaultpage, $page_title, $title;
 	global	$modifier, $defaultpage, $page_title, $title;
 
 	// if (!PKWK_ALLOW_JAVASCRIPT) return '';	// JavaScriptではなくJSONなので無視
 
 	// 二重起動禁止
 	if (isset($_jsonld_messages) && $_jsonld_messages != 0) return '';
 	set_plugin_messages(array('_jsonld_messages' => 1));
 	static	$included = false;
 	if ($included) return '';
 	$included = true;
 
 	$script = get_script_uri();
 	$isHome = ($title == $defaultpage);
 	$long_title = (!$isHome ? $title . ' | ' : '') . $page_title;
 	$thisPageUri = $script . (!$isHome ? '?' . str_replace('%2F', '/', urlencode($title)) : '');
 	$modifiedDate = date('Y-m-d\TH:i:sP', get_filetime($title));
 	$jsonOption = JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_APOS | JSON_HEX_QUOT;
 
 	// Article(記事情報)生成
 	if (PLUGIN_JSONLD_ARTICLE) {
 		$article = array(
 			'@context' => 'http:'.'//schema.org',
 			'@type' => 'Article',
 			'mainEntityOfPage' => array(
 				'@type' => 'WebPage',
 				'@id' => $thisPageUri
 			),
 			'datePublished' => $modifiedDate,
 			'dateModified' => $modifiedDate,
 			'author' => array(
 				'@type' => 'Person',
 				'name' => $modifier
 			),
 			'publisher' => array(
 				'@type' => 'Organization',
 				'name' => $page_title
 			),
 			'headline' => $long_title
 		);
 		$article = '<script type="application/ld+json">' . json_encode($article, $jsonOption) . '</script>';
 	} else $article = '';
 
 	// BreadcrumbList(パンくずリスト)生成
 	if (PLUGIN_JSONLD_BREADCRUMBLIST && !$isHome ) {
 		$names = explode('/', $title);
 		$path = '';
 		$i = 0;
 
 		$bread = array();
 		$bread[] = array(
 			'@type' => 'ListItem',
 			'position' => ++$i,
 			'name' => $defaultpage,
 			'item' => $script
 		);
 
 		foreach ($names as $name) {
 			$path .= (($path != '')? '/' : '') . urlencode($name);
 			$bread[] = array(
 				'@type' => 'ListItem',
 				'position' => ++$i,
 				'name' => $name,
 				'item' => $script . '?' . $path
 			);
 		}
 
 		$bread = array(
 			'@context' => 'http:'.'//schema.org',
 			'@type' => 'BreadcrumbList',
 			'itemListElement' => $bread
 		);
 		$bread = '<script type="application/ld+json">' . json_encode($bread, $jsonOption) . '</script>';
 	} else $bread = '';
 
 	return $article . $bread;
 }
 

**ライセンス [#uc35c653]

GPL v3

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Site admin: PukiWiki Development Team

PukiWiki 1.5.3+ © 2001-2020 PukiWiki Development Team. Powered by PHP 5.6.40-0+deb8u11. HTML convert time: 0.048 sec.

OSDN