0

I'm trying to make a plugin that changes the CSS file. My client want to change the colors each season, and we want to make it foolproof so they won't break anything.

I've managed to create the option page but I can't seem to get the actual function to work.

<?php
class SeizoensKleuren {
    private $seizoens_kleuren_options;

    public function __construct() {
        add_action( 'admin_menu', array( $this, 'seizoens_kleuren_add_plugin_page' ) );
        add_action( 'admin_init', array( $this, 'seizoens_kleuren_page_init' ) );
    }

    public function seizoens_kleuren_add_plugin_page() {
        add_menu_page(
            'Seizoens kleuren', // page_title
            'Seizoens kleuren', // menu_title
            'manage_options', // capability
            'seizoens-kleuren', // menu_slug
            array( $this, 'seizoens_kleuren_create_admin_page' ), // function
            'dashicons-admin-appearance', // icon_url
            81 // position
        );
    }

    public function seizoens_kleuren_create_admin_page() {
        $this->seizoens_kleuren_options = get_option( 'seizoens_kleuren_option_name' ); ?>

        <div class="wrap">
            <h2>Seizoens kleuren</h2>
            <p>Verander hier de kleuren van de site n.a.v. het seizoen!</p>
            <?php settings_errors(); ?>

            <form method="post" action="options.php">
                <?php
                    settings_fields( 'seizoens_kleuren_option_group' );
                    do_settings_sections( 'seizoens-kleuren-admin' );
                    submit_button();
                ?>
            </form>
        </div>
    <?php }

    public function seizoens_kleuren_page_init() {
        register_setting(
            'seizoens_kleuren_option_group', // option_group
            'seizoens_kleuren_option_name', // option_name
            array( $this, 'seizoens_kleuren_sanitize' ) // sanitize_callback
        );

        add_settings_section(
            'seizoens_kleuren_setting_section', // id
            'Settings', // title
            array( $this, 'seizoens_kleuren_section_info' ), // callback
            'seizoens-kleuren-admin' // page
        );

        add_settings_field(
            'seizoen_0', // id
            'Seizoen:', // title
            array( $this, 'seizoen_0_callback' ), // callback
            'seizoens-kleuren-admin', // page
            'seizoens_kleuren_setting_section' // section
        );
    }

    public function seizoens_kleuren_sanitize($input) {
        $sanitary_values = array();
        if ( isset( $input['seizoen_0'] ) ) {
            $sanitary_values['seizoen_0'] = $input['seizoen_0'];
        }

        return $sanitary_values;
    }

    public function seizoens_kleuren_section_info() {
        
    }

    public function seizoen_0_callback() {
        ?> <select name="seizoens_kleuren_option_name[seizoen_0]" id="seizoen_0">
            <?php $selected = (isset( $this->seizoens_kleuren_options['seizoen_0'] ) && $this->seizoens_kleuren_options['seizoen_0'] === 'lente') ? 'selected' : '' ; ?>
            <option value="lente" <?php echo $selected; ?>>Lente</option>
            <?php $selected = (isset( $this->seizoens_kleuren_options['seizoen_0'] ) && $this->seizoens_kleuren_options['seizoen_0'] === 'zomer') ? 'selected' : '' ; ?>
            <option value="zomer" <?php echo $selected; ?>>Zomer</option>
            <?php $selected = (isset( $this->seizoens_kleuren_options['seizoen_0'] ) && $this->seizoens_kleuren_options['seizoen_0'] === 'herfst') ? 'selected' : '' ; ?>
            <option value="herfst" <?php echo $selected; ?>>Herfst</option>
            <?php $selected = (isset( $this->seizoens_kleuren_options['seizoen_0'] ) && $this->seizoens_kleuren_options['seizoen_0'] === 'winter') ? 'selected' : '' ; ?>
            <option value="winter" <?php echo $selected; ?>>Winter</option>
        </select> <?php
    }

}
if ( is_admin() )
    $seizoens_kleuren = new SeizoensKleuren();

/* 
 * Retrieve this value with:
 * $seizoens_kleuren_options = get_option( 'seizoens_kleuren_option_name' ); // Array of All Options
 * $seizoen_0 = $seizoens_kleuren_options['seizoen_0']; // Seizoen:
 */

function seizoenplugin_enqueue_styles() 
{
    // Get the user's stylesheet choice from the options, default to "lente"
    $seizoens_kleuren_options = get_option( 'lente');

    // Conditionally load the appropriate stylesheet
    if( $seizoens_kleuren_options == 'lente' ) {
        wp_enqueue_style( 'seizoenplugin-lente', plugins_url( '/css/lente.css', __FILE__ ) );
    } elseif( $seizoens_kleuren_options == 'zomer') {
        wp_enqueue_style( 'seizoenplugin-zomer', plugins_url( '/css/zomer.css', __FILE__ ) );
    } elseif( $seizoens_kleuren_options == 'herfst') {
      wp_enqueue_style( 'seizoenplugin-herfst', plugins_url( '/css/herfst.css', __FILE__ ) );
    } elseif( $seizoens_kleuren_options == 'winter') {
    wp_enqueue_style( 'seizoenplugin-winter', plugins_url( '/css/winter.css', __FILE__ ) );
  }
}

add_action('admin_enqueue_scripts', 'seizoenplugin_enqueue_styles' );

  
  ?>

Any help would be greatly appreciated :). Cheers!

  • 1
    There’s a lot of code there. What, specifically, isn’t working? – Jacob Peattie Jul 28 at 12:26
  • @JacobPeattie Hi, thanks for reaching out! It's the last function: seizoenplugin_enqueue_styles. It doesn't do anything, I select the option 'Zomer' on my settings page but it doesn't enqueue the CSS located at /css/zomer.css – mennobrein Jul 28 at 12:39
  • Are you trying to load the stylesheets in the admin? – Jacob Peattie Jul 28 at 12:40
  • No, I'm trying to load them in the front-end. – mennobrein Jul 28 at 12:45
0

You're using the wrong hook to enqueue your styles:

add_action('admin_enqueue_scripts', 'seizoenplugin_enqueue_styles' );

As the name suggests, admin_enqueue_scripts is for enqueuing scripts and styles in the admin. To enqueue scripts on the front end use wp_enqueue_scripts:

add_action('wp_enqueue_scripts', 'seizoenplugin_enqueue_styles' );
| improve this answer | |
  • Thanks for your answer, unfortunately it doesn't fix my problem. It still doesn't update my CSS on the front-end. – mennobrein Jul 28 at 14:49
  • I has to be wp_enqueue_style() .. not _script. – Fredrik Jul 28 at 15:02
  • @Fredrik Thank you, still doesn't load my CSS files though... – mennobrein Jul 28 at 15:09

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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