有料テーマを触りたくない人へ。Code Snippetsという武器 – NPC
有料テーマを触りたくない人へ。Code Snippetsという武器
WordPressでサイトを運用していて、こんな場面に出くわすことは少なくない。
- 有料テーマを使っているけど、テーマ更新で消えるから直接編集したくない
- クライアントから預かったサイトに機能追加してほしいと頼まれた
- ちょっとしたスクリプトを
<head>に入れたいだけなのに、functions.phpは触りたくない - テーマ側のバグっぽい挙動を、こっそり修正したい
こういう時、いきなり子テーマを作るのも大袈裟だし、functions.phpをいじるのもリスクがある。でも管理画面から安全にPHPコードを追加できたら、選択肢がぐっと広がる。
そこで登場するのが Code Snippets というプラグイン。自分が補助金申請支援の会社さんのSEO改善をやった際に、このプラグインに何度も助けられた。今回はその実例を交えながら紹介してみる。
Code Snippetsとは何か
ひとことで言うと「管理画面から安全にPHPコードを追加・管理できるプラグイン」。
functions.php に書くようなコードを、プラグイン画面から1個ずつスニペットとして登録・ON/OFF管理できる。無料版で十分機能するので、この記事の内容はすべて無料版で再現可能。
※「スニペット」とは、繰り返し使える短いコードの断片のこと。料理でいう「よく使う合わせ調味料」のイメージ。
こんな人に刺さる
Code Snippetsの価値が伝わりやすいのは、以下のような人たちだと思う。
1. 有料テーマユーザー
TCD、SWELL、THE THORなどの高機能な配布テーマは、機能が豊富で子テーマ作成が面倒なことが多い。でも細かい調整は必ず必要になる。Code Snippetsを使えば、テーマ本体を一切触らずに機能を足したり、バグを修正したりできる。テーマ更新が来ても自分の追加コードは消えない。
2. クライアントサイトの保守運用をする人
他人が作ったWordPressを引き継ぐと、どこに何が書いてあるか全容が見えないことが多い。でも「このリンクを修正して」「この機能を追加して」と頼まれる。Code Snippetsに追加すれば、自分の変更箇所が1画面で全部わかる。引き継ぎも楽になる。
3. functions.phpに触りたくない人
構文エラーで サイトが真っ白になる のが怖い、コメントアウトで機能ON/OFFを管理するのが辛い、という人。Code Snippetsは構文エラーを検知すると自動でスニペットを無効化してくれるので、サイトが落ちるリスクがかなり下がる。
実際のユースケース(先日の実例)
ここからは、先日やった補助金申請支援会社のSEO改善案件で、実際にCode Snippetsで解決した5つのケースを紹介する。サイトは TCD NANO という有料テーマで作られていて、テーマ本体は触りたくない状況だった。
ケース1: 有料テーマのバグを出力バッファで書き換える
問題: テーマ内の「お問い合わせ」リンクが href="contact"(相対パス)になっていて、ページによっては404エラーを起こしていた。
対応: 出力バッファを使って、HTML全体の該当リンクを絶対パスに置き換えるスニペットを追加。
※「出力バッファ」とは、PHPがブラウザに送る直前のHTMLを一時的に保持しておく仕組みのこと。ここで文字列置換などを挟める。
add_action('template_redirect', function() {
ob_start(function($html) {
return str_replace('href="contact"', 'href="/contact/"', $html);
});
});
※「template_redirect」とは、WordPressがテーマのテンプレートを読み込む直前に発火するフック(きっかけ)のこと。
テーマファイルを1行も編集せずにバグを修正できた。テーマ更新が来ても消えない。
ケース2: 旧URLの301リダイレクト
問題: 過去に公開していたURLに今も検索流入があるけど、記事は別URLに移動済み。
対応: template_redirectフックで301リダイレクトを実装。
add_action('template_redirect', function() {
$redirects = [
'/news/subsidy-monodukuri/' => '/news/monodukuri/',
'/service_category/business-succession/' => '/service_category/subsidy-support/',
];
$path = rtrim($_SERVER['REQUEST_URI'], '?');
if (isset($redirects[$path])) {
wp_redirect(home_url($redirects[$path]), 301);
exit;
}
});
※「301リダイレクト」とは「この URL は恒久的に別の場所へ移動しました」という転送方式。SEO評価も引き継がれる。
SEO評価を引き継ぎながら、旧URLへの流入を救済できる。
ケース3: OGP画像のフォールバック
問題: アイキャッチ画像を設定し忘れた記事がSNSシェアされた時、画像が表示されない。
対応: wp_head フックで og:image を補完する。
add_action('wp_head', function() {
if (is_single() || is_page()) {
$img = get_the_post_thumbnail_url(get_the_ID(), 'full');
if (!$img) {
echo '<meta property="og:image" content="https://example.com/default.jpg" />';
}
}
}, 6);
設定漏れを保険でカバーできる。運用ミスが視覚的に崩れなくなる。
ケース4: アイキャッチが未設定の記事に代替画像を表示
問題: TCD NANO には「NO IMAGE」画像の設定項目がなく、アイキャッチ未設定だと記事一覧ページが画像なしで崩れる。
対応: post_thumbnail_html フィルターで代替画像を挟み込む。
add_filter('post_thumbnail_html', function($html, $post_id) {
if (empty($html)) {
$url = 'https://example.com/default.jpg';
$alt = esc_attr(get_the_title($post_id));
$html = '<img src="' . esc_url($url) . '" alt="' . $alt . '" class="wp-post-image" />';
}
return $html;
}, 20, 2);
アイキャッチ設定漏れを吸収する保険として機能する。
ケース5: 構造化データ(JSON-LD)の追加
問題: SEO改善のため、ニュース記事に NewsArticle の構造化データを出力したい。でもテーマは編集したくない。
対応: wp_footer フックでJSON-LDを出力。
add_action('wp_footer', function() {
if (!is_singular('news')) return;
$schema = [
'@context' => 'https://schema.org',
'@type' => 'NewsArticle',
'headline' => get_the_title(),
'datePublished' => get_the_date('c'),
// 他の項目...
];
echo '<script type="application/ld+json">';
echo wp_json_encode($schema, JSON_UNESCAPED_UNICODE);
echo '</script>';
});
Googleのリッチリザルトテストで「有効なアイテムを検出」と認識された。テーマ本体は一切触っていない。
functions.php直接編集との違い
functions.phpに書くのとCode Snippetsに書くのと、何が違うのか。比較するとこうなる。
- 構文エラーでサイトが真っ白
- テーマ更新で消える
- 子テーマが必須
- エラー時は自動で無効化
- テーマ更新の影響なし
- 管理画面でON/OFF切替
- 本格的だが作るのに手間
- 小さな追加には過剰
- 配布・再利用しやすい
始め方
Code Snippetsの導入は簡単で、以下の流れで使い始められる。
管理画面 → プラグイン → 新規追加 → 「Code Snippets」で検索して有効化。左メニューに「スニペット」が追加されるので、そこから新規作成する。
実行場所は「どこでも実行」「管理画面でのみ実行」「フロントエンドでのみ実行」「1回だけ実行」から選べる。PHPコードを貼り付けたら「保存して有効化」をクリックするだけ。
使う時の注意点
便利だからといって無制限に使うと後悔する。以下の点に気をつけたい。
スニペットを増やしすぎない
20個も30個も追加すると、どれが何をしているか分からなくなる。用途が似ているものは1つにまとめる、タイトルを分かりやすくつける、コメントを書く。この3つを習慣にしておくと運用が楽になる。
テーマ依存のフックを使う時は注意
「このテーマ固有のフックだから動く」というコードは、テーマを変えると動かない。どのフックに依存しているかをメモしておくと、将来のテーマ変更時に困らない。
大きな機能はプラグイン化を検討する
スニペットは「ちょっとした追加・修正」向き。何百行もの大きな機能なら、ちゃんとプラグインとして切り出した方が保守しやすい。
出力バッファは使いどころに注意
ob_start() でHTML全体を書き換える方法は強力だけど、ページ表示のたびに処理が走るので、複雑な処理は避けた方がいい。少量の置換程度なら問題ない。
まとめ:知っていると引き出しが増える
Code Snippetsは「テーマを汚さずにWordPressをカスタマイズする」ための最適解のひとつだと思っている。
有料テーマを使っている、クライアントサイトを保守している、functions.phpを触りたくない。こういう人にとって、知っているだけで対応できる場面が何倍にも増える。
今回紹介した5つの実例も、全部Code Snippetsで実現できた話。テーマファイルは1行も触っていない。導入自体は5分で終わるので、とりあえず入れて小さなスニペットから試してみてほしい。
※この記事はNPCの中の人の実務経験をもとに書いています。