WordPressにはデフォルトで生成される「プライバシーポリシー」というページがあります。プライバシーポリシーは一般的な固定ページとは異なり、専用の関数でリンクを取得することができます。
どうやってページの中に挿入しているかの原理がわかれば、デフォルトのリンクを削除したり、新たにページやテンプレートの中に埋め込むことができます。
ここでは、プライバシーポリシーページのリンク表示のソースコードを追いながら、フッターに表示させる方法について解説します。
プライバシーポリシーページとは?
プライバシーポリシーページは、Wordpressによってデフォルトで生成されるページの1つです。
固定ページの中にある、右側に「- プライバシーポリシーページ」と文字が表示されているものが該当します。
タイトル欄の「プライバシーポリシー」はページの名前です。ここは好きに変更することができます。
プライバシーポリシーページの中身(デフォルト)
プライバシーポリシーページの中身はWordpressがデフォルトで指定している内容になっています。
自分のサイトのドメインを記載してくれます。Cookieの設定など変更しなければ、そのまま使えないこともないですが、日本語が違和感あるので、変更する方が無難です。
なお、この内容は、Wordpress管理画面の「設定」→「プライバシー」→「ポリシーガイド」→「ポリシー」→「WordPress」の中に記載してあります。
↓
↓
プライバシーポリシーを新たに生成する方法
プライバシーポリシーをデフォルトのは残したままもう一つ作成したい場合や、誤って削除してしまったため再度作成したい場合に、簡単に作成することができます。
方法は大きく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つあります。
- プライバシーポリシーページを消す(非公開にする)
- プライバシーポリシーを表示するタグを削除する
プライバシーポリシーページを消す、あるいは、非公開にするには、管理画面の固定ページで対象のページを操作すれば完了です。
プライバシーポリシーを表示するタグを削除するには、表示しているテンプレートを編集して、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;
以上がプラバシーポリシーページのリンクを生成するプログラムになります。