WP_Customize_Controlを拡張する方法


27

ライブプレビューのカスタマイズパネルに新しい種類のコントロールを追加する方法を探しています。を使用してパネルに新しいセクションを追加する方法を見てきました add_action( 'customize_register'...

私が実装したいコントロールは、異なる種類のカラーピッカーです。で前のポスト、私たちは、ウィジェットを追加するためにコアクラスを拡張する方法を見て、しかし、私はここに欠けていると、スコープに私の物を持って来るために私を可能にするフックです- WP_Customize_Palette_Control。で

ここでコード始まりを見ることができます。このコードはfunctions.php私のテーマのファイルにあります。

助けてくれてありがとう。ロブ

コードを更新しました。今、私はrequire_onceクラスを持ち込まなければなりません。したがって、PHPエラーはなくなりましたが、新しいコントロールHTMLは表示されません。

<?php

require_once( ABSPATH . WPINC . '/class-wp-customize-setting.php' );
require_once( ABSPATH . WPINC . '/class-wp-customize-section.php' );
require_once( ABSPATH . WPINC . '/class-wp-customize-control.php' );

class WP_Customize_Palette_Control extends WP_Customize_Image_Control {  
        public $type    = 'palette';
        public $removed = '';
        public $context;

        public function enqueue() {
                //wp_enqueue_script( 'wp-plupload' );
        }

        public function to_json() {
                parent::to_json();

                $this->json['removed'] = $this->removed;

                if ( $this->context )
                        $this->json['context'] = $this->context;
        }

        public function render_content() {
                ?>
                <label>
                        <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
                        <div>
                                <a href="#" class="button-secondary upload"><?php _e( 'Upload' ); ?></a>
                                <a href="#" class="remove"><?php _e( 'Remove' ); ?></a>
                        </div>
                </label>
                <?php
        }
}

//new WP_Customize_Palette_Control();


//add_action('customize_controls_init', 'WP_Customize_Palette_Control');

// add an option to the customize panel

function sci_customize_controls_init($wp_customize) {
    $wp_customize->add_section( 'themename_color_scheme', array(
        'title'          => __( 'Color Scheme', 'themename' ),
        'priority'       => 35,
    ) );

    $wp_customize->add_setting( 'themename_theme_options[color_scheme]', array(
    'default'        => 'some-default-value',
    'type'           => 'option',
    'capability'     => 'edit_theme_options',
) );


$wp_customize->add_control( 'themename_color_scheme', array(
    'label'      => __( 'Color Scheme', 'themename' ),
    'section'    => 'themename_color_scheme',
    'settings'   => 'themename_theme_options[color_scheme]',
    'type'       => 'palette',
    'choices'    => array(
        'value1' => 'Choice 1',
        'value2' => 'Choice 2',
        'value3' => 'Choice 3',
        ),
) );

}

add_action( 'customize_register', 'sci_customize_controls_init' );

3
軽微な点ですが、コントロールがWordPressコアに入る場合を除き、WP_プレフィックスを使用しないでください。独自のプラグイン/テーマ名をクラス名のプレフィックスとして使用します。
オットー

回答:


14

使用例とクラス

私の現在のテーマで、これをどのように使用できるかを見ることができます。クラスを使用することもできます。Githubでこのクラスを参照functions.phpし、これを含めるかどうかを確認してください。

開始と初期化

customize_register フックを使用して、テーマカスタマイザーのカスタム設定を登録できます。

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

    $wp_customize->add_section( 'themedemo_demo_settings', array(
        'title'          => 'Demonstration Stuff',
        'priority'       => 35,
    ) );

    $wp_customize->add_setting( 'some_setting', array(
        'default'        => 'default_value',
    ) );

    $wp_customize->add_control( 'some_setting', array(
        'label'   => 'Text Setting',
        'section' => 'themedemo_demo_settings',
        'type'    => 'text',
    ) );

    $wp_customize->add_setting( 'some_other_setting', array(
        'default'        => '#000000',
    ) );

    $wp_customize->add_control( new WP_Customize_Color_Control( $wp_customize, 'some_other_setting', array(
        'label'   => 'Color Setting',
        'section' => 'themedemo_demo_settings',
        'settings'   => 'some_other_setting',
    ) ) );

}

テーマ内の使用:

以下の例のように使用します↓:

echo 'some_setting => ' .get_theme_mod( 'some_setting', 'default_value' )."\n";
echo 'some_other_setting => ' .get_theme_mod( 'some_other_setting', '#000000' )."\n";
echo 'non_existent_setting => '.get_theme_mod( 'non_existent_setting', 'default_value' )."\n";

調整

コントロールを変更することもできます:

$wp_customize->add_control( 'themename_color_scheme', array(
    'label'      => __( 'Color Scheme', 'themename' ),
    'section'    => 'themename_color_scheme',
    'settings'   => 'themename_theme_options[color_scheme]',
    'type'       => 'radio',
    'choices'    => array(
        'value1' => 'Choice 1',
        'value2' => 'Choice 2',
        'value3' => 'Choice 3',
        ),
) );

