WordPress:未公開記事に貼ったリンクを公開時に有効にするショートコード

サイト設計をしっかりとしてから記事を作成すると、まだ作成していない記事にリンクを貼る必要が出てくる。
とりあえずリンク先の空記事を作成すればリンクを貼ることができるが、未公開状態だとリンク先が404になる。

だからリンクを貼らずに記事を公開して、リンク先の記事が完成したら、改めてリンクを貼り直すとう作業をおこなう。
正直、非常に面倒だし、作業ミスでリンク先を間違えてしまう可能性がある。

そこで、リンク先の記事が公開済みか確認して、公開済みならリンクを生成するショートコードを作成してみる。

リンク先記事が公開済みならリンクを生成するショートコード

下のコードをfunction.phpや、自作のプラグインに貼り付けます。

function.php
function published_link( $atts = null, $content = null)
{
    extract(shortcode_atts(array(
        'id' => '',
	'url' => '',
        'hash'=>'',
	'usetitle'=>'false'
    ), $atts));

	$noPublish = true;
	if( $id === '' && $url !== '') {
		$id = url_to_postid( $url );
	}

	$title = $content;
	if( $id !== '' && $id !==0 ) {
		if( 'publish' === get_post_status( $id ) ){
			$url = get_permalink($id);
			$title = ('true' === $usetitle) 
                                  ? get_the_title($id) : $title;
			$noPublish = false;
		}
	}

	return $noPublish ? $content 
              : '<a href="'.$url.$hash.'">'.$title.'</a>';
}

add_shortcode('a', 'published_link');

使い方

ショートコードのフォーマット

[a id="ID" url="URL" hash="HASH" usetitle="USETITLE"]リンク文字[/a]

ID:記事のIDです。省略可
URL:記事のURLです。省略可

※IDとURLが両方指定されている場合、IDが優先されます。

HASH:記事URLの後ろに追加される文字列です。省略可

USETITLE:

'true'または'false'を指定します
usetitleが指定されない場合、'false'が指定されたとみなされます。
 
 'true': リンク先記事のタイトルがリンク文字と置き換えられます。
'false' : リンク文字がそのまま使用されます。

 

リンク文字: aタグで挟まれる文字です。

例:

例1

[a id="333"]ここをクリック[/a]

例2

[a url="/category/kijiname/"]ここをクリック[/a]

※urlを / で始めると、直前にドメインが指定されたとみなされます。

例2

[a url="/category/kijiname/" usetitle="true"]ここをクリック[/a]

※「ここをクリック」ではなく、リンク先記事のタイトルが表示されます。