WordPress Snippet

ワードプレスをカスタマイズしよう

テーマメタデータの取得と保存

投稿日: by

テーマメタデータの取得と保存

投稿日: by

投稿に、投稿メタデータを扱うカスタムフィールドがあるように、テーマに関しても、そのテーマごとのメタデータを扱う必要がある

例えば、twentytenでは、背景やヘッダー画像ヘッダテキスト色などがそれにあたる

これらのレコードは、options テーブルに mods_テーマファイル名 というフィールドに保存される

利用方法のサンプルは以下のようになる

.footer {
border-top: solid 1px #<?php echo get_theme_mod( 'background_color' ); ?>}
}

取得、設定、削除は、以下の関数を利用できる。

類似のもので、以下のような関数がありますが

<?php add_option($name, $value= '', $deprecated= '', $autoload= 'yes'); ?>

複数必要な場合、同じテーマファイル用のoptionテーブルのフィールドが複数になるのに対して、この関数は、ひとつのフィールドに複数のメタ情報を格納する点が異なる。

$nameには、テーマ名が入る

<?php set_theme_mod( $name, $value ) ?>

<?php remove_theme_mod( $name ) ?> 

Remove theme modifications option for current theme. 
<?php remove_theme_mods() ?>
get_theme_mod($name, $default= false)

※get_theme_modは、returnの時に、 return apply_filters( “theme_mod_$name”, $mods[$name] ), 第二引数は、見つからなかったときのデフォルト値

theme_modで現在なにがセットされているのかを調べる方法

$mods= get_theme_mods();
var_dump($mods);

style.cssのページヘッダ情報の取得

function my_current_theme_info() {
	$themes= get_themes();
	$current_theme= get_current_theme();
	if ( ! isset( $themes[$current_theme] ) ) {
		delete_option( 'current_theme' );
		$current_theme= get_current_theme();
	}
	$ct->name= $current_theme;
	$ct->title= $themes[$current_theme]['Title'];
	$ct->version= $themes[$current_theme]['Version'];
	$ct->parent_theme= $themes[$current_theme]['Parent Theme'];
	$ct->template_dir= $themes[$current_theme]['Template Dir'];
	$ct->stylesheet_dir= $themes[$current_theme]['Stylesheet Dir'];
	$ct->template= $themes[$current_theme]['Template'];
	$ct->stylesheet= $themes[$current_theme]['Stylesheet'];
	$ct->screenshot= $themes[$current_theme]['Screenshot'];
	$ct->description= $themes[$current_theme]['Description'];
	$ct->author= $themes[$current_theme]['Author'];
	$ct->tags= $themes[$current_theme]['Tags'];
	$ct->theme_root= $themes[$current_theme]['Theme Root'];
	$ct->theme_root_uri= $themes[$current_theme]['Theme Root URI'];
	return $ct;
}

$theme= my_current_theme_info();

echo '<pre>';
var_dump( $theme );
echo '</pre>';