PHP WordPress Metabox mit Dropdown Menü

cardinal

Lt. Junior Grade
Registriert
Mai 2010
Beiträge
467
Moin Community,

ich habe ein Prolem mit meiner Wordpress Metabox. Sie wird richtig angezeigt, doch bleiben die Daten, die ich eintrage bzw. auswähle nicht gespeichert und die Box macht immer einen "Reset"

Hier mal der Code:
PHP:
<?php

//Wenn Metaboxen im Menü hinzugefügt werden, wird die Funktion projekte_addMetabox ausgeführt
add_action( 'add_meta_boxes', 'projekte_addMetabox' );

//In dem Moment wo ein Projekt gespeichert wird, werden die Zusatzinformationen aus der Optionen-Metabox gespeichert
add_action( 'save_post', 'projekte_saveData' );

//Fügt eine "Optionen-Metabox" zum posttype "projekte" hinzu
function projekte_addMetabox(){
    add_meta_box(
        'projekte_metabox',
        'Optionen',
        'projekte_optionenbox',
        'projekte',
        'side',
        'high'
    );
}


function projekte_optionenbox()
{
    // $post is already set, and contains an object: the WordPress post
    global $post;
    $values = get_post_custom( $post->ID );
    $text = isset( $values['my_meta_box_text'] ) ? $values['my_meta_box_text'] : '';
    $selected = isset( $values['my_meta_box_select'] ) ? esc_attr( $values['my_meta_box_select'] ) : '';
    $check = isset( $values['my_meta_box_check'] ) ? esc_attr( $values['my_meta_box_check'] ) : '';

    // "nonce-Feld" wird später beim speichern benutzt
    wp_nonce_field( 'projekte_action', 'projekte_name' );
    ?>
    <p>
        <label for="my_meta_box_text">Textfeld</label>
        <input type="text" name="my_meta_box_text" id="my_meta_box_text" value="<?php echo $text; ?>" />
    </p>

    <p>
        <label for="my_meta_box_select">Optionen:</label>
        <select name="custom_element_grid_class" id="custom_element_grid_class">
            <option value="one" <?php selected( $selected, 'one' ); ?>>Option 1</option>
            <option value="two" <?php selected( $selected, 'two' ); ?>>Option 2</option>
        </select>
    </p>

    <p>
        <input type="checkbox" id="my_meta_box_check" name="my_meta_box_check" <?php checked( $check, 'on' ); ?> />
        <label for="my_meta_box_check">Nur zum Test eingefügt :)</label>
    </p>
<?php
}



function projekte_saveData( $post_id ){
    //Abfrage: Handelt es sich um ein Autosave?
    if( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) return;

    //Abfrage: Kommen die Informationen aus dem richtigen Dokument?
    if( !isset( $_POST['projekte_name'] ) || !wp_verify_nonce( $_POST['projekte_name'], 'projekte_action' ) ) return;

    //Abfrage: Darf der aktuelle Nutzer diesen speziellen Artikel abspeichern?
    if( !current_user_can( 'edit_post' ) ) return;

    //Eigentliches Speichern der Daten
    $allowed = array(
        'a' => array( 
            'href' => array() 
        )
    );

    //Überprüfung der Daten bevor diese gespeichert werden
    if( isset( $_POST['my_meta_box_text'] ) )
        update_post_meta( $post_id, 'my_meta_box_text', wp_kses( $_POST['my_meta_box_text'], $allowed ) );

    if( isset( $_POST['my_meta_box_select'] ) )
        update_post_meta( $post_id, 'my_meta_box_select', esc_attr( $_POST['my_meta_box_select'] ) );

    //Speichern der Checkbox
    $chk = isset( $_POST['my_meta_box_check'] ) && $_POST['my_meta_box_select'] ? 'on' : 'off';
    update_post_meta( $post_id, 'my_meta_box_check', $chk );
}

Sieht jemand den Fehler? Werden die Daten nicht ordentlich gespeichert oder übergeben?
Nur das Textfeld wird richtig gespeichert, dies sehe ich in den "Custom Fields", es wird aber dennoch nach einem Aktualisieren der Seite nicht richtig angezeigt. Dort steht immer "array"...

Vielen Dank schonmal,
Lui


EDIT:
Funktioniert jetzt. Trotzdem danke an alle :)
 
Zuletzt bearbeitet:
Zurück
Oben