WordPress│ショートコードを条件分岐する方法

特定のページだけでショートコードを使いたい!ということはないでしょうか?

そもそも自作したコードであれば条件分岐を足すのは容易ですが、

テーマで用意された場合はちょっとわからないですよね。

その場合のカスタマイズを書いてみました。

目次

著者

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

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

WordPressでショートコードを条件分岐する方法

やり方は簡単で、ショートコードを呼び出すショートコードをfunctions.phpに記述するだけです。

外観 > テーマエディタ >functions.phpに記載

サンプルコード

[blog_parts id="123"]というショートコードを投稿記事 で’tokyo’ というカテゴリに属している場合のみ表示したい場合

function custom_ad_shortcode($atts) {
    $ad_content = '';

    // 投稿記事 & 'tokyo' というカテゴリに属しているかチェック
    if (is_single() && has_category('tokyo')) {
        $ad_content = do_shortcode('[blog_parts id="123"]');
    }

    return $ad_content;
}
add_shortcode('custom_ad', 'custom_ad_shortcode');

[custom_ad]というショートコードを記事に貼れば特定の条件で表示されます。

条件分岐例の応用例

複数条件がある場合は、以下のように記載すると良いでしょう。

function custom_ad_shortcode($atts) {
    $ad_content = '';

    // 現在の投稿が 'tokyo' カテゴリに属しているかチェック
    if (is_single() && has_category('tokyo')) {
        $ad_content = do_shortcode('[blog_parts id="51"]');
    }
    // トップページの場合
    elseif (is_front_page()) {
        $ad_content = do_shortcode('[blog_parts id="52"]');
    }
    // タグページの場合
    elseif (is_tag()) {
        $ad_content = do_shortcode('[blog_parts id="53"]');
    }
    // 特定のタグ(例:sample-tag)を持つ投稿の場合
    elseif (is_single() && has_tag('sample-tag')) {
        $ad_content = do_shortcode('[blog_parts id="54"]');
    }
    // 特定のページテンプレート(例:template-special.php)を使用するページの場合
    elseif (is_page_template('template-special.php')) {
        $ad_content = do_shortcode('[blog_parts id="55"]');
    }
    // アーカイブページの場合
    elseif (is_archive()) {
        $ad_content = do_shortcode('[blog_parts id="56"]');
    }

    return $ad_content;
}
add_shortcode('custom_ad', 'custom_ad_shortcode');

複数の条件分岐の書き方例

より細かい条件を記載するときの参考例です。

特定のカテゴリとタグの両方を持つ投稿

if (is_single() && has_category('test') && has_tag('sample-tag')) {
    // 処理内容
}

特定のカテゴリのいずれかを持ち、特定のタグを持つ投稿

if (is_single() && (has_category('test') || has_category('demo')) && has_tag('sample-tag')) {
    // 処理内容
}


特定のページか、特定のカテゴリとタグの両方を持つ投稿

if (is_page('about') || (is_single() && has_category('test') && has_tag('sample-tag'))) {
    // 処理内容
}

特定のページテンプレートを使用し、特定のカテゴリまたはタグを持つ投稿

if (is_page_template('template-special.php') && (has_category('test') || has_tag('sample-tag'))) {
    // 処理内容
}

まとめ

特定の条件によってコンテンツを出し分けるというのは効果的な施策だと思います。

ぜひ条件分岐の記述方法を覚えて使ってみてください。

目次