web-dev-qa-db-fra.com

Enregistrer les options du thème (options.php) depuis le frontend

J'essaie de sauvegarder une option de l'interface mais je ne trouve pas encore comment le faire.
L’idée est donc de donner au propriétaire du blog un formulaire simple avec une liste déroulante permettant de sélectionner un autre styleheet.css. Je l'ai construit pour le domaine wp-admin et cela fonctionne bien, mais je veux faire la même chose dans le frontend,

j'ai essayé d'inclure le wp-admin/options.php dans l'en-tête, mais rien, juste des erreurs,
Je poste le formulaire sur "wp-admin/options.php" mais il me redirige vers la page wp-admin/options.

voici le formulaire frontal:

<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>

merci beaucoup!

1
Philip

Vous ne voulez pas poster /wp-admin/options.php depuis le début , c’est une mauvaise idée et peut poser problème.

Pour mettre à jour les options du client, utilisez simplement update_option () et assurez-vous de vérifier correctement. Voici un exemple d'utilisation de votre code avec des corrections mineures:

<?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>

Maintenant, cela suppose que la clé d'option ou le nom est my_theme-style.

2
Bainternet

Peut-être que le sélecteur de thèmes rechargé (plug-in Wordpress) contient suffisamment d'informations sur la manière dont cela pourrait être fait?

1
hakre