Sidebar
ein-/ausblenden

WordPress Plugin für mehr Flexibilität beim Schreiben

Plugin für WordPress SEO

Anzeige

WP Adventskalender 24
Heute ist er nun da, der letzte Tag im Kalender und der letzte Tag, der mich zwingt, jeden Tag einen Beitrag zu veröffentlichen. Nicht selten habe ich über Nacht noch einen kleinen Beitrag geschrieben um die Leser am kommenden Morgen mit einem neuen Türchen zu beglücken. Nicht nur Kinder mögen die Überraschung am Morgen beim Öffnen eines neuen Türchens. Für mich ist nun erst mal Pause, andere Themen sind wichtiger und nur wenige werden vermutlich diesen Beitrag hier lesen; ist doch heute Weihnachten. Mir bleibt nur noch zu sagen:
Alles liebe und Gute, die herzlichsten Wünsche, ein friedliches Weihnachtsfest und einen guten Rutsch in das neue Jahr wünsche ich allen Lesern, allen Kunden, allen netten Kontakten und jedem, der irgendwie Mensch ist und mit mir zu tun hatte. Ich freue mich auf ein neues Jahr mit euch und harre der Dinge, die uns im neuen Jahr erreichen werden.

Es weihnachtet

Als kleines Präsent zum heiligen Abend heute habe ich euch ein Plugin erstellt, was euch zum einen zusätzliche Felder in den Bereich Schreiben von WordPress bringt, was euch zeigt, wie einfach man den Bereich erweitern kann und was nach belieben von euch genutzt werden darf.

Das Plugin bringt 3 neue Felder in einer Metabox mit:

  • Untertitel - wie der Name schon sagt, eine Zeile ohne Formatierung in der Ausgabe
  • Zusatzinformationen - ein vollwertiger Editor, ebenso kann man jede Art von Attachments hinzufügen, also fast gleich dem Content-Editor.
  • Listdaten - Hier wird ermöglicht, dass man pro Zeile einen Inhalt pflegt und jede Zeile als List-Element ausgeben wird, ungeordnete Liste ul

Screenshot im Edit-Bereich von WordPress

Jedes dieser Felder kann gezielt im Template des Themes eingesetzt werden, hat also einen Template Tag, der die Ausgabe steuert. Nur wenn es in diesem Feld Daten gibt, dann werden sie auch ausgegeben. Im folgenden ein Beispiel, der die drei neuen Felder ausgibt.


<div <?php post_class() ?> id="post-<?php the_ID(); ?>">

	<h2><?php the_title(); ?></h2>

	<h3><?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post->ID, 'heading'); ?></h3>

	<div class="entry">

		<?php the_content('<p class="serif">Read the rest of this entry &raquo;</p>'); ?>

		<?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post->ID, 'additional-info'); ?>

		<?php if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post->ID, 'listdata'); ?>

Screenshot im Frontend von WordPress

Das Plugin soll als Vorlage dienen, wer also mag, der passt es an und schafft eine Oberfläche, in der sich die Autoren wohl fühlen, keine Pflege der benutzerdefinierten Felder.

Das Plugin sorgt dafür, dass die Metaboxen "Benutzerdefinierte Felder" und "Trackbacks" nicht mehr da sind (remove_meta_box()); auch das als Beispiel für die Nutzung. Zu jedem der genutzten Code-Schnipsel im Plugin gibt es hier im Blog einen Beitrag und so sollte man damit klar kommen. Im folgenden der Code ohne Zusatzfiles und im Anschluss das Plugin als Download, inkl. readme, Sprachfiles für deutsche User und die nötigen Scripte.


<?php
/**
 * @package Different Type
 * @author Frank B&uuml;ltge
 * @version 0.1
 */

/*
	Plugin Name: Different Type
	Plugin URI: http://bueltge.de/
	Description: Add different types to posts
	Author: Frank B&uuml;ltge
	Version: 0.1
	License: GPL
	Author URI: http://bueltge.de/
	Last change: 24.12.2009 00:00:00
*/

/**
 * Example for use outside the loop:
 * <?php the_DifferentTypeFacts($post->ID); ?>
 * @param $id Integer - Post-ID
 * @param $type String - heading, additional-info, listdata (default is ''-empty)
 *
 * Example: <?php the_DifferentTypeFacts($post->ID, 'heading'); ?>
 */

//avoid direct calls to this file, because now WP core and framework has been used
if ( !function_exists('add_action') ) {
	header('Status: 403 Forbidden');
	header('HTTP/1.1 403 Forbidden');
	exit();
}

