Pergunta

I try to save an option from the frontend but i can't find yet how to do it.
So, the idea is to give the blog owner a simple form with a dropdown that can select a different stylesheet.css. I have build it for the wp-admin area and it works fine, but i want to do the same in the frontend,

i have tried to include the wp-admin/options.php in the header but nothing, just errors,
i post the form to "wp-admin/options.php" but it redirect me in the wp-admin/options page.

here is the frontend form:

<form id="save-theme" name="save-theme" action="/wp-admin/options.php" method="post">
<select>
    <option>Select Theme</option>
    <option>Red</option>
    <option>Dark</option>
    <option>White</option>
</select>
<button name="update-options" type="submit">Save</button>
<?php wp_nonce_field('update-options'); ?>
</form>

thanks a lot!

Foi útil?

Solução

You Do Not want to post /wp-admin/options.php from the front end , thats a bad idea and can cause problems.

To updated Options from the frontend simply use update_option() and make sure you verify correctly. here is an example using your code with minor fixes:

<?php 
    if (isset($_POST['stylesheet']) && isset($_POST['action']) && $_POST['action'] == "update_theme"){
        if (wp_verify_nonce($_POST['theme_front_end'],'update-options')){ 
            update_option('my_theme-style',$_POST['stylesheet']);
        }else{
        ?><div class="error"><?php echo 'update failed'; ?></div><?php}
    }
?>


<form id="save-theme" name="save-theme" action="" method="post">
<select name="stylesheet">
<?php $selected = get_option('my_theme-style');
    <option>Select Theme</option>
    <option value="1" <?php if ($selected == 1) echo 'selected="selected"'; ?>>Red</option>
    <option value="2" <?php if ($selected == 2) echo 'selected="selected"'; ?>>Dark</option>
    <option value="3" <?php if ($selected == 3) echo 'selected="selected"'; ?>>White</option>
</select>
<?php wp_nonce_field('update-options','theme_front_end'); ?>
<input type="hidden" name="action" value="update_theme">
<input type="submit" name="update-options" value="Save">
</form>

Now this assumes that the option key or name is my_theme-style.

Outras dicas

Maybe Theme Switcher Reloaded (Wordpress Plugin) contains enough information on how that could be done?

Licenciado em: CC-BY-SA com atribuição
Não afiliado a wordpress.stackexchange
scroll top