【WordPress】 プライバシーポリシーページとは何か?リンクを表示・非表示にする方法。(the_privacy_policy_link、get_the_privacy_policy_linkの使い方)

privacy-five-peope-with-key-image-on-their-faces WordPress
記事内に広告が含まれていることがあります。

WordPressにはデフォルトで生成される「プライバシーポリシー」というページがあります。プライバシーポリシーは一般的な固定ページとは異なり、専用の関数でリンクを取得することができます。

どうやってページの中に挿入しているかの原理がわかれば、デフォルトのリンクを削除したり、新たにページやテンプレートの中に埋め込むことができます。

ここでは、プライバシーポリシーページのリンク表示のソースコードを追いながら、フッターに表示させる方法について解説します。

プライバシーポリシーページとは?

プライバシーポリシーページは、Wordpressによってデフォルトで生成されるページの1つです。

固定ページの中にある、右側に「- プライバシーポリシーページ」と文字が表示されているものが該当します。

タイトル欄の「プライバシーポリシー」はページの名前です。ここは好きに変更することができます。

プライバシーポリシーページの中身(デフォルト)

プライバシーポリシーページの中身はWordpressがデフォルトで指定している内容になっています。

自分のサイトのドメインを記載してくれます。Cookieの設定など変更しなければ、そのまま使えないこともないですが、日本語が違和感あるので、変更する方が無難です。

デフォルトのプライバシーポリシーページの内容

私たちについて
提案テキスト: 私たちのサイトアドレスは https://example.com です。

コメント
提案テキスト: 訪問者がこのサイトにコメントを残す際、コメントフォームに表示されているデータ、そしてスパム検出に役立てるための IP アドレスとブラウザーユーザーエージェント文字列を収集します。

メールアドレスから作成される匿名化された (「ハッシュ」とも呼ばれる) 文字列は、あなたが Gravatar サービスを使用中かどうか確認するため同サービスに提供されることがあります。同サービスのプライバシーポリシーは https://automattic.com/privacy/ にあります。コメントが承認されると、プロフィール画像がコメントとともに一般公開されます。

メディア
提案テキスト: サイトに画像をアップロードする際、位置情報 (EXIF GPS) を含む画像をアップロードするべきではありません。サイトの訪問者は、サイトから画像をダウンロードして位置データを抽出することができます。

Cookie
提案テキスト: サイトにコメントを残す際、お名前、メールアドレス、サイトを Cookie に保存することにオプトインできます。これはあなたの便宜のためであり、他のコメントを残す際に詳細情報を再入力する手間を省きます。この Cookie は1年間保持されます。

ログインページを訪問すると、お使いのブラウザーが Cookie を受け入れられるかを判断するために一時 Cookie を設定します。この Cookie は個人データを含んでおらず、ブラウザーを閉じると廃棄されます。

ログインの際さらに、ログイン情報と画面表示情報を保持するため、私たちはいくつかの Cookie を設定します。ログイン Cookie は2日間、画面表示オプション Cookie は1年間保持されます。「ログイン状態を保存する」を選択した場合、ログイン情報は2週間維持されます。ログアウトするとログイン Cookie は消去されます。

もし投稿を編集または公開すると、さらなる Cookie がブラウザーに保存されます。この Cookie は個人データを含まず、単に変更した投稿の ID を示すものです。1日で有効期限が切れます。

他サイトからの埋め込みコンテンツ
提案テキスト: このサイトの投稿には埋め込みコンテンツ (動画、画像、投稿など) が含まれます。他サイトからの埋め込みコンテンツは、訪問者がそのサイトを訪れた場合とまったく同じように振る舞います。

これらのサイトは、あなたのデータの収集、Cookie の使用、サードパーティによる追加トラッキングの埋め込み、埋め込みコンテンツとのやりとりの監視を行うことがあります。アカウントを使ってそのサイトにログイン中の場合、埋め込みコンテンツとのやりとりのトラッキングも含まれます。

あなたのデータの共有先
提案テキスト: パスワードリセットをリクエストすると、IP アドレスがリセット用のメールに含まれます。

データを保存する期間
提案テキスト: あなたがコメントを残すと、コメントとそのメタデータが無期限に保持されます。これは、モデレーションキューにコメントを保持しておく代わりに、フォローアップのコメントを自動的に認識し承認できるようにするためです。

