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.