WordPress 2.5 Edit-Bereich ansprechen

Seit Version 2.5 von WordPress hat sich nicht nur das Design geändert. Auch das Markup wurde erheblich geändert, so dass es die eine oder andere Veränderung im Editor-Bereich geben könnte, wenn man Plugins einsetzt, die dort Daten hinterlegen.

Hier ein kleiner Workaround, wie man den Editor-Bereich anspricht und im Stile des Design bleibt.

Der Filter ist gleich geblieben und somit bleibt der Aufruf der gleiche. Ab Version 2.5 ist dann lediglich das Auf/Zuklappen von Bereichen nicht mehr möglich, wenn man das Plugin nicht entsprechend ändert.

add_filter('dbx_post_advanced', 'example_function');

Alternativ kann man auch den Sidebar-Bereich ansprechen. Ab WordPress Version 2.5 ist der Sidebar-Bereich unterhalb des Advanced-Bereichs. Ich spreche ihn an, damit die zusätzlichen Bereiche im Anschluss an die Standard-Bereiche anknüpfen.


add_filter('dbx_post_sidebar', 'tc_post_admin_footer');

Für weitere Ansprechbereiche stehen die Hooks edit_form_advanced und submitpost_box zur Verfügung.
Dabei reiht sich edit_form_advanced direkt unter den Editor-Bereich, oberhalb der Advanced Options.
Der Hook submitpost_box bringt die neue Funktionalität in den Sidebar, direkt in den Save-Puplish-Bereich.

Nun war die Struktur des abgebildeten Bereiches immer folgender, ein komplexes Markup, welches in der Vergangenheit nicht immer auf Zustimmung gestoßen ist.
In den Bildern zeigt sich die Anpassung am Beispiel des Plugins Text Control, auf dass ich nie verzichten kann und das der Autor leider schon seit Version 2.1 von WordPress nicht mehr pflegt. Ich erstelle es mir seit dem selber. Eine Anfrage beim Autor hat leider kein Antwort erzielt.

WP 2.5 Wrapper


<div class="dbx-b-ox-wrapper">
	<fieldset id="example-id" class="dbx-box">
	<div class="dbx-h-andle-wrapper">
		<h3 class="dbx-handle">&lt;?php _e('Example Name', 'plugin_language-name') ?&gt;</h3>
	</div>
		<div class="dbx-c-ontent-wrapper">
			<div id="postcustomstuff" class="dbx-content">

				<p>! Hier Inhalt ablegen</p>

			</div>
		</div>
	</fieldset>
</div>

Ab Version 2.5 von WP sieht die wie folgt aus. Es hat eine Verschlankung statt gefunden und ebenso kann WordPress auch bei zusätzlichen Bereichen den Status speichern; hat der User den Bereich geöffnet oder geschlossen, was die Arbeitsweise doch erheblich erleichtern kann. Dies passiert durch die Übergabe der jeweiligen Klasse. Auch das übernimmt WP und lediglich der PHP-Code bei class genügt: <?php echo postbox_classes('pagepassworddiv', 'post'); ?>.

WP 2.5 Wrapper


<div id="example-div" class="postbox &lt;?php echo postbox_classes('pagepassworddiv', 'post'); ?&gt;">
	<h3>&lt;?php _e('Example Name', 'plugin_language-name'); ?&gt;</h3>
	<div class="inside">

		<p>! Hier Inhalt ablegen</p>

	</div>
</div>

Hook add_meta_box

Ganz neu in WordPress 2.5 ist der Hook add_meta_box. Damit wird die Erzeugung von zusätzlichen Boxen vereinfacht. Die obigen HTML-Elemente können entfallen und lediglich die Werte müssen übergeben werden.


function add_a_box() {

    add_meta_box(
        'example-div', // id des <div>
        'Example Name', // title
        'inside_the_box', // callback function die den Inhalt uebergibt
        'post' // wofuer ist die box: fuer "post", "page", oder "link" seite
    );
}

function inside_the_box() {
	echo "<p>! Hier Inhalt ablegen</p>";
}

// Aktivierung der Box, wenn im Backend
if ( is_admin() ) {
	add_action('admin_menu', 'add_a_box');
}

Unterscheide > WordPress 2.5

Mit einer einfachen Abfrage der Funktion ist die Trennug in unterschiedliche Design einfach möglich.


if ( function_exists('add_meta_box') ) {
	// > WP 2.5 style
} else {
	// < WP 2.3
}

Meta Boxen deaktivieren

Ab Version 2.6 von WordPress ist auch dies möglich. Dazu gibt es die Funktion remove_meta_box() und ist zu finden in /wp-includes/template.php.
Parameter sind $id, $page, $context.

  • $id String for use in the 'id' attribute of tags.
  • $page The type of edit page on which to show the box (post, page, link)
  • $context The context within the page where the boxes should show ('normal', 'advanced')

13 Comments

  1. super Information und Beschreibung - vielen Dank.
    Eine Frage: Ich möchte, dass meine Box nicht ganz unten angehängt wird, ich möchte sie ganz oben vor "Auszug" - "Trackbacks" usw. positionieren, ich brauche sie ständig, ich möchte nicht immer so weit runter scrollen. Geht das? Wie?

  2. @nepf » du könntest mal versuchen, bei add_action die Priorität hoch zusetzen, denn diese Funktion kann als dritten Wert eine Prio übernehmen. add_meta_box hat eine derartige Möglichkeit nicht. Alternativ könnte man die anderen Bereiche, wenn nie benötigt, ausblenden, dazu habe ich mal was geschrieben und ein Plugin erstellt.

Comments are closed.