4 Stimmen

Wordpress-Einstellungsseite speichert Einstellungen nicht in der Datenbank

Ich entwickle gerade mein erstes Wordpress-Plugin. Ich habe einige Anleitungen zum Erstellen einer Einstellungsseite befolgt.

Ich habe die folgende Seite, die den Wert der Felder in der Datenbank korrekt anzeigt. Wenn ich die Seite aufrufe, die Felder bearbeite und auf "Änderungen speichern" drücke, werden die Änderungen nicht in der Datenbank gespeichert. Wenn ich die Werte direkt in der Datenbank ändere, werden die Werte in den Eingabefeldern korrekt angezeigt, aber ich kann die Werte immer noch nicht über meine Seite aktualisieren.

Können Sie offensichtliche Fehler erkennen, die ich gemacht habe, oder Dinge, die ich übersehen habe?

<?php
add_action('admin_menu', 'SetupPage');

function SetupPage()
{   
    add_action('admin_init', 'RegisterSettings');

    // Setup administration menu item
    if (function_exists('add_options_page'))
    {
        add_menu_page(__("TestPage"), __("TestPage"), "manage_options", __FILE__, 'PageContent', plugins_url('/images/icon.png', __FILE__));
    }
}

function RegisterSettings()
{
    // Add options to database if they don't already exist
    add_option("test_option1", "", "", "yes");
    add_option("test_option2", "", "", "yes");
    add_option("test_option3", "", "", "yes");

    // Register settings that this form is allowed to update
    register_setting('test_settings', 'test_option1');
    register_setting('test_settings', 'test_option2');
    register_setting('test_settings', 'test_option3');
}

?>

<?php
function PageContent()
{
    if (!current_user_can('manage_options'))
        wp_die(__("You don't have access to this page"));

    ?>
    <div class="wrap">
    <h2><?_e("Test settings")?></h2>

    <form method="post">

        <?php settings_fields('test_settings'); ?>

        <table class="form-table">
            <tr valign="top">
            <th scope="row">test_option1</th>
            <td><input type="text" name="test_option1" value="<?php echo get_option('test_option1'); ?>" /></td>
            </tr>

            <tr valign="top">
            <th scope="row">test_option2</th>
            <td><input type="text" name="test_option2" value="<?php echo get_option('test_option2'); ?>" /></td>
            </tr>

            <tr valign="top">
            <th scope="row">test_option3</th>
            <td><input type="text" name="test_option3" value="<?php echo get_option('test_option3'); ?>" /></td>
            </tr>
        </table>

        <p class="submit">
        <input type="submit" class="button-primary" value="<?php _e('Save changes') ?>" />
        </p>

    </form>
    </div>
<?php
}
?>

4voto

joshvermaire Punkte 1476

Sieht für mich so aus, als müssten Sie die action="options.php" im Formular-Tag. Ansonsten scheint es richtig zu sein. Zweifellos haben Sie sich Folgendes angesehen diese Codexseite da Ihr Code sehr ähnlich ist, aber das ist auch schon der einzige Unterschied, den ich sehe.

2voto

chris c Punkte 283

Wenn Sie dieses Problem haben, sollten Sie auch überprüfen, ob Sie versuchen, ein Echo der Einstellungsfelder zu erzeugen.

Bei mir war das so:

echo '
    <div class="wrap">
        <h1>Theme Settings  <img src="' . get_stylesheet_directory_uri('stylesheet_directory') . '/images/site-icon.png" width="32" height="32" /></h1>
        <form method="post" action="options.php">
        ' . settings_fields( 'custom-settings-group' ) . '
        ' . do_settings_sections( 'custom-settings-group' ) . '
        <table class="form-table">
            <tr valign="top">
            <th scope="row">Brisbane Hours</th>
            <td><textarea rows="4" cols="40" name="brisbane_hours">' . esc_attr( get_option('brisbane_hours') ) . '</textarea></td>
            </tr>
            <tr valign="top">
            <th scope="row">Adelaide Hours</th>
            <td><input type="text" value="' . esc_attr( get_option('adelaide_hours') ) . '"/></td>
            </tr>
        </table>
        ' . submit_button() . '
    </form>
    </div>
    ';

Das bedeutet, dass diese beiden Felder mit einem Echo versehen wurden:

settings_fields( 'custom-settings-group' )
do_settings_sections( 'custom-settings-group' )

Die Umstellung auf diese Version hat das Problem für mich gelöst.

<?php settings_fields( 'snowys-custom-settings-group' ); ?>
<?php do_settings_sections( 'snowys-custom-settings-group' ); ?>

0voto

Philip Jones Punkte 386

Welchen Browser verwenden Sie? Es mag seltsam klingen, aber mit Chrome habe ich ein paar Plugins gefunden, die die Einstellungen nicht richtig speichern.

Keine großartige technische Antwort, aber wenn das Plugin nur für Ihren eigenen Gebrauch gedacht ist und Sie seine Verwaltungsfunktionen in Firefox und IE zum Laufen bringen können, ist es vielleicht einfacher, sich mit "gut genug" zufrieden zu geben.

0voto

Haben Sie eine Multisite eingerichtet? Wenn ja, wird die Einstellung in der Tabelle wp_options anstatt in der lokalen Tabelle wp_*_options single site erstellt. Sie müssen Folgendes verwenden

add_blog_option( get_current_blog_id(), "option_name", "" );

Dies tritt in der Regel auf, wenn Sie eine erzwungene Multisite auf einem bestehenden Blog haben und nun versuchen, die Optionen zu verwalten.

0voto

Vignesh Pichamani Punkte 7540

Ich habe den Code überprüft und von meiner Seite aus getestet, und ich habe einige Änderungen vorgenommen, siehe den vollständig funktionierenden Code

<?php
/**
 * Plugin Name: Testing Plugin
 */
add_action('admin_menu', 'SetupPage');
add_action('admin_init', 'RegisterSettings');

function SetupPage() {
    add_menu_page(__("TestPage"), __("TestPage"), "manage_options", __FILE__, 'PageContent', plugins_url('/images/icon.png', __FILE__));
}

function RegisterSettings() {
    // Add options to database if they don't already exist
    add_option("test_option1", "", "", "yes");
    add_option("test_option2", "", "", "yes");
    add_option("test_option3", "", "", "yes");

    // Register settings that this form is allowed to update
    register_setting('test_settings', 'test_option1');
    register_setting('test_settings', 'test_option2');
    register_setting('test_settings', 'test_option3');
}
?>

<?php

function PageContent() {
    if (!current_user_can('manage_options'))
        wp_die(__("You don't have access to this page"));
    ?>
    <div class="wrap">
        <h2><? _e("Test settings") ?></h2>

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

            <?php settings_fields('test_settings'); ?>

            <table class="form-table">
                <tr valign="top">
                    <th scope="row">test_option1</th>
                    <td><input type="text" name="test_option1" value="<?php echo get_option('test_option1'); ?>" /></td>
                </tr>

                <tr valign="top">
                    <th scope="row">test_option2</th>
                    <td><input type="text" name="test_option2" value="<?php echo get_option('test_option2'); ?>" /></td>
                </tr>

                <tr valign="top">
                    <th scope="row">test_option3</th>
                    <td><input type="text" name="test_option3" value="<?php echo get_option('test_option3'); ?>" /></td>
                </tr>
            </table>

            <p class="submit">
                <input type="submit" class="button-primary" value="<?php _e('Save changes') ?>" />
            </p>

        </form>
    </div>
    <?php
}
?>

Ich hoffe, es kann jemandem helfen :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X