テーマカスタマイズでリサイズ(クロップ)が可能な画像のセクションを設置する
テーマカスタマイズでのヘッダー画像のように、リサイズ(クロップともいう)が可能な画像のセクションを設置したかった。
リサイズなしのプレーンなやつなら、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] . '" />';
}
}
項目の表示やテーマオプションの項目は適宜書き換えればいいと思う。
冒頭で「ヘッダー画像のように」と書いたが、例えばヘッダー画像をロゴに割り当てて、フッターに別のロゴ画像を設定させたいとき等に便利かもしれない。
以上、やりたかったことの覚書き。
