[WordPress]ショートコードで投稿IDやスラッグから記事の内部リンクを作成する

 2017.09.20  2017.10.30

サイト内の記事へのリンクを作成するとき、URLや記事タイトルをひとつひとつ貼り付けるのは面倒ですよね。 ショートコードを使えば、リンク先の記事の投稿IDやページスラッグを入力するだけでページへのリンクが簡単に作成できます。 リンク先の記事タイトルを変更した時も自動的にタイトル名が変更されるので、メンテナンス性も優れています。

ショートコードの基本的な使い方については、[WordPress]便利なショートコードの基本的な書き方と使い方をご覧ください。

サンプルコード

以下のコードをfunction.phpに書きます。必ずバックアップを取ってから作業しましょう!

このコードは、[pagelink]というショートコードを作成し、2つの属性「id」と「slug」を使えるようにします。

投稿ID(数字)を指定する場合は、[pagelink id=投稿ID]
ページのスラッグを指定する場合は、[pagelink slug="ページのスラッグ"]
とショートコードを書けば、下記のようなリンク付きのタイトル名が出力されます。
(この記事のリンクです)

[WordPress]ショートコードで投稿IDやスラッグから記事の内部リンクを作成する

解説

add_shortcodeでショートコードを登録する

ショートコードを登録して使える状態にするのがこの部分です。
linkpage_func」が新しく作った関数名、
add_shortcode('pagelink', 'linkpage_func'); で「pagelink」というショートコードを作成します。

shortcode_attsで配列をセットする

shortcode_atts」はユーザーがショートコードで指定した属性($atts)を、予め定義した属性($defaults_array)と結合し、必要に応じてデフォルト値をセットするWordpressの関数です。

shortcode_attsのパラメーター

使用例
shortcode_atts( $defaults_array, $atts );
$defaults_array
(配列)(必須)属性の連想配列、または空文字列で、属性が省略された場合に表示させるデフォルト値です。
$atts
(配列)(必須)ユーザーがショートコードタグに指定した属性。
shortcode_atts() は、$defaults_array のキーを全て含み、$atts配列に値が存在すればその値を上書きした、正規化された配列を返します。

上記のサンプルコードでは、idとslugはデフォルトで空の状態になっていますが、例えば「id=1、slug=’somethig’」と指定されている状態で、ショートコード側でIDやスラッグを指定すると、ショートコードで指定した属性でデフォルト値が上書きされます。

extractで配列から変数を作成する

「extract」は、連想配列のキーを変数名、値を変数の値として、配列から変数を作成するPHP関数です。
配列のキー「id」が変数名「$id」に、「slug」が「$slug」として処理されます。

extractの例

上記を実行すると、配列は下記のように変数に展開されます。

リンク付きタイトルを作成する

「home_url( ‘/’ );」でサイトのURLを取得し、$my_urlに代入します。引数に( ‘/’ )を指定すると、スラッシュを含めたURLが取得できます。$my_urlと$slug(ショートコードで指定する値)をくっ付ければ、記事URLの出来上がりです!

投稿IDから記事情報を取得するので、ショートコードでIDを指定する場合はその値が変数の$idに入ります。ショートコードでスラッグを指定する場合は、記事のURLから投稿IDを取得するWPの関数「url_to_postid」を使って投稿IDを$idに代入します。

$idが分かれば記事のリンクやタイトルも取得できるので、returnでHTMLを出力します。ここでは、echoではなくreturnを使うことが推奨されています。echoはすべてブラウザへ出力されますが、ページの適切な箇所に表示されないとのことです。

ボタンを押すだけでコードを呼び出してくれるプラグイン「AddQuicktag」を使って作成したショートコードを登録しておけば、さらに時間短縮できますよ!