このサイトに登録したユーザーがいる場合、その方がユーザープロフィールページで提供した個人情報を保存します。すべてのユーザーは自分の個人情報を表示、編集、削除することができます (ただしユーザー名は変更することができません)。サイト管理者もそれらの情報を表示、編集できます。

データに対するあなたの権利
提案テキスト: このサイトのアカウントを持っているか、サイトにコメントを残したことがある場合、私たちが保持するあなたについての個人データ (提供したすべてのデータを含む) をエクスポートファイルとして受け取るリクエストを行うことができます。また、個人データの消去リクエストを行うこともできます。これには、管理、法律、セキュリティ目的のために保持する義務があるデータは含まれません。

あなたのデータの送信先
提案テキスト: 訪問者によるコメントは、自動スパム検出サービスを通じて確認を行う場合があります。

なお、この内容は、Wordpress管理画面の「設定」→「プライバシー」→「ポリシーガイド」→「ポリシー」→「WordPress」の中に記載してあります。

プライバシーポリシーを新たに生成する方法

プライバシーポリシーをデフォルトのは残したままもう一つ作成したい場合や、誤って削除してしまったため再度作成したい場合に、簡単に作成することができます。

方法は大きく2つです。どちらも簡単です。

  1. プライバシーページとして新たにページを生成する。
  2. 固定ページを作成して、プライバシーポリシーページを割り当てる。

プライバシーページとして新たにページを生成する

プライバシーページとして新たにページを生成するには、Wordpress管理画面の「設定」→「プライバシー」→「設定」に進み、「生成」ボタンをクリックするだけです。

これで完成です。固定ページに新たに「プライバシーポリシー」が作成され、その編集画面が表示されます。もともとプライバシーポリシーのページがある場合は、古い方から、新たに生成したページに切り替わります。

右に表示されている「- プライバシーポリシーページ」がつけ変わっていることがポイントです。

固定ページを作成して、プライバシーポリシーページを割り当てる

固定ページを作成して、プライバシーポリシーページを割り当てることもできます。まずはベースとなるプライバシーポリシーのページを作成します。タイトルや内容はなんでも大丈夫です。

例として、「マイ・プライバシーポリシー」ページを作成しました。ここで、どのページにも、右側に「- プライバシーポリシーページ」がついていないことがポイントです。

WordPress管理画面の「設定」→「プライバシー」→「設定」に進み、「プライバシーポリシーページを選択」で、設定したいページを選びます。

すると、設定したページが、「プライバシーポリシーページ」として設定されます。

フッターリンクなど「プライバシーポリシーページ」として動的に生成される場合は変更は変更は不要ですが、ヘッダーメニューなど、静的にページやURLを指定している場合は変更が必要です。(※もしくは、新たに設定したページのパーマリンクを変更する)

プライバシーポリシーのリンクの表示例

次に、フッターテンプレートなどに「プライバシーポリシー」のアンカーリンクを設置している例をご紹介します。

フッターリンクの例

ヘッダーやフッターなどのテンプレートを作成し、これをdivタグの中に設置すれば、プライバシーポリシーページが有効であれば、挿入した位置にプライバシーポリシーのリンクを表示することができます。

もし、プライバシーポリシーページが設定されていなかったり、非公開の場合は、このリンクは表示されません。

	<?php
	if ( function_exists( 'the_privacy_policy_link' ) ) {
		the_privacy_policy_link( '<span role="separator" aria-hidden="true">', '</span>' );
	}
	?>

このコードはコピペで使いまわせます。とても重要なコードなので以降で解説します。

解説などどうでもよくて、ただテンプレートにコピペできればいいという方のために簡単に解説します。

the_privacy_policy_linkはプライバシーポリシーページが設定してあれば、そのページのタイトル名をアンカーテキストにしてリンクを設置します。

引数は以下のよう2つとることができます。引数1は呼び出したリンクの前につける文字列。引数2は後ろにつける文字列になります。

the_privacy_policy_link( 引数1, 引数2 )

引数1はspanの開始タグ、引数2はspanの閉じタグを指定しているので、呼び出したaタグをspanタグで囲む形に出力します。

spanタグのrole属性とaria-hidden属性はアクセシビリティのための情報をクローラーに伝えるものです。

