Werte eigener Eingabefelder im Wordpress-Post-Formular speichern

Im vorherigen Tutorial haben wir uns angeschaut, wie man im Wordpress-Post-Formular eigene Boxen mit eigenen Eingabefeldern platziert - nun schauen wir uns an, wie man darin angegebene Daten abspeichert und wieder ausgibt.

Um Daten abzuspeichern verwenden wir die von Wordpress zur Verfügung gestellte Funktion „update_post_meta“ und zum auslesen „get_post_meta“. Damit wir die Werte bekommen, die der Benutzer in unser Feld eingegeben hat machen wir von der Wordpress-Action „save_post“ gebrauch (diese muss in einer init Funktion wieder mit einer eigenen Callback-Function verknüpft werden, sowie schon die add_boxes im anderen Tutorial):

<?php
add_action('init', 'my_init');
function my_init()
{
add_action('admin_menu', 'add_boxes');
add_action('save_post', 'my_save_post');
}

function add_boxes()
{
add_meta_box('my_field_id', 'Boxtitel', 'my_field_function', 'post', 'normal', 'high');
}

function my_field_function($post)
{
wp_nonce_field(plugin_basename(__FILE__), 'my_field_nonce');
?>
<label for="my_field">Beschreibung</label><br />
<input type="text" id="my_field" name="my_field" value="<?php echo get_post_meta($post->ID, 'my_field', TRUE)?>" />
<?php
}

function my_save_post($post_id)
{
if (wp_verify_nonce($_POST['my_field_nonce'], plugin_basename( __FILE__ ))) {
update_post_meta($post_id, 'my_field', $_POST['my_field']);
}
}
?>

Die save_post liefert uns nachdem ein Post gespeichert wurde die $post_id, mehr brauchen wir eigentlich nicht. Wir überlegen uns einen eindeutigen Namen dafür wie der Wert aus unserem Eingabefeld gespeichert werden soll und übergeben ihn zusammen mit der $post_id und dem $_POST-Wert aus unserem Feld an die update_post_meta und schon wird der Wert in der Datenbank gespeichert und mit dem aktuellen Post verknüpft.

Mit der wp_nonce_field kann man einfach und praktisch ein verstecktes Feld einfügen und es mit wp_verify_nonce dann auslesen, sodass unsere Speicher-Funktion wirklich nur ausgeführt wird, wenn unser Eingabefeld auch wirklich da ist.

Die wp_verify_nonce fügen wir der my_field_function hinzu, die wir schon aus dem ersten Tutorial kennen. Dort geben wir außerdem die get_post_meta in den value unseres Eingabefeldes hinein, sodass der Wert im Formular angezeigt wird - sofern er exisitert.

Kommentare