web-dev-qa-db-ja.com

テーマカスタマイザの画像コントロールにデフォルトの画像を追加するにはどうすればいいですか?

テーマカスタマイザのイメージコントロールに、選択したイメージを事前に読み込む方法を見つけようとしています。アップロードされたリストに自動的に表示されるように、ディレクトリにコントロールを向ける方法はありますか?それで、ユーザーはそれが好きならリストから画像を選ぶことができます。

誰かがこれを説明することができれば私はそれを高く評価します。

編集:賞金とともに情報を追加することにしました。

ユーザーがテーマカスタマイザー(テーマカスタマイザーAPIを使用して構築された)を使用していて、現在の背景画像が気に入らず編集したくないと判断した場合は、背景画像設定/コントロールを選択それ。ユーザーが必要に応じて選択したり、新しい画像をアップロードしたりできるように、デフォルトでドロップダウンに画像のグループを表示したいと思います。そのため、ドロップダウンを選択すると、5程度の画像がプリロードされています。

これはおそらくコントロールをフォルダに向けることによって行われる必要があると思いますが、その方法はわかりません。私は前にこれを見ました、しかし、私はどこで覚えていることができません。

テーマカスタマイザでデフォルトの画像コントロールを使用しています。

2
user1632018

私たちの旅は here で始まるWP_Customize_Background_Image_Controlクラスで始まります。これは WP_Customize_Image_Control です。

これらの組み込みの背景を既存のUpload NewUploadedタブと一緒に新しいタブで提供することを想像します。次のことを実現するには、少なくとも2つの方法があります。WP_Customize_Background_Image_Controlクラスに基づいて独自の修正クラスを作成するか、代わりにグローバルな$wp_customizeを乗っ取ってデフォルトの動作を変更するかのいずれかです。前者は(おそらくよりクリーンではあるが)より長い道のりであり、まず最初に新しいコントロールを定義する必要があります。

class WP_Customize_Background_Image_Control_Defaults extends WP_Customize_Background_Image_Control {
    public function __construct( $manager ) {
    ...
        $this->add_tab( 'builtins', __('Built-ins'), array( $this, 'tab_builtins' ) );

    ...
    public function tab_builtins() {
    ...
}

次に、デフォルトで登録されていた デフォルトの背景画像コントロール を削除し、独自の新しいクラスを追加します。

add_action( 'customize_register', function( $wp_customize ) {
    /* Substitute the default control for our new one */
    $wp_customize->remove_control( 'background_image' );
    $wp_customize->add_control( new WP_Customize_Background_Image_Control_Defaults( $wp_customize ) );
}, 11, 1 );

新しいタブは、デフォルトの tab_uploaded が細かい調整でどのように機能するのかと同じように、テーマに同梱されている一連の定義済み画像を単純にエコーアウトします。この関数は、カスタムクラスを使用しているときも、より速いアプローチを試しているときも同じです。

より速く、よりコンパクトなアプローチは、初期化の後にデフォルトコントロールを私たちの曲に合わせて踊らせることを含みます。

add_action( 'customize_register', function( $wp_customize ) {

    $control = $wp_customize->get_control( 'background_image' );
    $control->add_tab( 'builtins', __('Built-ins'), function() {
        /* Supply a list of built-in background that come with your theme */
        $backgrounds = array(
            'images/bg-01.png', 'images/bg-02.png', ...
        );

        global $wp_customize;
        $control = $wp_customize->get_control( 'background_image' );

        foreach ( (array) $backgrounds as $background )
            $control->print_tab_image( esc_url_raw( get_stylesheet_directory_uri() . '/' . $background ) );

    } );

}, 11, 1 );

あなたがあなた自身のクラスを使うことを選択した場合もやはり、あなたはほとんど同じことをするでしょう、add_tabはすべてのあなたのプリセット背景に対してprint_tab_imageをします。とても簡単です。私はあなたがさまざまな可能性と目的でコードをさらに改善することができると確信しています、しかし全体的にこれは行くべき道のように見えます。

質問、アイデア、考えを歓迎します。

Default background images in Theme Customizer

11
soulseekah