if ( function_exists('add_action') ) {
	//WordPress definitions
	if ( !defined('WP_CONTENT_URL') )
		define('WP_CONTENT_URL', get_option('siteurl') . '/wp-content');
	if ( !defined('WP_CONTENT_DIR') )
		define('WP_CONTENT_DIR', ABSPATH . 'wp-content');
	if ( !defined('WP_PLUGIN_URL') )
		define('WP_PLUGIN_URL', WP_CONTENT_URL.'/plugins');
	if ( !defined('WP_PLUGIN_DIR') )
		define('WP_PLUGIN_DIR', WP_CONTENT_DIR.'/plugins');
	if ( !defined('PLUGINDIR') )
		define( 'PLUGINDIR', 'wp-content/plugins' ); // Relative to ABSPATH.  For back compat.
	if ( !defined('WP_LANG_DIR') )
		define('WP_LANG_DIR', WP_CONTENT_DIR . '/languages');

	// plugin definitions
	define( 'FB_DT_BASENAME', plugin_basename(__FILE__) );
	define( 'FB_DT_BASEDIR', dirname( plugin_basename(__FILE__) ) );
	define( 'FB_DT_TEXTDOMAIN', 'different-types' );
}

if ( !class_exists( 'DifferentType' ) ) {
	class DifferentType {

		// constructor
		function DifferentType() {

			if (is_admin() ) {
				add_action( 'admin_init', array(&$this, 'on_admin_init') );
				add_action( 'wp_insert_post', array(&$this, 'on_wp_insert_post'), 10, 2 );
				add_action( 'init', array(&$this, 'textdomain') );
				register_uninstall_hook( __FILE__, array(&$this, 'uninstall') );
				add_action( "admin_print_scripts-post.php", array($this, 'enqueue_script') );
				add_action( "admin_print_scripts-post-new.php", array($this, 'enqueue_script') );
				add_action( "admin_print_scripts-page.php", array($this, 'enqueue_script') );
				add_action( "admin_print_scripts-page-new.php", array($this, 'enqueue_script') );
			}
		}

		// active for multilanguage
		function textdomain() {

			if ( function_exists('load_plugin_textdomain') )
				load_plugin_textdomain( FB_DT_TEXTDOMAIN, false, dirname( FB_DT_BASENAME ) . '/languages' );
		}

		// unsintall all postmetadata
		function uninstall() {

			$all_posts = get_posts('numberposts=0&post_type=post&post_status=');

			foreach( $all_posts as $postinfo) {

				delete_post_meta($postinfo->ID, '_different-types');

			}
		}

		// add script
		function enqueue_script() {
			wp_enqueue_script( 'tinymce4dt', WP_PLUGIN_URL . '/' . FB_DT_BASEDIR . '/js/script.js', array('jquery') );
		}

		// admin init
		function on_admin_init() {

			if ( !current_user_can( 'publish_posts' ) )
				return;

			add_meta_box( 'different_types',
									__( 'Different Types', FB_DT_TEXTDOMAIN ),
									array( &$this, 'meta_box' ),
									'post', 'normal', 'high'
									);

			// remove meta box for trackbacks
			remove_meta_box('trackbacksdiv', 'post', 'normal');
			// remove meta box for custom fields
			remove_meta_box('postcustom', 'post', 'normal');
		}

		// check for preview
		function is_page_preview() {
			$id = (int)$_GET['preview_id'];
			if ($id == 0) $id = (int)$_GET['post_id'];
			$preview = $_GET['preview'];
			if ($id > 0 && $preview == 'true') {
				global $wpdb;
				$type = $wpdb->get_results("SELECT post_type FROM $wpdb->posts WHERE ID=$id");
				if ( count($type) && ($type[0]->post_type == 'page') && current_user_can('edit_page') )
					return true;
			}
			return false;
		}

		// after save post, save meta data for plugin
		function on_wp_insert_post($id) {
			global $id;

			if ( !isset($id) )
				$id = (int)$_REQUEST['post_ID'];
			if ( $this->is_page_preview() && !isset($id) )
				$id = (int)$_GET['preview_id'];

			if ( !current_user_can('edit_post') )
				return;

			if ( isset($_POST['dt-heading']) && $_POST['dt-heading'] != '' )
				$this->data['heading'] = esc_attr( $_POST['dt-heading'] );
			if ( isset($_POST['dt-additional-info']) && $_POST['dt-additional-info'] != '' )
				$this->data['additional-info'] = $_POST['dt-additional-info'];
			if ( isset($_POST['dt-listdata']) && $_POST['dt-listdata'] != '' )
				$this->data['listdata'] = esc_attr( $_POST['dt-listdata'] );

			if ( isset($this->data) && $this->data != '' )
				update_post_meta($id, '_different-types', $this->data);
		}

		// load post_meta_data
		function load_post_meta($id) {

			return get_post_meta($id, '_different-types', true);
		}

		// meta box on post/page
		function meta_box($data) {

			$value = $this->load_post_meta($data->ID);
			?>
			<table id="dt-page-definition" width="100%" cellspacing="5px">
				<tr valign="top">
					<td style="width:20%;"><label for="dt-heading"><?php _e( 'Subtitle:', FB_DT_TEXTDOMAIN ); ?></label></td>
					<td><input type="text" id="dt-heading" name="dt-heading" class="heading form-input-tip" size="16" autocomplete="off" value="<?php echo $value['heading']; ?>" tabindex="6" style="width:99.5%"/></td>
				</tr>
				<tr valign="top">
					<td><label for="dt-additional-info"><?php _e( 'Additional information:', FB_DT_TEXTDOMAIN ); ?></label></td>
					<td><textarea cols="16" rows="5" id="dt-additional-info" name="dt-additional-info" class="additional-info form-input-tip code" size="20" autocomplete="off" tabindex="6" style="width:90%"/><?php echo wpautop( $value['additional-info'] ); ?></textarea>
						<table id="post-status-info" cellspacing="0" style="line-height: 24px;">
							<tbody>
								<tr>
									<td>&nbsp;</td>
									<td>&nbsp;</td>
								</tr>
							</tbody>
						</table>
					</td>
				</tr>
				<tr valign="top">
					<td><label for="dt-listdata"><?php _e( 'Listdata:', FB_DT_TEXTDOMAIN ); ?></label></td>
					<td><textarea cols="16" rows="10" id="dt-listdata" name="dt-listdata" class="listdata form-input-tip" size="20" autocomplete="off" tabindex="6" style="width:99.5%"/><?php echo $value['listdata']; ?></textarea><br /><small><?php _e( 'One list per line', FB_DT_TEXTDOMAIN ) ?></small></td>
				</tr>
			</table>
			<?php
		}

		// return facts incl. markup
		function get_DifferentTypeFacts($id, $type, $value) {

			if (!$value)
				return false;
			if ( $type == '' )
				return false;

			if ( 'heading' == $type && '' != $value['heading'] )
				return $value['heading'];
			if ( 'additional-info' == $type && '' != $value['additional-info'] )
				return wpautop( wptexturize($value['additional-info']) );
			if ( 'listdata' == $type && '' != $value['listdata'] ) {
				$return = '';
				$listdatas = preg_split("/\r\n/", $value['listdata'] );

				foreach ( (array) $listdatas as $key => $listdata ) {

					$return .= '<li>' . trim($listdata) . '</li>';

				}
				return '<ul>' . $return . '</ul>'. "\n";
			}
		}

		// echo facts, if exists
		function DifferentTypeFacts($id, $type, $string) {

			if ( $id ) {
				$value = $this->load_post_meta($id);

				echo $this->get_DifferentTypeFacts($id, $type, $value);
			}
		}

	} // End class

	// instance class
	$DifferentType = new DifferentType();

	// use in template
	function the_DifferentTypeFacts($id, $type = '', $string = '') {
		global $DifferentType;

		$DifferentType->DifferentTypeFacts($id, $type, $string);
	}

} // End if class exists statement
?>

