web-dev-qa-db-ja.com

テーマカスタマイザadd_setting()で変数を渡すことができません

テーマオプションをシリアル化されたデータとして保存しました。そして、私はテーマ名を得ることによってオプション名を命名しました。

$theme = wp_get_theme();
$settings = sanitize_title($theme).'-options'; // do not change!

しかし、$ settings変数を連結の有無にかかわらず渡そうとしています。それはこの致命的なエラーで終わります。

Fatal error: Call to a member function check_capabilities() on a non-object in C:\Users\SISIR\Dropbox\wamp\www\l\wp-includes\class-wp-customize-control.php on line 160

機能しない$settings.'[skin']セクションを確認してください。ただし、コードのその部分を'lead_capture_theme_option[skin]'に置き換えると機能します。致命的なエラー自体も不可解です。

    add_action( 'customize_register', 'lead_capture_theme_customize_register', 11 );

    function lead_capture_theme_customize_register($wp_customize) {

        $theme = wp_get_theme();
        $settings = sanitize_title($theme).'-options'; // do not change!
    //  var_dump($settings);

        $wp_customize->add_section( 'lead_cap_color_scheme', array(                                             'title'          => __( 'Color Scheme', 'themename' ),
        'priority'       => 35
        )
    );

        $wp_customize->add_setting( $settings.'[skin]', array(                                              'default'        => 'light',
        'type'           => 'theme_mod',
        'capability'     => 'edit_theme_options'                                            )
    );

        $wp_customize->add_control( 'lead_capture_theme_option[skin]', array(                                               'label'        => 'Select a Color Scheme',
        'type'           => 'select',
        'choices' => array('default', 'custom'),
        'section' => 'lead_cap_color_scheme',
        'settings' => 'lead_capture_theme_option[skin]'
    )
);
                                                $wp_customize->add_setting( 'lead_capture_theme_option[logo]', array(
                'type'           => 'theme_mod',
                'capability'     => 'edit_theme_options'
                )
        );

    $wp_customize->add_control( 
                                                                new WP_Customize_Image_Control( $wp_customize, 'lead_capture_theme_option[logo]', array(
                    'label'   => 'Upload Logo',
                    'section' => 'lead_cap_color_scheme'
                    )
                    )
                                                    );                                          
    }
1
Sisir

それを指摘するために@chip_bennettに感謝します!

Settings apiを使用して設定を登録し、theme_modの種類別にcustomize apiの設定を追加しようとしていたため、エラーが表示されました。 'type' => 'theme_mod''type' => 'option'に変更した後、それは働いた:)

2
Sisir