ブログ

ショートコードをプラグインにして管理する方法

01/01/2021

  1. HOME >
  2. closed >
  3. ブログ >

ショートコードをプラグインにして管理する方法

01/01/2021

Affinger6 ActionがAffinger EX版ユーザーに対して限定先行公開された。

こちらのテーマ、これまでにAffinger5でもたびたびおこなわれていたバージョンアップとは違い、子テーマも変わる、いわばモデルチェンジ版。導入にはいろいろと問題が生じる可能性も十分に想定されたが、人柱よろしく早々に切り替えてみた。

今回はこのテーマの切り替えに合わせて行った、ショートコードのプラグイン化とfunctions.phpの軽量化についてだ。

なお、実行環境はエックスサーバーとアフィンガー6 Actionとなっている。アフィンガー5 WINGやアフィンガーEXでも動作は確認しているが、それ以外のサーバーやテーマでは未確認なので注意してほしい。

https://business.xserver.ne.jp/

Affinger6 Actionは今のところEX版ユーザーのみへの限定公開なので、仮に今すぐActionを使ってみたいようであればEX版を購入する必要がある。

functions.phpをスリム化する

さて、それまで使っていたアフィンガー5をアフィンガー6に替えると原則として子テーマもアフィンガー6用のものに変更する必要がある。アフィンガー5の時のバージョンアップのように子テーマは変更せずに親テーマだけアフィンガー6に乗り換えることはできない。

このため子テーマの中に用意していたfunctions.phpやstyle.cssといった各種設定ファイルも改めて用意する必要がある。

ちなみにfunctions.phpとstyle.cssに関しては従来のものをそのままアフィンガー6用の子テーマに移行してしまっても問題なさそうだったが、single-type1.phpなどは内部のコードがかなり変わっていたのでアフィンガー5で使っていたものをそのまま移行するのはやめておいた方がよさそうだ。なお今回はサイトの読み込み速度が異様に遅くなる問題も発生していたため、その改善を目的にfunctions.phpやstyle.cssも新規で用意することにした。

そのための方法として、これまではfunctions.php内に記述していたいくつかのコードをプラグインとして括りだすことにした。こうすることでfunctions.php内への記述が必要なくなるのでfunctions.phpをスリム化できることに加え、問題があったときにプラグインをon / offすることで簡単にメンテナンスできるようになる。

 

ショートコードをプラグインで管理する

functions.phpを新規に用意する中でいろいろいじってみたところ、サイトの読み込み速度を極端に遅くしていた原因はショートコードとして登録していたRSSの読み込み機能と外部サイトへのリンクをカードデザインで表示し、それをショートコードで呼び出すためのコードだったことが分かった。

具体的にやっていたことは、functions.php内に次のようなコードのみ記入しておいて実行用の部分は個別にphpファイルで持つというもの。

function short_php($params = array()) {
  extract(shortcode_atts(array(
    'file' => 'default'
  ), $params));
  ob_start();
  include(STYLESHEETPATH . "/mycode/$file.php");
  return ob_get_clean();
}
 
add_shortcode('myphp', 'short_php');

細かいことはこちらの記事を参考にしてほしい。

自作のショートコードを使えるようにする

ブログの運営にAFFINGER5 EXを使っている。 つい最近まではAFFINGER5 WINGだったのだが、一生懸命コードをいじってみても記事のカードデザインでの表示が上手くいかないので折れた。そん ...

続きを見る

これをプラグインとするためにはこれまではfunctions.phpに記入していた部分に次のようなヘッダーを追記して一つのphpファイルとするだけでいい。実行の中身となる部分は何も変更することなく流用が可能だ。

/*
Plugin Name: call Advertise
Version: 1.0
Plugin URI: http://www.example.com
Description: call advertise
Author: Example
Author URI: http://www.example.com
*/

実際にプラグインとして作ったphpファイルが次のようものとなる。これはグーグルアドセンスの広告コードを文章中の任意の場所にショートコードを利用して挿入するためのものだ。

ちなみに実際に挿入する必要がある広告のスクリプトは実行ファイルとして別のphpファイルに記載したうえで、”Ad”という名前でテーマフォルダ内に”func-code”という名前のフォルダを用意してその中に保管している。

<?php
/*
Plugin Name: call Advertise
Version: 1.0
Plugin URI: http://www.example.com
Description: call advertise
Author: Example
Author URI: http://www.example.com
*/
function Adver() {
    ob_start();
    get_template_part('func-code/Ad');
    return ob_get_clean();
}
add_shortcode('Ad', 'Adver');

?>

ちなみにこのコードでは実行ファイルのディレクトリを12行目で指定している。ディレクトリを使わずに各実行ファイルをルート上に平置きするのはメンテナンス性を考えてもやらない方がいいと思うが、もしそうする場合にはこの行を書き換える必要がある。

このphpファイルをwp-contentフォルダ内のpluginsフォルダに保存してやるとWordpress管理画面のプラグインの項目にこのファイルの内容がプラグインとして表示されるので、それを有効にしてやればそれ以降はショートコードが通常通り使用できるようになる。functions.php内からはこの項目は削除してしまって問題ない。

なおここで注意しておく必要があることは2つ。

1つ目はもともとのやり方ではショートコードの数を増やしても実行ファイルだけを作ればfunctions.php内のコードから呼び出すことができたが、プラグインとして使う場合には実行ファイルのほかにもプラグインとして登録するためのphpファイルを作る必要があるということ。1つのプラグインを使いまわすことは (おそらく) できない。

2つ目は10行目

function Adver() {

このfunctionの後に来る部分 (この例では”Adver”) がすべてのプラグインを通してユニークであること。プラグインファイルが違うからといって同じ名称を使ってしまうとエラーになる。

ちなみに今回のプラグイン化では実行のためのショートコードが変わってしまっている。

[myphp file='●●']

と書いていたショートコードが

[Ad]

だけで呼び出せるようになった。

この変更に伴ってすでに公開している記事に記入していたショートコードが機能しなくなってしまっていたが、それはサーバー上のmySQLの管理画面から該当する文字列を一括で置換してやれば問題なく解決できた。

\\当サイトでも使用中のWordPressテーマ//

AFFINGER5 WINGを購入する

価格 14,800円(税込)※EX版はスタンダード版購入後に追加購入

\\当サイトの現在のテーマ AFFINGER5 EXを同梱//

AFFINGER PACK3を購入する

セット価格 55,900円 → 39,800円


-ブログ
-, , ,