0

Code

Currently, I'm working project to automatically generate all my theme customizer options with simple array.

'nav_font_style' => array(
    'default_options'  => array(
        1                   => 'default',),
    'css'               => "    nav#for-mobile h1 { font-family: $",
    'stylesheet_handle' => 'semperfi-navigation',
    'label'             => __('Font', 'semper-fi-lite'),
    'description'       => array(
        1                   => '', ),
    'panel_title'       => __('Navigation', 'semper-fi-lite'),
    'panel_priority'    => 1,
    'priority'          => 10,
    'section_title'     => __('Menu Title', 'semper-fi-lite'),
    'section_priority'  => 10,
    'selector'          => 'nav#for-mobile h1',
    'type'              => 'font'),

This array has everything needed to generate a theme option. Bellow is the loop that it will run through.

            // Add a font selector to Customizer
        if ($values['type'] == 'font') {

            $wp_customize->add_setting( $option . '_' . $i, array(
                'default'           => 'Default',
                'sanitize_callback' => 'semperfi_sanitize_css', ) );

            $wp_customize->add_control( $option . '_' . $i . '_control', array(
                'section'           => str_replace( "~", $semperfi_customizer_multi_dimensional_array[$i], $section_title_transformed ),
                'label'             => $values['label'],
                'description'       => $values['description'][$i],
                'priority'          => $values['priority'],
                'type'              => 'select',
                'settings'          => $option . '_' . $i,
                'stylesheet_handle' => $values['stylesheet_handle'],
                'choices'           => $finalized_google_font_array));

        }

When I go the sanitize_callback I'm having issues using this to access all the choices like it's explained on How to get input_attrs in the sanitize function?

function semperfi_sanitize_css( $input , $setting ) {

set_theme_mod( 'semperfi_testing' , $setting->manager->get_control( 'nav_font_style_1' )->input_attrs );

return $input;

}

The above sanitize function is just for testing but I really need to access the handle so that I can apply CSS to the correct sheet style.

Thanks for your help!

2 Answers 2

0

You don't need the input_attrs, you need choices. This is what I do:

function mytheme_sanitize_choice( $input, $setting ) {
    $control = $setting->manager->get_control( $setting->id );
    $valid = $control->choices;
    return array_key_exists( $input, $valid ) ? $input : $setting->default;
}
1
  • I'm doing way more than checking if the 'choice' is in the array. Going to have separate theme mod where I build out the individual inline sheet style for each CSS handle. this is part of a heavy-duty option customizer generator.
    – Schwarttzy
    Commented Jan 12, 2019 at 1:07
0

Here's the solution... figures I get it after I post it.

// Add a font selector to Customizer
            if ($values['type'] == 'font') {

                $wp_customize->add_setting( $option . '_' . $i, array(
                    'default'           => 'Default',
                    'sanitize_callback' => 'semperfi_sanitize_css', ) );

                $wp_customize->add_control( $option . '_' . $i , array(
                    'choices'           => $finalized_google_font_array,
                    'description'       => $values['description'][$i],
                    'input_attrs'       => array(
                            'stylesheet_handle' => $values[ 'input_attrs' ][ 'stylesheet_handle' ],
                            'css'               => $values[ 'input_attrs' ][ 'css' ], ),
                    'label'             => $values['label'],
                    'priority'          => $values['priority'],
                    'section'           => str_replace( "~", $semperfi_customizer_multi_dimensional_array[$i], $section_title_transformed ),
                    'settings'          => $option . '_' . $i,
                    'type'              => 'select', ) );

            }

        function semperfi_sanitize_css( $input , $setting ) {

        set_theme_mod( 'semperfi_testing' , $setting->manager->get_control( $setting->id )->input_attrs[stylesheet_handle] );

        return $input;
        // just testing right now

    }

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.