WordPressで特定のカテゴリーの表示時に、テーマを差し替えて表示する為の設定手順

事前準備
差し替えたいテーマは、事前に管理画面からインストールしてください。

はじめに
今回の手順では、
差し替えたいカテゴリー:「Java(技術テーマの子テーマの1つ)」
差し替えたいテーマ  :「Twenty Fourteen」
の前提で手順書を記載します。

手順1.差し替え対象のカテゴリー情報から、スラッグを退避する。

手順3にて、プラグインの更新を行う際に、差し替え対象のカテゴリーを判別する為に、
WordPressの管理画面上で、カテゴリーの登録時に設定したスラッグ名を確認し、退避しておく。

カテゴリー管理画面を開くには、左メニューから「投稿」→「カテゴリー」を押下すれば表示できる。

(図1)WordPressのカテゴリー管理画面

(今回の場合、カテゴリー「Java」のスラッグ名は「java」の為、
「java」を退避しておく)

手順2.差し替えたいテーマから、インストール先フォルダ名を退避する。

手順3にて、プラグインの更新を行う際に、差し替えたいテーマを指定する為に、
テーマ名の文字列を取得する。

取得方法は下記の2つ
1、WordPressの管理画面上で、テーマ一覧画面からリンクを参照し、
そこからURL上に記載されているテーマ名を退避する。
2、インストール時に配置されたフォルダ名がテーマ名のため、その名称を退避する。

1、WordPressの管理画面上で、テーマ一覧からURL上に記載されているテーマ名を退避する。

管理画面からテーマ一覧画面を表示し、一覧上のテーマから、指定したいテーマを探し、
リンクを確認する。

テーマ一覧画面を開くには、左メニューから「外観」→「テーマ」を押下すれば表示できる。

(図2)テーマ一覧画面のリンク確認先

(対象となるテーマの「有効化」ボタン、または「ライブプレビュー」ボタンのリンクを確認する。)

・有効化のリンク
http://wpwewill.help/wp-admin/themes.php?action=activate&stylesheet=twentyfourteen&_wpnonce=02680ba643

・ライブプレビューのリンク
http://wpwewill.help/wp-admin/customize.php?theme=twentyfourteen&return=%2Fwp-admin%2Fthemes.php

赤字の部分に記載されている文字列を退避しておく。

2、インストール時に配置されたフォルダ名

フォルダ名がテーマ名のため、その名称を退避する。

WEBサーバ上、テーマの配置先については、
(WEBサーバ上に配置済みのWordPressのルートフォルダ)/wp-content/themes
となっている。

(図2)インストールされたテーマのフォルダ名の確認

(今回の場合、テーマ「Twenty Fourteen」は「twentyfourteen」のフォルダに配置されている為、「twentyfourteen」を退避しておく)

手順3.プラグイン「Hardcode theme switcher」を更新し、特定のカテゴリー表示時に指定したテーマの差し替えを行う処理を追記する。

手順1、手順2にて退避した情報を元に、プラグイン「Hardcode theme switcher」のソースの更新を行う。

プラグインの更新については、
1、インストール済みプラグイン一覧画面を開く
インストール済みプラグイン一覧画面を開くには、左メニューから「プラグイン」→「インストール済みプラグイン」を押下すれば表示できる。
2、一覧より「Hardcode theme switcher」の下にある「編集」リンクを押下する。

(図3)WordPressのプラグイン一覧画面

(図4)WordPressのプラグイン編集画面で、「ファイルを更新ボタン」を押下し、更新が正常終了したときの画面

以上の手順で更新を行うことが可能。

プラグイン「Hardcode theme switcher」の更新内容については、
1、URLからカテゴリーの判定を行い、テーマ指定を変更する。
2、表示する記事からカテゴリーに属しているかの判定を行い、テーマ指定を変更する。
(Hardcode theme switcherのソース全文 ※PHPソースで実装されてます。)

function my_theme_switcher_s($theme){
    return my_theme_switcher($theme, 'Stylesheet');
}
function my_theme_switcher_t($theme){
    return my_theme_switcher($theme, 'Template');
}
function my_theme_switcher($theme, $type){
    $id = preg_replace('#^.*/([^/]+)/?.*$#', '$1', $_SERVER['REQUEST_URI']);
    ※1の更新箇所
    if (in_category('study', $id)) {
        $overrideTheme = wp_get_theme('twentyfifteen'); 
        if ( $overrideTheme->exists() ) { 
            return $overrideTheme[$type]; 
        }
    } 
 
    switch ($id) {
        ※2の更新箇所
        case 'study':
            $overrideTheme = 'twentyfifteen';
            break;
        default:
            $overrideTheme = false;
    }
    if ( $overrideTheme ) {
        $overrideTheme = wp_get_theme($overrideTheme);
        return $overrideTheme->exists()
            ? $overrideTheme[$type]
            : $theme;
    }
    return $theme; 
}

add_filter('stylesheet', 'my_theme_switcher_s');
add_filter('template', 'my_theme_switcher_t');
}

1、表示する記事からカテゴリーに属しているかの判定を行い、テーマ指定を変更する。
手順1にて退避したスラッグ名と、手順2にて退避したフォルダ名を元に、if文を記載する。
(赤字は追記した部分)

if (in_category('study')) {
    $overrideTheme = wp_get_theme('twentyfifteen');
    if ( $overrideTheme->exists() ) {
        return $overrideTheme[$type];
    }
}
if (in_category('java'), $id) { ←(1)
    $overrideTheme = wp_get_theme('twentyfourteen'); ←(2)
    if ( $overrideTheme->exists() ) {
        return $overrideTheme[$type];
    }
}

(1)判定したいスラッグ名を記載する。
メソッド「in_category()」は、指定したスラッグ名が、記事が属しているカテゴリ郡に含まれているかを判定する。
(2)差し替えたいテーマ名をフォルダ名で記載する。
メソッド「wp_get_theme()」にてテーマが格納されているファルダ名を指定することによって、テーマ情報を取得できる。

2、URLからカテゴリーの判定を行い、テーマ指定を変更する。
手順1にて退避したスラッグ名と、手順2にて退避したフォルダ名を元に、case文を記載する。
(赤字は追記した部分)

switch ($id) {
    case 'study':
        $overrideTheme = 'twentyfifteen';
        break;
    case 'java': ←(1)
        $overrideTheme = 'twentyfourteen'; ←(2)
        break;
    default:
        $overrideTheme = false;
}
if ( $overrideTheme ) {
    $overrideTheme = wp_get_theme($overrideTheme);
    return $overrideTheme->exists()
        ? $overrideTheme[$type]
        : $theme;
}

(1)判定したいスラッグ名を記載する。
メソッド「preg_replace()」で、URL上にあるスラッグ名を取得しているので、それがcase文にて指定したスラッグ名を一致しているかを判定する。
(2)差し替えたいテーマ名をフォルダ名で記載する。
後続に記載されているメソッド「wp_get_theme()」にて、テーマが格納されているファルダ名を指定することによって、テーマ情報を取得できる。

 

これで、プラグインの修正は完了。

手順4.画面を表示し、テーマが切り替えられているかを確認する。
(トップページ表示時)

(カテゴリー:Java の表示時)

(カテゴリー:Java 内の記事の表示時)

注)2017/09/05現在、カテゴリーを差し替えて記事を表示すると、画面レイアウトが崩れてしまうバグがある。

      2017/09/06現在、バグは解消されてます。

画面表示にて、テーマの差し替えが行えていれば、完了。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA