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.

<div class="dbx-b-ox-wrapper">
<fieldset id="example-id" class="dbx-box">
<div class="dbx-h-andle-wrapper">
<h3 class="dbx-handle"><?php _e('Example Name', 'plugin_language-name') ?></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'); ?>.

<div id="example-div" class="postbox <?php echo postbox_classes('pagepassworddiv', 'post'); ?>">
<h3><?php _e('Example Name', 'plugin_language-name'); ?></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')
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?
@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.
danke für den Tipp - leider bleibt das ohne Wirkung.
Hallo Herr Bueltge,
zum Download geben würde... - Wäre das möglich?
vielen Dank für diese feine Anleitung, aber schön wäre es, wenn es die angepassten Dateien des "Text Control" Plugins (oder gleich das ganze Plugin
Danke & Grüße!
...ich antworte mir mal schnell selber... *sry*
Gerade habe ich (da ich durch 'obige' Lösung nicht ganz durchgestiegen bin) die Datei http://ckon.files.wordpress.com/2008/02/text-control.txt gefunden und installiert. - Alles supi, Text Control funktioniert wieder!
Danke & Grüße!
@sokai: Download Text Control (zip 5 kByte, works in 1.5 - 2.6)
@Frank:
Danke für die schnelle Reaktion!
Habe ich jetzt runtergeladen, aber festgestellt, dass die Einstellungs-"Box" nicht beim bearbeiten von Seiten angezeigt wird.
Außerdem wollte ich fragen, ob ich mit meiner Meinung richtig liege, dass es sich bei der zip-Datei nicht um das komplette Plugin handelt, sondern, dass es nur die von dir veränderten Dateien beinhaltet (und somit die text-control.php überschrieben werden muss).
Vielen Dank nochmal & Grüße!
@sokai: Es handelt sich um das komplette Plugin, allerdings fehlen die zusatzfilter, denn die sind optional und weiterhin im SVN zu finden. Ich habe Kontakt mit dem Autor und wir wollten die neue Version auch dort ablegen, leider hat er das Passwort nicht mehr und ich darf als fremder Autor nicht in sein SVN schreiben, somit haben wir bisher nicht wirklich eine Lösung.
Text Control wirkt nicht auf Seiten, was auch seine Begründung hat. Wenn man das einbaut, was einfach ist, dann ändert sich sehr viel in den Abhängigkeiten.
@Frank: Danke ersteinmal für den ganzen Aufwand und die Erklärungen!
Jedoch bleibt noch eine Frage:
Meine oben gepostete Plugin-Datei funktioniert auch bei Seiten... - Da ich auf einer Impressums-Seite puren HTML-Code benötige, ist es also unabdingbar, dass dies das Plugin auch auf statischen Seiten kann.
Wie stelle ich dies mit "deinem" Plugin an? - Soll ich dafür ein Template benutzen, welches alle automatischen Formatierungen übergeht? Oder wie hast du das mit "Text Control wirkt nicht auf Seiten, was auch seine Begründung hat" gemeint?
Grüße, nochmal Dank & *thumbsup* für die Koop mit dem Plugin-Autor!
sofar || sokai
@sokai: Wenn TextControl auch auf Seiten laufen soll, dann füge im Plugin ein (Zeile 230
):
add_filter('edit_page', 'tc_post_edit_post');Danke Frank!
Leider funktioniert das Hinzufügen des Filters nicht so, wie du es geschrieben hast, für die TextContol-MetaBox beim Editieren von Seiten.
Als Lösung habe ich bei der Funktion "tc_add_custom_box()" folgende weitere MetaBox hinzugefügt (Zeile 208):
add_meta_box('textcontroldiv',
__('Text Control', 'textcontrol'),
'tc_inside_the_textcontrol_box',
'page',
'advanced'
);
Grüße,
der sokai
@sokai: Sorry, hatte ich vergessen. Den Filter benötigst du trotzdem, weil sonst die Einstellungen des Plugins nicht für Page gezogen werden. Die Box muss natürlich rein.
Ich habe noch eine Version, die auch Page berücksichtigt, weis nur nicht, ob ich die noch finde, wenn ja - dann melde ich mich.