デフォルトの制御タイプはtextです。テキストボックスコントロールを作成します。もう1つのコントロールタイプはdropdown-pages、WordPressページのドロップダウンリストを作成します。

しかし、それだけではありません。実際にはさらにいくつかありますが、それらは非常にカスタマイズされているため、宣言が異なります。

これはOOPを利用します:

$wp_customize->add_control(
    new WP_Customize_Color_Control( $wp_customize, 'link_color', array(
        'label'    => __( 'Link Color', 'themename' ),
        'section'  => 'themename_color_scheme',
        'settings' => 'themename_theme_options[link_color]',
    ) )
);

その他の注意事項:

  • WP_Customize_Upload_Control–これにより、ファイルのアップロードボックスが表示されます。ただし、これを直接使用することはおそらくないでしょう。他の目的のために拡張することもできます。次のようなものです WP_Customize_Image_Control。–これにより、画像ピッカーとアップローダーボックスが提供されます。アップロードコントローラーを拡張します。カスタムバックグラウンドピースで実際に見ることができます。ユーザーは、新しいファイルをアップロードして背景画像にすることができます。
  • WP_Customize_Header_Image_Control–ヘッダーピースのサイズ変更アクションのため、少し特別な処理と表示が必要なのでWP_Customize_Header_Image_Control
  • WP_Customize_Image_Controlその機能を追加します。カスタムヘッダーピースで実際に動作を確認できます。ユーザーはヘッダーファイルとして新しいファイルをアップロードできます。

「Theme Customizer」の詳細については、ottosブログご覧ください

アップデート11/06/2012

読み取りの可能性およびその他の例については、ライブサンプルを参照してください。ソースおよびドキュメントのオープンリポジトリをご覧ください。

2013年1月15日更新

簡単ですぐに使用できるカスタムクラスを使用してgithubにリポジトリを作成しました。たぶん、あなたはそれを使うか、あなたのアイデアと解決策で前進することができます。


4

OK、これを行う方法は次のとおりです。制御クラスを1つ以上の新しいファイルに分離します。

customize_registerにフックされた関数またはメソッドがありますか?その関数またはメソッドでは、カスタムコントロールを追加する直前に新しいファイルが必要になります。その場合、PHPはクラスの再定義について文句を言いません。

注:これはそのままでは機能しませんが、トリックを示しています。

add_action('customize_register', array('myAddControl', 'customize_register') );

class myAddControl{
public function customize_register()
{
    global $wp_customize;


            //This will do the trick
    require_once(dirname(__FILE__).'/class-gctfw-theme-control.php');


    $wp_customize->add_section( 'gctfw_switch_theme' , array(
        'title'      => 'Switch theme',
        'priority'   => 25,
    ) );

    $wp_customize->add_setting( 'gctfw_select_theme' , array(
        'default'     => $wp_customize->theme()->get('Name'),
        'transport'   => 'refresh',
        'capabilities' => 'manage_options'
    ) );

    $myControl = new gctfw_Theme_Control( $wp_customize, 'gctfw_select_theme', array(
        'label'        => __( 'Select theme', 'mytheme' ),
        'section'    => 'gctfw_switch_theme',
        'settings'   => 'gctfw_select_theme',
    ) ) ;
    $wp_customize->add_control( $myControl );
    }
}//class

3

クラスを使用することはありません。クラスの新しいインスタンスをadd_controlメソッドに渡してみてください:

$control_args = array(
  // your args here
); 

$my_control = new WP_Customize_Palette_Control(
                $wp_customize, 'themename_color_scheme', $control_args);

$wp_customize->add_control($my_control);

また、設定のオプション名が配列の一部であることをWPが認識していないと思います。たぶんのthemename_theme_options_color_scheme代わりに持っている方が良いでしょうthemename_theme_options[color_scheme]

拡張するクラスは画像アップロードコントロールに属します。カラーピッカーを作成する場合は、おそらくWP_Customize_Controlクラスを拡張する必要があります。



1

完全を期すために:テーマカスタマイザーに数値フィールドを追加する方法の例。

class Customize_Number_Control extends WP_Customize_Control
{
    public $type = 'number';

    public function render_content()
    {
        ?>
        <label>
            <span class="customize-control-title"><?php echo esc_html( $this->label ); ?></span>
            <input type="number" size="2" step="1" min="0" value="<?php echo esc_attr(  $this->value() ); ?>" />
        </label>
        <?php
    }
}

私はあなただけで渡すことができ、それが必要だとは思わないnumbertype、デフォルトのコントロールのための、および使用がinput_attrs合格するstepなど
イアン・ダン

@IanDunn追加の回答として例を追加できますか?ありがとう!
カイザー

0

WP_Customizeの前にバックスラッシュを追加する必要があると思います。だから、それは

class WP_Customize_Palette_Control extends \WP_Customize_Image_Control

バックスラッシュはWP_Customize_Image_Controlが同じ名前空間からではないと想定したため

それが助けたかどうか教えてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.