楽天セール開催中!ポイント最大11倍! セール会場へ

SWELL│特定のカテゴリーの投稿記事にCTAを挿入するカスタマイズ

swell-cat-cta

指定カテゴリーの投稿本文にだけブログパーツを追加するコードです。

対象外ではブログパーツを実行せず、ブログパーツ内で本文フィルターが再実行されても再帰的に追加しない構成にします。

投稿記事の下に、特定のカテゴリー限定のCTAを入れ込みたいということはないでしょうか?

特定のカテゴリーの記事末尾に挿入されたブログパーツの表示例。

SWELLというカテゴリーに、記事の最後に特定のブログパーツを挿入しています。

こういったカテゴリー別の表示非表示は、下記の3つの方法があります。

  • WordPressプラグイン「Widget Options」を使う
  • CSSで表示・非表示をする
  • functions.phpで条件をつけてブログパーツを挿入する

CSSで非表示にする方法では、出力された要素自体は残ります。

この例は、対象外の記事ではブログパーツを呼び出さない条件をPHP側に置きます。

本記事では3番目のちょっとしたコードでブログパーツを挿入するカスタマイズを紹介いたします。

目次

著者

WEB制作をしているデジタルノマド
WordPressのカスタマイズが好きで、色々と自作しています。

WordPressのカスタマイズに困ったらご相談ください!

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では開始タグを付けずに登録します。

テーマファイルエディターでfunctions.phpを開く画面。

has_category(9, $post_id)の9をカテゴリーIDに、$part_id = 611の611を作成したブログパーツIDに変更します。

コードの行番号ではなく、この2か所を探してください。

ブログパーツのIDやカテゴリー番号を入力するコードの編集箇所。
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 7.1.2・SWELL 2.19.0の隔離環境/カスタマイザーのMobile表示、本文幅385px。対象カテゴリーの記事本文末にCTAを1回表示。

戻し方と確認項目

追加したフィルターを外すか、そのスニペットを無効化すると今回の自動挿入を停止できます。

カテゴリーに属する投稿、対象外の投稿、固定ページ、一覧ページを確認し、対象記事で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・スマホ表示とリンク操作は、実際のキャッシュ設定で別途確認が必要です。

  • URLをコピーしました!

実装を任せたい方へ

SWELLのカスタマイズ代行

記事のコードをそのまま使うのが不安な場合や、サイトに合わせた調整が必要な場合は当社が実装します。1時間 ¥8,000〜(税込)。テーマ更新に強い書き方で納品します。

WAZAの有料記事のサブスクリプションも開始しました。

サービス

Service

WordPressサイトのカスタマイズのサービスに関心がありましたら、ぜひ詳細をご覧ください。

目次