role属性は、そのタグを何の目的で使っているかを伝えます。aria-hidden属性は値をtrueとすることで、ページを読み上げるときに、読み上げ対象から除外します。

プライバシーポリシーページへのリンクを表示・非表示にする方法

プライバシーポリシーページへのリンクを表示・非表示にする方法は2つあります。

  1. プライバシーポリシーページを消す(非公開にする)
  2. プライバシーポリシーを表示するタグを削除する

プライバシーポリシーページを消す、あるいは、非公開にするには、管理画面の固定ページで対象のページを操作すれば完了です。

プライバシーポリシーを表示するタグを削除するには、表示しているテンプレートを編集して、the_privacy_policy_linkの処理を削除します。

ソースコード解説

if ( function_exists( ‘the_privacy_policy_link’ ) )の意味

まず冒頭のif文ですが、これは、function_existsというPHPの関数を使って、もし「the_privacy_policy_link」という関数があるなら以下の処理を実行するとしています。

function_existsは引数に入れた名前の関数があるかを調べ、存在すればtrueを、なければfalseを返します。

the_privacy_policy_linkとは?

the_privacy_policy_linkはWordpressで設定されている関数です。プライバシーポリシーページが設定されている場合は、ページのタイトルをアンカーテキストとして、そのページへのリンクを生成します。

the_privacy_policy_linkは wp-includesディレクトリ の中の link-template.php ファイルで定義されています。

function the_privacy_policy_link( $before = '', $after = '' ) {
	echo get_the_privacy_policy_link( $before, $after );
}

$beforeと$afterの2つの引数をとります。引数で「変数名 = 値」という記述は、デフォルト値を設定しています。

指定の引数が何も渡されなかった場合は「”」を代入するという意味になります。

処理は、get_the_privacy_policy_link という関数を実行します。

get_the_privacy_policy_linkとは?

get_the_privacy_policy_linkも同じく、wp-includesディレクトリ の中の link-template.php ファイルで定義されています。

これが、プライバシーポリシーのアンカーテキストつきのaタグを生成するコアになります。

少し複雑に見えますが、一つずつ追えば簡単です。