Download als zip-Datei: github.com/bueltge/different-type/zipball/master - 40 kByte
Das Plugin liegt in einer gepflegten Version bei github.com und kann dort besichtigt, geforkt und gezogen werden.

Ich wünsche viel Spass damit und vielleicht wird das einen oder andere Projekt mit WordPress damit in diesem Bereich ein wenig klarer und logischer für die Autoren.

59 Kommentare zu „WordPress Plugin für mehr Flexibilität beim Schreiben“

  1. 1
    Kommentar von Uwe König

    Hallo Frank,

    ich wünsche Dir auch Frohe Weihnachten und ein glückliches Neues Jahr !

    glg
    Uwe

  2. 2
    Kommentar von Uwe

    Frohe und besinnliche Festtage! :)

  3. 3
    Kommentar von Rudi

    Frohes und besinnliches Weihnachtsfest und viel, viel Gesundheit!

    Liebe Grüße

  4. 4
    Kommentar von Olaf

    Hallo Frank,
    das ist das absolute Highlight deiner Advents-Posts!!! Das wird mir bestimmt oft helfen. Vielen Dank für all deine Mühen.

    So, nu weiter mit Weihnachtsbaumschmücken...

  5. 5
    Kommentar von Markus

    Danke Frank für deine guten Beiträge in diesem Jahr, danke dass du diesen Blog betreibst und danke das du diesen Monat so fleißig warst. Ich habe mich über jedes einzelne Türchen gefreut. Mach dir ein schönes Fest und Rutsch gut ins neue Jahrzehnt.

  6. 6
    Kommentar von Markus

    Frohe Weihnachten und besinnliche Tage wünsch ich Dir. Nettes Plugin und werd ich mir auch mal genauer anschauen, da ich ziemlicj viel mit benutzerdefinierten Feldern arbeite könte das was für mich sein.

  7. 7
    Kommentar von Bernd

    Vielen Dank für die tollen Tipps, Codeschnippsel und Plugins und ein Schönes Weihnachtsfest!

  8. 8
    Kommentar von Agy

    Oh nettes Plugin, dankeschön.

    Dir und allen Lesern ein besinnliches Fest!

  9. 9
    Kommentar von bibliothek

    bei uns in frankfurt taut es. ich wünsche ein schönes weihnachtsfest und ein gutes neues jahr.

  10. 10
    Kommentar von Ralf

    24 mal Danke für diesen etwas anderen Adventskalender.

  11. 11
    Kommentar von Oliver Schlöbe

    Dir ein besinnliches Weihnachten, Frank, und danke für dein geteiltes Wissen das ganze Jahr über! :)

    Gruß Oli

  12. 12
    Kommentar von Dieter

    Lieber Frank,
    Dir und Deinen Angehörigen ein fröhliches Weihnachtsfest.
    Vielen Dank für Deinen vielen guten Tipps und Plugins.
    Beste Grüße
    Dieter

  13. 13
    Kommentar von Florian

    Hallo Frank,

    auch Dir wünsche ich ein besinnliches, friedvolles und erholsames Weihnachtsfest im Kreise Deiner Liebsten :)

    Liebe Grüße, Florian

  14. 14
    Kommentar von Nicki

    Das ist wirklich eine ganz große 24 - toll. Auch danke für das schöne Jahr voller wertvoller Anregungen. Ich habe in diesem Jahr wohl den größten Sprung in Sachen WP nach vorn gemacht. Gib mir noch 10 weitere Jahre und ich hole dich ein ;) . Viel Freude und Ruhe und Gemütlichkeit und Schnee und .... na du weißt schon :D .

  15. 15
    Kommentar von Heinrich

    Danke für Deine Arbeit, Ideen und Anregungen. Heinrich

  16. 16
    Kommentar von Caspar

    Hallo Frank, vielen Dank! Das reimt sich nicht nur, sondern kommt auch noch von Herzen… ;)
    Mit diesem Plugin lieferst Du mir die mindestens 134,5ste Inspiration und Lernvorlage (danke, danke, danke!) in diesem nun scheidenden Jahr. Möge es für Dich und Deine Lieben schön zu Ende gehen!
    Herzliche Grüße,
    Caspar

  17. 17
    Kommentar von ärdbaer

    Hallo!
    Ich glaube, das ist genau das, was ich gesucht habe.
    Werde es mir mal anschauen, vielen Dank schonmal!

  18. 18
    Kommentar von Ramona

    Vielen Dank für das Plugin, das ich noch nicht ausprobiert habe. Weil: Das Twitter-Plugin nutzt benutzerdef. Felder. Wenn die nun durch dein Plugin weg sind, wird Twitter keine Posts mehr aus dem Blog versenden?

  19. 19
    Kommentar von Frank Bültge

    @Ramona: dann die Zeile auskommentieren: remove_meta_box('postcustom', 'post', 'normal');

  20. 20
    Kommentar von Basti

    Hi,

    vielen vielen Dank dafür. Nachträglich wünsch ich schöne Weihnachten und hoffe, dass dir die Bücher gefallen!!

    viele Grüße

    Basti

  21. 21
    Kommentar von Benny

    Auch dir wünsche ich einen guten Rutsch ins neue Jahr. Vielen Dank für die Mail von dir. Also nicht zu doll feiern ;)

    Lg Benjamin

  22. 22
    Kommentar von ebook

    ich wünsche ein schönes und friedliches neue jahr und vielen dank für die tolle arbeit die du für wordpress leistest. mögest du weiter so produktiv im neuen jahr sein und nicht den spass an deinem tun verlieren.

  23. 23
    Kommentar von Feuerspucker

    Auch vom Feuerspucker Rick ein frohes neues Jahr 2010. Vielen Dank für die vielen tollen Infos die man hier lesen kann. Freue mich schon auf die neuen Beiträge im neuen Jahr 2010!

  24. 24
    Kommentar von Mark aus Hamburg

    Könnte genau das sein, was ich schon länger gesucht habe. Dank Dir.

    Und FROHES NEUES JAHR!

  25. 25
    Kommentar von datenkind

    UM HIMMELS WILLEN, FRANK! Das ist der Stein der Weisen, den ich brauche! Dafür gibt’s was von deiner Wunschliste!

  26. 26
    Kommentar von Luigi

    Wie immer bin ich mal wieder viel zu spät. So bleibt mir nur dir ein gutes neues Jahr zu wünschen! Ohne dich und deine fantastische Arbeit gäbe es meinen Blog sehr wahrscheinlich nicht mehr. Oft fand ich Hilfe bei dir wenn ich nicht mehr weiter wusste, was verdammt oft vorkommt.

    Das mit dem subtitle hört sich interessant an. Werde versuchen dies für meinen Blog zu nutzen.

    Noch mal alles gute für die Zukunft!

  27. 27
    Kommentar von Anja

    Vielen Dank für die Informationen

    Frohes Neues Jahr!

  28. 28
    Kommentar von Dirk

    Danke für die Info. Bin erst jetzt auf Ihre Seite gestossen und finde Ihre Beiträge und das Fachwissen wirklich sehr gut.

    Werde Ihre Seite auf jeden Fall weiter empfehlen.

  29. 29
    Kommentar von Fritz

    Frohes neues Jahr und danke für Code und Plugin Download! Sehr praktisch, grad weil ich gern mehr mit benutzerdefinierten Feldern arbeiten möchte.

  30. 30
    Kommentar von Martin

    Ich fände es ja lustig, wenn WordPress etwas für Dragon naturally speaking machen könnte. Wobei das Programm ja auch so schon alles kann. Aber eine Analyse der wichtigsten Worte im Blog, die man dem Programm so beibringen kann.

  31. 31
    Kommentar von udo-heinz bernhard

    auch von mir alles gute in 2010.

  32. 32
    Kommentar von Andreas B.

    Ich habe selber einmal die Felder genutzt, um zum Beispiel Bild individuell auf die Startseite zu setzen, aber leider ist es am Quelltext gescheitert. Mittlerweile nutze ich nur noch wenige Plugins, um WordPress nicht unnötig zu verlangsamen.

  33. 33
    Kommentar von Christian Schuster • cinoa

    Frank, Dein Text oben endet mit: [...] Ich freue mich auf ein neues Jahr mit euch und hadere der Dinge, die uns im neuen Jahr erreichen werden.[...]

    Du meinst wahrscheinlich 'harre' - oder? ... ein wundervoller freud'scher Verschreiber ?! - hoffe nicht.

    Anyway - Danke auch von mir als newcomer - Du bist ein wahre Fundgrube, Frank.
    Alle Gute für das was kommt ...

  34. 34
    Kommentar von Frank Bültge

    @Christina: Danke für Hinweis und Wünsche.

  35. 35
    Kommentar von Sven

    Hallo Frank und DANKE für das Plugin ;) habe es mir leicht angepasst und nun scheitere ich daran das der Inhalt der Felder leider nicht mit im RSS Feed ausgegeben wird, habe mich schon dusselig gelesen was Feed Output angeht aber irgendwie fehlt mir der Stein des Anstoßes auf den richtigen Lösungsweg zu kommen.
    WP gibt ja leider immer nur den reinen Content per RSS aus.

    Gruß Sven

  36. 36
    Kommentar von Frank Bültge

    @Sven: Du musst den content mit deinen Angaben ergänzen, dann ist er auch im Feed; hier mal ein Beitrag mit einem Beispiel, dort werden eben nur die Custom Fields ergänzt, wenn es sich um den Feed handelt.

  37. 37
    Kommentar von Sven

    Vielen Dank für die Antwort und den Link. Und ich hab mir schon ein Wolf gesucht in den ganzen Dateien für den Feed Output und einiges probiert was aber nicht zufriedenstellend war. Da ich auch dein CopyFeed Plugin testweise einsetze gestaltet sich das schwieriger als ich dacht da sich das CopyFeed Plugin irgendwie "vordrängelt" mit seinem Output und dann erst meine Daten aus den Benutzerdefinierten Felder ausgegeben wird. Als nicht "PHP'ler" mit geringen Kentnissen muss ich zwar viel nachschlagen aber komme trotzdem meist zu gewünschten Erfolg dank Informationsquellen wie deinem Blog.

  38. 38
    Kommentar von Frank Bültge

    @Sven: ©Feed macht nix anderes, es ergänzt einfach nur den content mit Hilfe des Filters add_filter('the_content', 'mein_neuer_inhalt'); daher sollte das gehen. Eventuell kannst du ja noch einen Wert 9 mitgeben, da das Plugin den Standard nutzt, also 10. Damit sollte dein Hook in den Filter wie folgt aussehen: add_filter('the_content', 'deine_zusatzinhalt_und_content', 9)

  39. 39
    Kommentar von Sven

    Vielen Dank für die schnelle Antwort Frank, ich werde mich wenn ich wieder etwas Zeit hab darüber hermachen. Es ist leider immer etwas ärgerlich das man für den vollen Content-Output via Feed zu solchen Lösungswegen greifen muss und WordPress nicht von Haus aus gleich den vollen Output anbietet.

  40. 40
    Kommentar von Frank Bültge

    @Sven: WordPress zieht ja den vollen content, du erweiterst den ja nur, aber auf Ebene Frontend. Eventuell kanst ja via Filter und Action-Hook viel einfacher ergänzen.

  41. 41
    Kommentar von think123

    Kann ich das Plugin auch i-wie beim erstellen von neuen Seiten benutzen?

    Gruß
    think123

  42. 42
    Kommentar von Frank Bültge

    @think123: dazu muss es ein wenig erweitert werden, denn aktuell werden die Metaboxen nur bei posts eingehakt, nicht bei pages. Sollte aber schnell gehen; dazu gibt es hier sicher den Code in einem der Beiträge.

  43. 43
    Kommentar von Ralf

    Super plugin. Ich bin leider kein Programmierer und kann deshalb nur schwer Anpassungen machen.

    Wie kann ich denn im Template eine Anweisung einbauen, die einen alternativen Text ausgibt wenn für die custom fields beim aktuellen post kein Wert eingetragen ist?

    Beispiel:
    Grundsätzlich will ich die 'additional info' ausgeben. Das funktioniert auch mit dem Code aus der single.php hervorragend.

    Aber wenn im Post für dieses Feld kein Wert steht, soll stattdessen the_excerpt angezeigt werden.

    Wäre klasse, wenn du dafür ein Codeschnipselchen hättest.

  44. 44
    Kommentar von Frank Bültge

    @Ralf:
    folgender Code im Plugin:

    if ( 'additional-info' == $type && '' != $value['additional-info'] )
    return wpautop( wptexturize($value['additional-info']) );

    wird zu:

    if ( 'additional-info' == $type && '' != $value['additional-info'] ) {
    if ( isset($value['additional-info']) && '' != $value['additional-info'] )
    return wpautop( wptexturize($value['additional-info']) );
    else
    return get_the_excerpt();
    }

    Teste mal, habe es nicht getestet nur hier schnell geschrieben.

  45. 45
    Kommentar von Ralf

    Hi Frank, danke für den Code.

    Habs gerade getestet. Im Ergebnis keine Veränderung zum vorherigen Code.

    Wie gehabt wird die vorhandene additional-info ausgegeben. Wenn keine vorhanden, wird nichts ausgegeben.

    Es gelingt mir übrigens nicht, eine mal eingetragene additional-info zu löschen. Wenn ich den Feldinhalt lösche und den Post speichere, wird wieder der vorherige Inhalt angezeigt. Ich kann eine vorhandene Info nur mit neuem Content überschreiben.

  46. 46
    Kommentar von Frank Bültge

    @Ralf: könnte ich dort wo du es einsetzt, einen Zugang als Admin haben und Schreibrechte auf die Dateien bekommen, dann kann ich mal debuggen und eine Lösung erstellen?

  47. 47
    Kommentar von Ralf

    Berne. Ich hab's im Moment nur lokal getestet, kann aber am WE was online stellen. Wie kann ich dir die Zugangsdaten schicken?

  48. 48
    Kommentar von Frank Bültge

    @Ralf: mail, siehe Impressum

  49. 49
    Kommentar von Aro

    Moin Frank,
    ein Jahr später auch von mir vielen Dank und gute Wünsche für's neue Jahr!

    Ich habe eine Frage zum Plugin, das ich schon seit einigen Monaten erfolgreich einsetze.
    Bisher habe ich in der index.php nur diese Zeile stehen:
    ID, 'heading'); ?>

    Jetzt brauche ich aber zwei weitere "Verschiedene Felder" für eigene Keyword und Beschreibung. Die "Benutzerdefinierten Felder" möchte ich dafür nicht nutzen.
    Also hab ich das Plug in mit neuem Namen installiert, und überall different-types durch different-types-keywords ersetzt. Aber im Backend erscheint kein neues entsprechendes Feld.
    Schätze, ich mache irgendwo einen grundsätzlichen Fehler. Aber wo?
    Vielleicht kannst und willst Du mir einen Hinweis geben...?
    Tschüss, alles Gute
    Aro

  50. 50
    Kommentar von Aro

    Die abgeschnittene PHP-Zeile ist:
    if ( function_exists('the_DifferentTypeFacts') ) the_DifferentTypeFacts($post->ID, 'heading');

  51. 51
    Kommentar von Frank Bültge

    @Aro: du brauchst kein weiteres Plugin, du kannst einfach neue Felder anlegen. Auf Github.com habe ich das Plugin auch gerade angepasst, so dass der letzte Stand dort zu finden ist.

  52. 52
    Kommentar von Aro

    Hallo Frank,
    danke für die Antwort, aber...
    Eigentlich wollte ich nur ein Plugin, das ich als eigenes Feld, ruhig einzeilig, mit einem Inhalt versehen kann. Das hat mit der Version 0.1 geklappt, ich hatte nur die obige Zeile in die Index eingefügt.
    Davor und dahinter etwass Code, so dass ich für die VG Wort jeweils eine individuelle Zeile eingeben konnte.

    Das gleiche wollte ich nun eigentlich für die Keywords und Description machen, aber die Beschreibung sagt mir nicht wirklich, ob und wie das funktioniert. Vielleicht geht es ja auch gar nicht, dass ich im Backend drei Felder "Verschiedene Typen" parallel haben und im Artikel ausgeben kann.
    Oder was muss man noch tun, außer den im Kommentar 50 angegebenen Code in die Index zu schreiben?

  53. 53
    Kommentar von Frank Bültge

    @Aro: das Plugin hat im Beispiel ja 3 Felder, die sind als Beispiel drin. Genauso kann man jedes andere Feld einbauen. Wenn ich dich richtig verstehe, dann brauchst du das 3 eigene Felder, ohne Editor und alles als textarea, oder? Ansonsten sende mir mal eine Mail mit genauen Anforderungen und ich schaue mal, was es kosten würde; wenn es nur Anpassungen sind, dann ist das ja wesentlich weniger Aufwand als ein neues Plugin für dich.

  54. 54
    Kommentar von Bernhard

    Hallo Frank,

    auch wenn ich mich schon öfter auf Deinen Seiten herumgetrieben habe, bin ich leider erst jetzt auf dieses Plugin gestoßen.
    Damit ist ja alles mögliche machbar, wovon man bisher nur träumen konnte, wie z.B. mehrspaltige Layouts usw.!

    Da die Frage von think123 wahrscheinlich noch mehr Leute interessiert und die Antwort bisher nicht in den Kommentaren steht, geb ich sie mal...

    In der PHP-Datei folgenden Abschnitt suchen:

    add_meta_box( 'different_types',
    __( 'Different Types', FB_DT_TEXTDOMAIN ),
    array( &$this, 'meta_box' ),
    'post', 'normal', 'high'
    );

    kopieren und unmittelbar darunter einfügen, dann 'post' durch 'page' ersetzen.
    Schon funktioniert das auch auf Seiten.

    So, jetzt muss ich aber erstmal noch ein bisschen mit dem Plugin spielen...;-)

    Hast Du eventuell noch einen Tipp, wie ich den TinyMCE-Editor anpassen kann?
    Da fehlt mir die Möglichkeit, auf HTML umzuschalten und 'Bild einfügen'.

  55. 55
    Kommentar von Ramona

    @ Bernhard Wenn fertig, würde ich gerne mal ein Beispiel sehen, danke.

  56. 56
    Kommentar von Bernhard

    Hallo Ramona,

    erstmal der Zwischenstand:
    auf die Euphorie ist die Ernüchterung gefolgt, dass es mir nicht gelungen ist, die Funktion zum Wechseln zwischen Standard-Editor und TinyMCE einzubauen.
    Außerdem hätte es mir für ein aktuelles Projekt sehr gut gefallen, den Editor mit den Listen zu verbinden - auch da habe ich es nur geschafft, Fehlermeldungen zu produzieren...
    (was ich aktuell brauche, habe ich im WordPress-Forum beschrieben...)

    "Bild hochladen / einfügen" ist kein Problem, da das mit der Schaltfläche über dem Standard-Editor funktioniert, wenn man vorher in den TinyMCE von Different-Types geklickt hat.

    Ob ich die Website vorzeige, an der ich gerade sitze, weiß ich noch nicht, da der Kunde Wünsche hat, die ich ihm bisher nicht ausreden kann (wenn die Navigation als Laufschrift über den Bildschirm flackern soll, dann fühle ich mich ins vergangene Jahrtausend zurückversetzt...).

    Aber ich habe aktuell auch noch andere Sites, bei denen dieses Plugin durchaus wertvoll sein könnte. Die werde ich gerne verlinken, sofern Frank damit einverstanden ist.
    (vielleicht komme ich ja auch irgendwann endlich mal dazu, meine eigene Site komplett zu erneuern, was wohl schon seit geraumer Zeit dringend geboten wäre... - auch da wird dieses Plugin mit großer Wahrscheinlichkeit zum Einsatz kommen)

    Abschließend noch ein Beispiel, wo mir dieses Plugin sehr gut gefallen hätte:
    http://www.arra-neckaralb.de/ - da ist die rechte Spalte noch umständlich mittels Widgets realisiert...

  57. 57
    Kommentar von Frank Bültge

    @Bernhard: das Hochladen von Bildern spricht immer den Editor an, der aktiv ist - ist also korrekt so. HTML/Visuell umschalten geht ebenso, dazu muss aber das JS erweitert werden. Um den Editor mit Listen zu verbinden, musst du eine Vorgabe treffen, am besten vermutlich pro Listpunkte eine Box oder eben pro Zeile wie im Beispiel. Das Plugin ist ja wirklich nur ein Bsp. wie man erweitert, ansprechen kann man alles - page/post/custom_post_type - und damit ist dies auf alle bereiche in WP anzuwenden, die irgendwie mit Meta Boxen arbeiten.
    Verlinken - immer gern, diese Armut ist ja schon traurig genug und die letzten paar Links im Web sind erwünscht.

  58. 58
    Kommentar von Bernhard

    Hallo Frank,

    ich hatte mich nur wenige Minuten damit beschäftigt, den TinyMCE mit den Listen zu verbinden. Da ich zu dem Zeitpunkt noch nicht raus hatte, dass das "Bild hochladen / einfügen" funktioniert, hatte ich das Bild von Hand hinein kopiert, bzw. die entsprechende HTML-Zeile. Das kann natürlich nicht klappen, da der TinyMCE die Sonderzeichen umwandelt. Da ich immer nur den HTML-Editor nutze, hatte ich da nicht dran gedacht...

    Um die Erweiterung des JS zum Umschalten zwischen HTML und Visuell werde ich mich kümmern, sobald ich etwas Luft habe. Das ist aber wohl eher mir wichtig, als meinen Kunden...

    Da es bei den aktuell anstehenden Projekten ausschließlich darum geht, Bilder außerhalb des eigentlichen Content-Bereichs einzufügen und es problemlos möglich ist, nicht benötigte Klassen etc. zu entfernen, die WordPress automatisch schreibt, passt es so wie es ist.
    Aber ich werde mich auf jeden Fall weiter damit beschäftigen, wenn die Auftragslage das zulässt, da ich denke, dass es da noch unheimlich viele Möglichkeiten gibt, dieses Plugin sinnvoll einzusetzen...

    Aber gleich noch eine Frage: gibt es eine Möglichkeit, dass die zusätzlichen Felder im Backend nur angezeigt werden, wenn ein bestimmtes Template ausgewählt wurde?

    Verlinken: ich frag lieber, bevor ich es tue, da m.E. die Kommentare in Blogs viel zu oft missbraucht werden, um mal schnell Backlinks aufzubauen...

  59. 59
    Kommentar von Frank Bültge

    @Bernhard: die bsphafte Lösung hier ist natürlich in Unmengen erweiterbar, was wir fast täglich tun. Links sind erwünscht, wenn sie Mehrwert bieten und nicht nur dem Linkaufbau. Wenn du die Templates an Seiten meinst, dann kenne ich dazu keine Lösung. Du müsstest ja beim Auswählen via Ajax die Boxen de/aktivieren um das zu realisieren.

