Hochgeladene WordPress Kopfzeile speichern

Die Twenty Ten Header Auswahl
Die Twenty Ten Header Auswahl
Die neue Möglichkeit der Headerverwaltung im WordPress Adminbereich bietet eine recht komfortable Lösung, dieses Seitenelement zu ändern, ohne im Code aktiv werden zu müssen. Das neue Default Theme Twenty Ten zum Beispiel, arbeitet schon damit. Es hat eine Reihe von vorinstallierten Headern aus denen man sich ein geeignetes auswählen kann und bietet darüberhinaus noch die Möglichkeit eigene Header hochzuladen und ins richtige Format zu setzen. Allerdings ist das hochgeladen Bild nur solange verwendbar wie noch kein neuer Header wieder hochgeladen ist. Wer also über Ostern einen Hasen im Header haben moöhte, muss zu Pfingsten wieder seinen alten Header hochladen. Um das zu Umgehen und die Freiheit zu haben aus allen hochgeladenen Headern auswählen zu können, habe ich das folgende Script geschrieben.

///////////////////////////////////////////////////////////////////////////////
///	Custom Header Image
///////////////////////////////////////////////////////////////////////////////

/**
 * Fuegt die Header Thumbnail-Groesse hinzu
 * Registriert die hochgeladenen Header-Bilder als Header
 *
 * @author	Konstantin Obenland
 */
function own_register_default_headers(){
	add_image_size('header-small', 230, 48);

	$posts = get_posts(array(
		'post_type'		=>	'attachment',
		'meta_key'		=>	'_header_image',
		'numberposts'	=>	-1
	));

	$pics = array();
	foreach($posts as $post){
		$file_name	=	get_post_meta($post->ID, '_wp_attachment_metadata');
		$file_name	=	(count($file_name) == 1) ? 	$file_name[0] : $file_name;
		$pics[$file_name['file']]	=	array(
			'url'			=>	'%s/images/headers/' . $file_name['file'],
			'thumbnail_url'	=>	'%s/images/headers/' . $file_name['sizes']['header-small']['file'],
			'description'	=>	$file_name['file']
		);
	}
	register_default_headers($pics);
}
add_filter('admin_init', 'own_register_default_headers');

/**
 * Setzt den Post Metakey, um als Header identifiziert werden zu koennen
 *
 * @author	Konstantin Obenland
 *
 * @param	string	$image
 * @param	int		$id
 *
 * @return	string
 */
function own_wp_create_file_in_uploads($image, $id){
	update_post_meta($id, '_header_image', true);
	return $image;
}

/**
 * Entfernt die gesetzten Unterordner
 *
 * @author	Konstantin Obenland
 *
 * @param	array	$args
 *
 * @return	array
 */
function own_upload_dir($args){
	$args['path']	=	$args['basedir'];
	$args['url']	=	$args['baseurl'];
	$args['subdir']	=	'';

	return $args;
}

/**
 * Korrigiert den Zielpfad fuer den Headerupload
 *
 * @author	Konstantin Obenland
 *
 * @param	string	$value
 *
 * @return	string
 */
function own_option_upload_path($value){
	return 'wp-content/themes/'.get_option('template').'/images/headers';
}

/**
 * Fuegt die Actions und Filter nur hinzu, wenn sie auch gebraucht werden
 */
if(is_admin() && 'custom-header' == $_GET['page']){
	add_filter('wp_create_file_in_uploads', 'own_wp_create_file_in_uploads', 10, 2);
	add_action('wp_create_file_in_uploads', 'own_wp_create_file_in_uploads', 10, 2);

	add_filter('upload_dir', 'own_upload_dir');

	add_filter('option_upload_path', 'own_option_upload_path');
}

Diesen Code einfach in die functions.php Datei deines Themes oder in dein Funktionalitätsplugin einfügen und ggf. den Namespace-Präfix aendern. Schauen wir uns an wie das Script funktioniert:

Ändern der Uploadpfads

Das grundlegende Problem, dass umschifft werden muss ist, dass alle Header in einem Unterordner des Themes erwartet werden, alle Uploads aber woanders gespeichert werden. Also muss vor dem Hochladen der Uploadpfad geaendert werden (dies passiert in den Filtern ‚own_upload_dir‘ und ‚own_option_upload_path‘). Ich empfehle vor der Übernahme des Codes zu prüfen, ob ein Ordner mit der Bezeichnung headers im Themeordner ueberhaupt existiert und ihn gegebenfalls anlegen oder den Pfad ändern.

Kennzeichung der Bilder

Um die hochgeladenen Bilder später als Custom Header identifizieren zu können, wird dem Bild ein Metadata Eintrag hinzugefügt, nachdem später gesucht werden kann. So werden nicht alle Bilder angezeigt, sondern nur die, die auch als Custom Header verwendet werden können. Dies geschieht kurz nach Hinzufügen des Bildes, deshalb wird das generierte Thumbnail nach dem Hochladen noch nicht angezeigt.

Anzeigen der hochgeladenen Custom Headers

Ich hab den Aufruf der Funktion, die die Header aus der Datenbank holt und registriert, an die Stelle eingehängt, in der die Custom Header Admin Seite aufgebaut wird. Sie schaut nach Posts mit dem beim Hochladen gespeicherten Meatakey und holt sich fuer jedes Bild die zur Registrierung benötigten Informationen. Leider war ich noch nicht in der Lage das gerade hochgeladene Bild gleich in der Auswahl anzeigen lassen. Aus irgendeinem Grund sind da die Attachement-Metadaten noch nicht gesetzt worden. Das ist aber der einzige Schönheitsfehler.

Ich wünsche viel Spass beim Ausprobieren und freue mich über Verbesserungsvorschläge!

Ein Gedanke zu „Hochgeladene WordPress Kopfzeile speichern

Kommentare sind geschlossen.