web-dev-qa-db-fra.com

Wordpress Options Page ne fonctionne pas

Il me faut donc ajouter une page d’options personnalisées. Sur la base de tous les tutoriels que j’ai pu trouver, j’ai eu le code suivant pour créer une page d’options pour les officiers et les présidents de mon groupe, principalement, afin que je puisse écrire des éléments plus avancés mon site. Le code est ici:

add_action('admin_menu', 'composit_settings_page');

function composit_settings_page()
{
    add_options_page('Officers & Chairs', 'Officers & Chairs', 'manage_options', 'officers_chairs', 'composit_settings');
}

function composit_settings()
{
    $actives = get_users('role=contributor');
    $actives = array_merge($actives, get_users('role=editor'));
    $actives = array_merge($actives, get_users('role=administrator'));


$positions = array(
    "prytanis",
    "epiprytanis",
    "hypophetes",
    "hegemon",
    "grammateus",
    "histor",
    "pylortes",
    "crysopholos"
);

?>
    <div class="wrap">
        <div id="icon-options-general" class="icon32"><br></div>
        <h2>Officers & Chairs</h2>

        <form method="post" action="options.php">
            <?php settings_fields('officers-chairs'); ?>
            <?php foreach($positions as $position):
                    register_setting('officers-chairs', $position, 'intval');
                  endforeach; ?>
            <table class="form-table">
                <tbody>
                    <?php foreach($positions as $position): ?>
                        <tr valign="top">
                            <th scope="row">
                                <label for="<?= $position ?>"><?= ucwords($position) ?></label>
                            </th>
                            <td>
                                <select name="<?= $position ?>" id="<?= $position ?>" class="regular-text">
                                    <?php foreach($actives as $active): ?>
                                        <option value="<?= $active->ID ?>" <?php if(get_option($position) == $active->ID) { ?> selected <? } ?>><?=$active->first_name . " " . $active->last_name ?></option>
                                    <?php endforeach; ?>
                                </select>
                            </td>
                        </tr>
                    <?php endforeach; ?>
                </tbody>
            </table>
            <p class="submit"><input type="submit" name="submit" id="submit" class="button button-primary" value="Save Changes"></p>
        </form>
    </div>
<?
}

Cependant, quand je vais sauvegarder ça, j'obtiens l'erreur suivante:

ERROR: options page not found.

Je me sens complètement idiot de ne pas pouvoir comprendre cela, mais la documentation officielle ne m'a pas vraiment aidé du tout.

1
Jeremy Dentel

La partie problématique est cette ligne:

<form method="post" action="options.php">

Cela envoie votre formulaire à wp-admin/options.php (et je suppose que vous n'envoyez pas le formulaire à partir de cette URL). Laissez la valeur de l'action vide comme ceci:

<form method="post" action="">

Et votre formulaire s'enverra à la même page à partir de laquelle il a été envoyé. Ensuite, vous pouvez enregistrer les paramètres de la variable $ _POST avant de la sortir.

<form method="post" action="options.php">...

J'espère que cela t'aides...

PS: vous devriez également envisager d'utiliser wordpress nonces. Par exemple. https://codex.wordpress.org/Function_Reference/wp_nonce_field

2
david.binda