LoginSignup
1
2

More than 3 years have passed since last update.

【WordPress】ショートコードでurlを動的に生成

Last updated at Posted at 2020-06-04

WordPressの投稿画面でAdd Quick Tagを使って画像挿入をする際に
リンク先URLを動的に変えたかったので作ってみました。

今回の概要

  • 会員限定コンテンツがあり、ログイン者にのみリンク先のコンテンツを見せるようにしたい
  • ログインしていなければ会員登録画面へ
  • 投稿記事/固定ページ中にはphp記述が書けない
    (⇒プラグイン使えば出来るけど使いたくない)
  • 登録する画像が多いのでいちいちaタグでフルパスurlなんて書きたくない
    そんな理由で作ったのがこちら。
functions.php

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');
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生成のショートコードは色々応用効きそうだし、いろんなところで使えそう。

あ、トレイリングスラッシュとかは環境に応じて変えないとですね。
入ってたら表示されない、入ってないと表示されるとか環境の違いであるので。。。

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2