今まで使っていたショートコードを他のショートコードに変更したい場合
わかりにくいからストーリー展開でご説明。
今までは OGP ショートコードを使っていた。
[ogp]https://blog.gti.jp[/ogp]
このように記述すると [ogp] 〜 [/ogp] で囲まれたURLがブログカードのような表示になるショートコードだった。
ところが、転機が訪れる。
OGPプラグインはPHPアップデートに対応しなかったのである。
そこで新たなブログカードプラグインを入れた。
それが LINKCARD(仮)
[linkcard url="https://blog.gti.jp/" target="_blank"]
今度のプラグインによるショートコードは以前のOGPとは作りが違っていた。
属性で url を入れるタイプだった。
ついでに target も指定できるすぐれものだった。
ところが、すでに OGP ショートコードは至るところで使われており、そのすべてを直すには相当の工数が見込まれた。
ぼちぼちやるか〜
と思ったものの、[ogp]〜[/ogp] ショートコードは無残な痕跡を残していた。
ああ、やっぱり全部直さないとダメかな…
…というときにショートコードを転送するコード
/**
* [ogp][/ogp]を[linkcard]へ転送する
*/
function ogp_to_linkcard( $atts, $content = null ) {
$content = strip_tags( $content );
return do_shortcode( '[linkcard url="'.$content.'" target="_blank"]' );
}
add_shortcode( 'ogp', 'ogp_to_linkcard' );
このコードをテーマの functions.php 等に記述することで
[ogp]https://blog.gti.jp/[/ogp] が
[linkcard url=”https://blog.gti.jp/” target=”_blank”]に
置き換わります!
手間いらず!
ショートコードの引数は $atts, $content
ショートコードの引数 $atts と $content をそれぞれ説明します。
$atts はショートコードに設定された属性が入ってきます。
$content はショートコードタグに挟まれた文字列が入ってきます。
具体的に言うと
[linkcard url=”https://blog.gti.jp/” target=”_blank”]
というショートコードのとき
$atts は array( ‘url’=>’https://blog.gti.jp/’, ‘target’=>’_blank’ ) という状態になっています。
これを処理中はもにょもにょして文字列を return して表示しているんですね。
[ogp]https://blog.gti.jp/[/ogp]
となると $content に ‘https://blog.gti.jp/’ が入ってくるということになります。
ですので、転用しているコードは…
$content を $atts配列の ‘url’ に入れたショートコードを新たに発行している
という処理を行っているわけです。
参考になれば幸いです。
思った・考えた
こんな感じで記事内にショートコード入れている場合で
テーマが変わった、プラグインをアンインストールした
等の理由により使えなくなっちゃうケースってあると思うので、上記の内容はテーマ内に記述しちゃうとやっぱりおんなじことになっちゃうよね…
で、プラグインで作ればいいんだよ。
Remove Oreore Shortcode 的なw
Throw OREORE Shortcodes Away とかw
そして、プラグインにしてみた
とりあえず上記をプラグイン化するコードこれ
<?php
/*
Plugin Name: Remove or Redirect Shortcodes
Plugin URI: https://blog.gti.jp/post-17567/
Description: もう使ってないショートコードを消したりちがうやつに置き換えちゃう
Version: 9999999999.0
Author: Takeshi Satoh @ GTI Inc.
Author URI: https://blog.gti.jp/
*/
/**
* ショートコードをなかったことに
*/
function adsense_shortcode_to_muga( $atts, $content = null ) {
return "";
}
add_shortcode( 'adsense', 'adsense_shortcode_to_muga' );
/**
* [ogp][/ogp]を[linkcard]へ転送する
*/
function ogp_to_linkcard( $atts, $content = null ) {
$content = strip_tags( $content );
return do_shortcode( '[linkcard url="'.$content.'" target="_blank"]' );
}
add_shortcode( 'ogp', 'ogp_to_linkcard' );
これをファイルに記述して ファイル名を「remove_redirect_shortcodes.php」とかにして(任意)
プラグインディレクトリにアップロードして
管理画面から「プラグイン」を見ると…
ってことで「有効化」してみて
これならテーマが変わっても効き続けるから問題ないっすね。
また増えたら同じようなコードを書いて増やしてね。
以上っす。
※プラグインバージョンが「9999999999.0」になっているのは、まさかの同名プラグインが公式にあるとそれでアップデートがかかっちゃうからです。…ということはプラグインのファイルのこの部分変えたらアップデートしないプラグインができちゃうよね…(悪用禁止)
※このプラグインは勝手に使ってください。内容や機能に問題があった場合でも当方は一切責任を持ちませんので「自己責任」でご利用ください。