work.log

元エンジニアの備忘録的ブログ

WordPressのショートコードAPIをウィジェットでも使う

投稿:

WordPress のテキストウィジェットでショートコードを書いたら動かなかったのでちょっと調べてみました。

どうもコードが足りてなかったようでした。

例えば、投稿ページ、固定ページではこんな感じに書くだけでショートコードが使えます。

function my_short_code() {

    echo 'ショートコードで出力しています。';

}
add_shortcode( 'mycode', 'my_short_code' );

そして本題のテキストウィジェットでショートコードを呼び出すにはさらに以下も追記。

add_filter('widget_text', 'do_shortcode');

widget_text にフックで引っ掛けるという感じです。

これでテキストウィジェットでもショートコードとして書いた PHP が動きます。

以上でショートコード API の話は終わりなのですが、調べる課程で「exec-PHP」というプラグインがチラホラ引っかかってきました。

何でも投稿ページとかウィジェットエリア (むしろ何処でも ?) にダイレクトに PHP コードを書けるというプラグインのようです。

手軽に PHP コードが書けるのでオススメしている記事が多いですが、このプラグインは WordPress のセキュリティを大きく下げてしまうので容易に使うのはやめたほうがよさそうです。

上記記事のアカウントが乗っ取られたらの下りは起きたら確実に厄介な問題になると思います。

日々サーバを管理していると、不正な PHP ファイルが置かれたりとかは結構よくある話でその場合はファイルを特定したり、侵入経路を調査したりします。

静的ファイルの改竄、不正プログラムの類いは、複数のコンテンツファイルが入り乱れる中あの手この手で探してる訳ですが、exec-PHP を使っているサイトで PHP のバックドア何かを書かれたらかなり怖そう。

コード自体が DB に保存されちゃうので従来の方法だとまず見つけられないと思います。

サーバ提供なのでお客様が置いているコンテンツの構成もわかりませんしね。特定が出来なそうな予感。

うーん、恐ろしい。

ということで、exec-PHP 等の直接 PHP が実行出来ちゃうプラグインは利用せずに、多少面倒だと思ってもショートコードもしくはテンプレートなんかに直接書いた方が良いと思います。

PHP が書けるなら何も直接書く必要もないと思いますしね。

かなり脱線しましたがショートコード API の記事は以上となります。