Kommentar schreiben

Kommentarregeln: Bleib cool, kritisch ist in Ordnung, aber wenn du unhöflich bist, dann lösche ich deinen Kommentar. Bitte benutze deinen persönlichen Namen oder Initialen und nicht den Namen eines Unternehmens, dies würde als Spam gewertet und wird gelöscht. Der Zusammenhang zwischen Namen und URL sollte nicht offensichtlich auf Spam hindeuten! ♥ Ansonsten, vielen Dank für den Kommentar und viel Spaß mit meinem Blog.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Kommentar-Hilfe

händischer Spam:
Beachte die Kommentarregeln, jede Form von versuchtem Spam wird gelöscht. Warum und wieso steht in einem meiner Beiträge.

Bezug auf Textstellen:
Du kannst direkt bezug auf Textstellen im Beitrag nehmen. Dazu muss lediglich der Bereich im Artikel markiert werden; daraufhin erscheint ein Button, der den markierten Text in das Kommentarfeld übernimmt und als Zitat auszeichnet. Die Funktion ist nur bei aktivem JavaScript nutzbar.

xHTML:
Du kannst folgende Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <blockquote cite=""> <code> <pre> <em> <strong> <strike> <ul> <ul> <li>

Achte darauf, wenn du Code im Kommentar hinterlegen willst, dann muss der Code maskiert sein. Dann wird er nicht interpretiert. Der Code muss mit Hilfe von HTML-Entities dargestellt werden, d.h. dass man z.B. < als &lt; und > als &gt; einfügt.

E-Mail-Benachrichtigung bei neuen Kommentaren ?
Wenn der Haken in der Checkbox gesetzt ist, dann wirst du über neue Kommentare vie E-Mail informiert. Der Versand erfolgt nur, wenn du die URL in der Bestätigungs-E-Mail genutzt hast oder schon Abonnent hier im Blog bist.

Kommentar erscheint nicht:
Alle Kommentare werden manuell geprüft, freigegeben und nach Möglichkeit beantwortet. Bitte um etwas Geduld und Nachsicht.

Identifikationsbilder (Avatare):
Auf Gravatar.com kann man sich mit seiner E-Mail-Adresse registrieren und ein Bild hochladen, dann erscheint dieses Gravatar hier und in vielen weiteren Blogs.

Spamschutz:
Das Kommentarformular ist mit einem Spamschutz ausgerüstet. Solltest du diesen Artikel ohne JavaScript besuchen und kommentieren wollen, so muss du die Frage beantworten und das jeweilige Wort in das Textfeld eingeben.