WordPressの投稿画面でAdd Quick Tagを使って画像挿入をする際に
リンク先URLを動的に変えたかったので作ってみました。
今回の概要
- 会員限定コンテンツがあり、ログイン者にのみリンク先のコンテンツを見せるようにしたい
- ログインしていなければ会員登録画面へ
- 投稿記事/固定ページ中にはphp記述が書けない
(⇒プラグイン使えば出来るけど使いたくない) - 登録する画像が多いのでいちいちaタグでフルパスurlなんて書きたくない
そんな理由で作ったのがこちら。
function get_url_shortcode($atts) :string {
// set default value
$baseUrl = "https://hogehoge.com/";
$pairs = ['url' => ""];
$atts = shortcode_atts($pairs, $atts);
// trim string
$url = preg_replace("/( | )/", "", $atts['url']);
if( is_user_logged_in() ){
if(!($url === "")) {
return $baseUrl.$url;
}
return $baseUrl;
}else{
return $baseUrl.'regist/';
}
return $baseUrl;
}
add_shortcode('getUrl', 'get_url_shortcode');
[getUrl]
// もしくは
[getUrl url='hoge']
【解説とか】
・$baseUrlでサイトのURLを設定してます
・short_codeatts関数でショートコードの初期値を設定
shortcode_atts($pairs , $atts)
$pairs : ショートコードで使用する全ての属性名とデフォルト値
$atts : ショートコードの属性
これで、ショートコードが引数を持ってなかったとしても大丈夫
もしユーザーがログインしていれば、ショートコードの引数(url='hoge')で設定したUrlが返ります
(https://hogehoge.com/hoge/)
ログインしていなければ、会員登録画面のurlが返ります(ここでは例としてhttps://hogehoge.com/regist/)
ショートコードに引数を持たせてなかった場合は、
ログインしていなければ変わらず会員登録画面のurl、していれば$baseUrlで設定したurlが返ります
こういうurl生成のショートコードは色々応用効きそうだし、いろんなところで使えそう。
あ、トレイリングスラッシュとかは環境に応じて変えないとですね。
入ってたら表示されない、入ってないと表示されるとか環境の違いであるので。。。