テーマカスタマイズでリサイズ(クロップ)が可能な画像のセクションを設置する

テーマカスタマイズでのヘッダー画像のように、リサイズ(クロップともいう)が可能な画像のセクションを設置したかった。

 

リサイズなしのプレーンなやつなら、WP_Customize_Image_Controlを使えばいけるものの、これだと画像を選択した後の切り抜き画面が出てこない。

 

で、昼餉の後の睡魔に若干ウトウトしながらも、WP_Customize_Image_Controlに類似したソースコードを調べてたら、WP_Customize_Cropped_Image_Controlなるものを発見した。

 

$wp_customizeでの書式に則って以下のように記述すると、記事の表題通りの画像のセクションが設置できる。

/* テーマカスタマイズのファイルへ追加(テーマカスタマイズのセクション用) */
function theme_customize_register( $wp_customize ) {

	$wp_customize->add_section( 'footer_image_settings', array(
		'title'   => __( 'Footer image', 'theme-language' ),
		'priority'=> 60,
		'description' => __( '', 'materialike' ),
	) );

	$wp_customize->add_setting( 'footer_image', array(
		'default'   => '',
		'transport' => 'refresh',
	) );
	$wp_customize->add_control(
		new WP_Customize_Cropped_Image_Control( $wp_customize, 'footer_image_control', array_merge( array(
			'label'   => __( 'Footer image', 'theme-language' ),
			'section' => 'footer_image_settings',
			'settings'=> 'footer_image',
			'priority'=> '10',
			'button_labels' => array(
				'select'       => __( 'Select image', 'theme-language' ),
				'change'       => __( 'Change image', 'theme-language' ),
				'remove'       => __( 'Remove', 'theme-language' ),
				'default'      => __( 'Default', 'theme-language' ),
				'placeholder'  => __( 'No image selected', 'theme-language' ),
				'frame_title'  => __( 'Select image', 'theme-language' ),
			),
		), theme_footer_setting() ) )
	);

}
add_action( 'customize_register', 'theme_customize_register' );

/* functions.phpへ追加(画像のリサイズ設定用) */
function theme_footer_setting() {

	return array(
		'width'  => 128,
		'height' => 64,
		'flex_width' => false,
		'flex_height'=> false,
	);

}

/* functions.phpへ追加(テンプレート等での画像の表示用) */
function theme_footer_image() {

	// wp_get_attachment_image_src()の第二引数を空にすることでテーマカスタマイズ側のリサイズ状態のまま表示可能
	$image = wp_get_attachment_image_src( get_theme_mod( 'footer_image', '' ), '' );

	if ( isset( $image[0] ) ) {
		echo '<img src="' . $image[0] . '" />';
	}

}

 

項目の表示やテーマオプションの項目は適宜書き換えればいいと思う。

 

冒頭で「ヘッダー画像のように」と書いたが、例えばヘッダー画像をロゴに割り当てて、フッターに別のロゴ画像を設定させたいとき等に便利かもしれない。

 

以上、やりたかったことの覚書き。

カテゴリ

この記事のコメント

コメントはないです。

コメントを残す

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