WordPressテーマをマルチサイト対応っぽくカスタマイズする方法

WordPressにはマルチサイト機能があるが、アクセス解析タグ、アドセンスタグなどをテーマに直接書くと、複数のサイトで同じテーマを利用した場合に困った事になる。
(テーマの直接編集だと同じタグが出力されてしまうので。)

サイト単位で子テーマを割り当てる・・・ってのでも良いのだろうけれど、結構、

めんどくさー

なので、それらのサイト毎の設定というか、独自のタグなどをサイト単位で設定出来るようにする方法として…。
テーマ中で呼び出す事の出来るデータをWordPressの管理画面からoptionsテーブルに保存し、テーマ中から呼び出す機能を追加する方法を書いてみる。

function.phpの最下部辺りに以下のソースを書き足す。

class ThemeOriginalOptions {

    function getOptionNameArr() {
        /*
        ''(シングルクォート)で囲まれている項目名を書き換える。
        ここに書いた行数分のフォームが管理画面に表示される。
        項目を追加する場合は行を増やす。
        */
        $optionNameArr[] = 'アドセンスタグ記事ヘッダ';
        $optionNameArr[] = 'アドセンスタグ記事フッタ';
        $optionNameArr[] = 'アドセンスタグサイドバー';
        return $optionNameArr;
    }

    function adminMenu() {
        add_options_page('テーマ用タグ', 'ThemeOriginalOptions', 8, __FILE__, array($this, 'setOptions'));
    }

    function getFormTagArr() {
        if (is_array($this->getOptionNameArr())) {
            $optionNameArr = $this->getOptionNameArr();
            foreach ($optionNameArr as $key => $name) {
                $key = 'theme_original_options' . $key;
                $optionsArr['form'] .= '<b>'.$name.'</b>(キー:'.$key.'):<br /><textarea name="'.$key.'"  cols="80" rows="8">' . get_option($key) . '</textarea><br /><br />';
                $optionsArr['key'] .= $key.',';
            }
            return $optionsArr;
        }
    }

    function setOptions() {
        $optionsArr = $this->getFormTagArr();
        echo '<b>テーマ用タグ設定</b><br />';
        echo '<form method="post" action="options.php">';
        wp_nonce_field('update-options');
        echo $optionsArr['form'];
        echo '<input type="hidden" name="action" value="update" />';
        echo '<input type="hidden" name="page_options" value="'.$optionsArr&#91;'key'&#93;.'" />';
        echo '<input type="submit" class="button-primary" value="設定更新" />';
        echo '</form>';
    }

}
$themeOriginalOptions = new ThemeOriginalOptions();
add_action('admin_menu', array($themeOriginalOptions, 'adminMenu'));

使い方:
1.テーマのfunctions.php に上記のソースを書き足す。
2.以下の部分を任意に変更。

        $optionNameArr[] = 'アドセンスタグ記事ヘッダ';
        $optionNameArr[] = 'アドセンスタグ記事フッタ';
        $optionNameArr[] = 'アドセンスタグサイドバー';

項目を増やしたい場合は

        $optionNameArr[] = 'ほげほげ';

という感じで行を増やしてやればOK。

3.function.phpの編集が完了したら、管理画面のサイドバー「設定」にThemeOriginalOptionsという設定項目が出てくるので、クリック。

4.設定したいアクセス解析タグなどを挿入
5.テーマ中の任意の箇所で

get_option('キー名');

として呼び出す。
(キー名は設定画面に表示される物。)

これで同じテーマを複数サイトで使いまわしても、特定の部分については別のHTMLを吐き出す事が出来る。

※自分用に書いたものなので、他の人にとって便利かどうかは不明。

2011年03月27日  タグ:

Leave a Reply