jsonld.inc.php

サマリJSON-LD構造化データを生成・出力
リビジョン1.02
対応バージョン1.5.3
投稿者M.Taniguchi
投稿日2020-04-19 (日) 05:07:10

概要

JSON-LDを出力するプラグイン。

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

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

使い方

#jsonld

本プラグインは、MenuBar など全画面共通で表示されるページに挿入してください。
もしくは、次のコードをスキンファイル(skin/pukiwiki.skin.php等)HTML内の</body>閉じタグ直前に挿入してください。

<?php if (exist_plugin_convert('jsonld')) echo do_plugin_convert('jsonld'); ?>

なお、本プラグインを挿入できるのは1ページにつき1箇所のみです。

コード

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	$modifier, $defaultpage, $page_title, $title;

	// if (!PKWK_ALLOW_JAVASCRIPT) return '';	// JavaScriptではなくJSONなので無視

	// 二重起動禁止
	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;
}

ライセンス

GPL v3


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2020-04-20 (月) 14:09:07
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.291 sec.

OSDN