指定カテゴリーの投稿本文にだけブログパーツを追加するコードです。
対象外ではブログパーツを実行せず、ブログパーツ内で本文フィルターが再実行されても再帰的に追加しない構成にします。
投稿記事の下に、特定のカテゴリー限定のCTAを入れ込みたいということはないでしょうか?

SWELLというカテゴリーに、記事の最後に特定のブログパーツを挿入しています。
こういったカテゴリー別の表示非表示は、下記の3つの方法があります。
- WordPressプラグイン「Widget Options」を使う
- CSSで表示・非表示をする
- functions.phpで条件をつけてブログパーツを挿入する
CSSで非表示にする方法では、出力された要素自体は残ります。
この例は、対象外の記事ではブログパーツを呼び出さない条件をPHP側に置きます。
本記事では3番目のちょっとしたコードでブログパーツを挿入するカスタマイズを紹介いたします。
SWELLで特定のカテゴリーの投稿記事にCTAを挿入するカスタマイズ
専用ブログパーツを作成し、そのIDとカテゴリーIDをPHPに指定します。
以下、詳しく解説いたします。
特定のカテゴリー専用のブログパーツを作成する
ブログパーツから差し込みたい内容のCTAを作成します。
今回はカテゴリーページのブログカードを入れてみます。

functions.phpにコードを挿入する
子テーマのfunctions.phpのPHP領域、またはCode SnippetsのPHPスニペットのどちらか1か所
変更前のfunctions.phpまたはPHPスニペットを保存し、エラー時に管理画面の外からでも元へ戻せる手段を確認してください。
既存のmotoki_cat_cta関数と登録処理がある場合は置き換え、同名関数を重複して追加しないでください。
子テーマのfunctions.phpでは既存のPHP領域内へ、Code Snippetsでは開始タグを付けずに登録します。

has_category(9, $post_id)の9をカテゴリーIDに、$part_id = 611の611を作成したブログパーツIDに変更します。
コードの行番号ではなく、この2か所を探してください。

function motoki_cat_cta( $content ) {
static $rendering = false;
if ( $rendering || !is_singular('post') || !is_main_query() || !in_the_loop() ) {
return $content;
}
$post_id = get_queried_object_id();
if ( get_the_ID() !== $post_id || !has_category(9, $post_id) ) {
return $content;
}
if ( !shortcode_exists('blog_parts') ) return $content;
$part_id = 611;
$part = get_post( $part_id );
if ( !$part || $part->post_type !== 'blog_parts' ||
$part->post_status !== 'publish' || $part->post_password !== '' ) {
return $content;
}
// 同じ加工済み本文がもう一度渡された場合は追加しない。
$marker = '<!-- waza-category-cta:' . absint( $part_id ) . ' -->';
if ( strpos( $content, $marker ) !== false ) {
return $content;
}
$rendering = true;
try {
$cta = do_shortcode( '[blog_parts id="' . $part_id . '"]' );
} finally {
$rendering = false;
}
return $content . $marker . $cta;
}
add_filter('the_content', 'motoki_cat_cta', 20);カスタマイズは以上です。
コード挿入後にキャッシュをクリアして、指定したカテゴリーの記事を開いて確認しましょう。

まとめ
本記事ではSWELLで特定のカテゴリーの投稿記事にCTAを挿入するカスタマイズを紹介しました。
この例では、本文のメインループに条件を付けて挿入します。
- 細かい条件をつけてブログパーツを挿入できる
- 記事終わりに直挿入できる
是非、本記事のカスタマイズを参考にしてください。
過去のコードは、GitHubのMOTOKI-LLC/WAZA-codeにも残っています。
最新の公開状態確認と二重挿入防止の条件は、本ページの掲載コードを参照してください。
二重挿入・対象外の挿入を避ける
旧版の関数は追加前に外し、この関数を1か所だけ登録します。
is_singular・is_main_query・in_the_loopで通常の投稿本文に限定し、get_queried_object_id()と表示中の記事IDが一致するときだけ実行します。
WordPress公式のthe_contentフィルターの説明でも、主クエリーとループの条件を確認する例が示されています。
掲載コードでは追加済みの印も本文へ付け、加工済みの同じHTMLが再び渡された場合の二重挿入を防ぎます。
過去の画像は旧コードの説明です。
最新コードのID指定と適用条件は本文を参照してください。
記事本文やウィジェットに同じCTAをすでに置いている場合は、追加前に重複を整理します。
公開状態のブログパーツだけを読み込む
このコードは、指定IDが公開済みのブログパーツで、パスワードが設定されていない場合だけCTAを追加します。
SWELLのブログパーツ呼び出しだけに任せた旧例では、パスワード付きパーツの本文も出力されました。
掲載コードは呼び出し前に投稿タイプ・公開状態・パスワードを確認する形に修正しています。
今回のCTAへの追加を止めたいときは、ブログパーツを下書きへ戻すかパスワードを設定します。
このコードでは、その状態のパーツをCTAとして読み込みません。
2026年10月3日の隔離環境では、公開・パスワード付き・下書き・固定ページID・存在しないIDを切り替え、公開状態のパーツだけが追加され、記事本文は残ることを確認しました。

戻し方と確認項目
追加したフィルターを外すか、そのスニペットを無効化すると今回の自動挿入を停止できます。
カテゴリーに属する投稿、対象外の投稿、固定ページ、一覧ページを確認し、対象記事でCTAが1回だけ表示され、リンク先が正しいことを確かめてください。
2026年10月3日の隔離したWordPress・SWELLの本文処理で、対象記事にCTAが1回表示され、対象外の投稿と固定ページでは追加されないことを確認しました。
同日のPCとMobile表示でCTAのリンクから固定ページへEnterキーで移動できることも確認しています。
この操作試験は、後述する10月4日の二重挿入防止修正より前の結果です。
加工済み本文の再処理でCTAを重ねない
旧コードでは、CTAを追加した本文へもう一度the_contentを適用するとCTAが二つになりました。
修正版はブログパーツIDを含むHTMLコメントを追加し、同じ印がある本文には重ねて追加しません。
元の本文から別に表示を作る場合は、各表示にCTAを追加します。
2026年10月4日、隔離したWordPress 7.1.2 / SWELL 2.19.0で、本文フィルターを二回適用してもCTAが一つのままになることを確認しました。
パーツ描画中の再入も抑止し、公開パーツをパスワード付きへ変更した後の新しい本文にはCTAを追加しませんでした。
すでに生成済みのHTMLやページキャッシュからCTAを消す処理ではありません。
追加済みのHTMLコメントを取り除く外部処理は未検証です。
既存の同名関数を修正版へ置き換え、カテゴリーIDとパーツIDは自分の設定へ戻します。
停止するときは今回の関数と登録処理を外してください。
今回の修正版を使ったPC・スマホ表示とリンク操作は、実際のキャッシュ設定で別途確認が必要です。