function get_the_privacy_policy_link( $before = '', $after = '' ) {
	$link               = '';
	$privacy_policy_url = get_privacy_policy_url();
	$policy_page_id     = (int) get_option( 'wp_page_for_privacy_policy' );
	$page_title         = ( $policy_page_id ) ? get_the_title( $policy_page_id ) : '';

	if ( $privacy_policy_url && $page_title ) {
		$link = sprintf(
			'<a class="privacy-policy-link" href="%s">%s</a>',
			esc_url( $privacy_policy_url ),
			esc_html( $page_title )
		);
	}

	$link = apply_filters( 'the_privacy_policy_link', $link, $privacy_policy_url );

	if ( $link ) {
		return $before . $link . $after;
	}

	return '';

先程の、the_privacy_policy_linkで渡された2つの変数を、そのまま引数として使います。

4つの変数 (1)$link, (2)$privacy_policy_url, (3)$policy_page_id, (4)$page_title が定義されています。

そして、1つ目のif文で、(2)$privacy_policy_urlと(4)$page_title が存在するときのみ、aタグを作成し(1)$linkに代入します。

最後に2つ目のif文で(1)$linkの値がから出ない、つまり、プライバシーポリシーページが設定&公開されているなら、そのaタグの前後に、引数をつけて返す処理をしています。

逆に、プライバシーポリシーページが設定 or 公開されていない場合は何も返りません。

以下で、中身を解説していきます。

(int) get_optionとは?

初めに「$policy_page_id」の値を取得している、「(int) get_option( ‘wp_page_for_privacy_policy’ )」について解説します。

get_option関数は引数で指定したオプションを、データベースのoptionsテーブルから取得します。

ここでは引数に、「wp_page_for_privacy_policy」を指定しています。

実際にデータベースの optionsテーブルの中身を見ると、option_nameカラムの中に該当するオプションが存在しています。以下の例だと値は「703」なので、これを取得してきます。

型キャスト (int)

値の冒頭についている (int) は型キャストと呼ばれるもので、取得した値を指定した型に変換します。「(int)$変数名」のように使います。

型キャスト内容
(int)整数にする。(integer)も同じ
(bool)真偽値にする。(boolean)も同じ
(float)浮動小数点にする。(double), (real)も類似
(string)文字列にする。
(array)配列にする
(object)オブジェクトにする

このため、「(int) get_option( ‘オプション名’ )」は、optionテーブルから指定の値を取得してきて、整数型にするという意味になります。

get_privacy_policy_urlとは?

get_privacy_policy_urlはWordpressの関数で、プライバシーポリシーページのURLを返します。

こちらも同じく、wp-includesディレクトリ の中の link-template.php ファイルで定義されています。

function get_privacy_policy_url() {
	$url            = '';
	$policy_page_id = (int) get_option( 'wp_page_for_privacy_policy' );

	if ( ! empty( $policy_page_id ) && get_post_status( $policy_page_id ) === 'publish' ) {
		$url = (string) get_permalink( $policy_page_id );
	}

	return apply_filters( 'privacy_policy_url', $url, $policy_page_id );

プライバシーポリシーページのページIDが存在し、かつ、ステータスが公開なら、変数$urlにプライバシーポリシーページのURLを代入します。

! empty( $policy_page_id )とは?

empty()はPHPの関数で、引数にしていした値が空(null)であればtrueを、値が存在すればfalseを返します。

冒頭にあるビックリマーク「!」は否定の意味で、後ろに続く真偽値を反転させます。

なので、「!empty(引数)」は、指定した引数が存在すればtrueを返す、存在確認のための処理になります。

get_post_status( $policy_page_id )とは?

get_post_statusはWordpressの関数で、引数でページのIDを渡すと、そのページのステータスを返します。

ステータス内容
publish公開済み
pending承認待ち
draft下書き
auto-draft新規作成された投稿。中身がからの状態
future予約済み
private非公開(未ログインユーザーには見えない)
inheritリビジョン
trashゴミ箱の中

つまり、「get_post_status( $policy_page_id ) === ‘publish’」は、プライバシーポリシーページのステータスが公開中なら、trueになるという処理になります。

イコール3つは「===」完全一致の意味です。(文字と型が一致)

(string) get_permalinkとは?

if文で、プライバシポリシーページのIDが存在し、かつ公開中なら、以下の処理を実行します。

$url = (string) get_permalink( $policy_page_id )

get_permalink関数はWordpressの関数で、指定したIDのページのURLを取得します。型キャスト(string)で、文字列に変換し、変数$urlに格納しています。

apply_filters( ‘privacy_policy_url’, $url, $policy_page_id )とは?

最後に、apply_filters関数を使って、「privacy_policy_url」関数を実行します。

apply_filtersは以下のように使う。第1引数で関数を呼び出すためのトリガーとなるタグを指定する(※フィルターフックと呼ぶ)、第2引数で値を、第3引数以降で変数を渡す。

apply_filters( $tag, $value, $var ... )

apply_filtersで指定するタグ(フィルターフック)は、add_filter関数で登録されている必要があります。

WordPressの場合、デフォルトのフィルターフックはAPIで登録されています(サイトディレクトリの中では定義されていない)

( $policy_page_id ) ? get_the_title( $policy_page_id ) : ”;とは?

get_the_privacy_policy_link関数の変数 $page_title の値は以下のようになっています。

( $policy_page_id ) ? get_the_title( $policy_page_id ) : '';

これは三項演算子といい、if文を省略して記述したものです。

条件式 ? 処理1 : 処理2

冒頭の「条件式」trueの場合は処理1を実行。falseの場合は処理2を実行します。

ここで、条件式は「( $policy_page_id )」となっています。条件に変数などの値を指定した場合は、その値が存在すればtrue、存在しなければfalseになります。

なので、$policy_page_id が存在する、つまり、プライバシーポリシーページが存在するなら、get_the_title( $policy_page_id ) を実行します。

get_the_title()とは?

get_the_title関数は、指定したidの投稿があるかを検索し、そのタイトルを返します。

関数定義は、wp-includesディレクトリ の中の post-template.php ファイルでされています。

function get_the_title( $post = 0 ) {
	$post = get_post( $post );

	$title = isset( $post->post_title ) ? $post->post_title : '';
	$id    = isset( $post->ID ) ? $post->ID : 0;

	if ( ! is_admin() ) {
		if ( ! empty( $post->post_password ) ) {

			/* translators: %s: Protected post title. */
			$prepend = __( 'Protected: %s' );

			/**
			 * Filters the text prepended to the post title for protected posts.
			 *
			 * The filter is only applied on the front end.
			 *
			 * @since 2.8.0
			 *
			 * @param string  $prepend Text displayed before the post title.
			 *                         Default 'Protected: %s'.
			 * @param WP_Post $post    Current post object.
			 */
			$protected_title_format = apply_filters( 'protected_title_format', $prepend, $post );
			$title                  = sprintf( $protected_title_format, $title );
		} elseif ( isset( $post->post_status ) && 'private' === $post->post_status ) {

			/* translators: %s: Private post title. */
			$prepend = __( 'Private: %s' );

			/**
			 * Filters the text prepended to the post title of private posts.
			 *
			 * The filter is only applied on the front end.
			 *
			 * @since 2.8.0
			 *
			 * @param string  $prepend Text displayed before the post title.
			 *                         Default 'Private: %s'.
			 * @param WP_Post $post    Current post object.
			 */
			$private_title_format = apply_filters( 'private_title_format', $prepend, $post );
			$title                = sprintf( $private_title_format, $title );
		}
	}

	/**
	 * Filters the post title.
	 *
	 * @since 0.71
	 *
	 * @param string $title The post title.
	 * @param int    $id    The post ID.
	 */
	return apply_filters( 'the_title', $title, $id );
}

the_titleフィルターフックで、esc_html関数に飛びというように処理がつながっています。脱線するので、ここでは説明を割愛します。

aタグの生成

次に、aタグを生成する処理についてです。get_the_privacy_policy_link関数の中盤に記述してあります。

	if ( $privacy_policy_url && $page_title ) {
		$link = sprintf(
			'<a class="privacy-policy-link" href="%s">%s</a>',
			esc_url( $privacy_policy_url ),
			esc_html( $page_title )
		);
	}

冒頭のif文は、「$privacy_policy_url」が存在、かつ 、「 $page_title」が存在するなら、次の処理を行うという記述です。

sprintf関数

sprintfはPHPの関数で、指定した書式で文字列を生成します。

sprintf ( string $format , mixed ...$values ) 

第1引数の$formatで、大元となるフォーマットを文字列で指定します。

sprintfの便利な点は、指定子を使って、表示する内容を動的に指定できることです。今回の例だと、$formatは以下のようになります。

%sというのが指定子で、文字列として値が入ることを示します。代入する値は、第2引数以降で指定します。

'<a class="privacy-policy-link" href="%s">%s</a>'

上記のように、指定子が複数ある場合は、1つ目の%sに、第2引数で指定した値、2つ目の%sには第3引数で指定子た値が順に入ります。(※指定子の数と、第2引数以降の引数の数が一致する必要がある)

よって、「href=”%s”」には「esc_url( $privacy_policy_url )」が、「>%s</a>」には「esc_html( $page_title )」が入ります。

esc_urlとは?

esc_urlとは、Wordpressの関数で、指定したURLを無害化するために使います。httpやhttpsなどのプロトコルを指定して、「&」や「’」などのURLには使えない記号などを削除します。

esc_url( $privacy_policy_url )

プライバシーポリシーページのURLが、WEB上で問題なく閲覧できる文字列になることを保証しています。

esc_htmlとは?

esc_htmlとは、Wordpressの関数で、指定した要素のタグを排除します。escape HTMLの略です。

例えば、「esc_html(<title>ページのタイトル</title>)」とすると、出力は「ページのタイトル」になります。

aタグの前後に文字列を連結する

get_the_privacy_policy_link関数の終盤に記述してある処理は、生成したaタグの前後に指定した文字列を連結して出力する処理になります。

	$link = apply_filters( 'the_privacy_policy_link', $link, $privacy_policy_url );

	if ( $link ) {
		return $before . $link . $after;
	}

	return '';

apply_filtersで「the_privacy_policy_link」というフィルターフックを発火しています。

「the_privacy_policy_link」はプライバシーポリシーページのaタグ、アンカーテキストが一体になったタグを出力します。これを変数$linkに代入します。

(参考)WordPress Developersガイド プラグインフック プライバシー

$linkが存在する、つまり、プライバシーポリシーが公開中なら、その前後に引数で渡した文字列を連結して、戻り値として返します。

return $before . $link . $after;

以上がプラバシーポリシーページのリンクを生成するプログラムになります。

タイトルとURLをコピーしました