既存テーマをカスタマイズすることが多々あるのですが、フルサイト編集に向かっているWordPressの状況からみて、子テーマで強制的に上書きするという方法に抵抗感が出てきました。
そこで、独自のプラグインを作ってテーマに反映させる方向へ徐々にシフトしていってるのですが、作成したプラグインは公開する物ではないし、汎用的に使える訳ではなかったりするので、使用する特定のテーマにのみ適用させてみます。
実装
以下は「Twenty Twenty-One」にのみ適用される例です。「twentytwentyone」というディレクトリのテーマにのみ適用されます。
そのため無効化させなくても、他のテーマに切り替えるとこのプラグインは反映されなくなります。
//「Twenty Twenty-One」テーマ以外を選択している場合、有効化してもカスタマイズが反映されないようにする。
$theme = wp_get_theme( get_template() );
if ( 'twentytwentyone' !== $theme->template && 'twentytwentyone/resources' !== $theme->template ) {
return;
}
プラグインに必要な、その他の要素を補うとこんな感じでしょうか?
プラグインが反映されているかどうか確認する要素も足してみました。
<?php
/*
Plugin Name: 自作プラグイン「My Plugin」
Description: これは自作プラグインです。
Version: 1.0
*/
//不正なアクセス防止
if ( ! defined( 'ABSPATH' ) ) exit;
//「Twenty Twenty-One」テーマ以外を選択している場合、有効化してもカスタマイズが反映されないようにする。
$theme = wp_get_theme( get_template() );
if ( 'twentytwentyone' !== $theme->template && 'twentytwentyone/resources' !== $theme->template ) {
return;
}
//デバッグ用
add_action( 'wp_footer', function() {
echo 'このテーマにはプラグインが反映されています。';
});
きっかけは、「Snow Monkey」テーマ用のカスタマイズプラグイン「My Snow Monkey」を利用した時。こちらが書かれているのをみて「はぇ〜、こんな方法があるのか」と思ったからでした。
意外にも他に書いている方を見つけられなかったので、プラグイン開発の備忘録として残しておきます。