Neulich hatte ich das Problem, dass ich für eine WordPress Installation basierend auf WordPress 3.4.2 mit einem Twenty Ten Child-Theme für eine Seite einen anderen Footer brauchte, und zwar genauso einen wie den Standard Footer, also mit allen vier Widget Bereichen. Das Ganze ist eigentlich recht simpel, da ich aber im Netz nichts Brauchbares gefunden habe, dachte ich, ich schreib es kurz auf, vielleicht hilft es ja dem einen oder anderen.
SO GEHT’S:
Wir brauchen 3 Dateien aus dem Verzeichnis des “Eltern” Themes (hier: twentyten):
- page.php oder onecolumn-page-php
- footer.php
- sidebar-footer.php
SCHRITT 1: EIN CUSTOM PAGE TEMPLATE ERSTELLEN
Dafür müssen wir uns zuerst überlegen, ob wir eine Seite mit oder ohne Sidebar wollen. Ich will eine Seite ohne Sidebar, also nehme ich die Datei onecolumn-page.php, kopiere sie in den Child-Theme Ordner und benenne sie in onecolum-page-xyz.php um. Dabei ist “xyz” ein nahezu frei wählbarer Name (bis auf diese hier). Möchte man eine Sidebar nimmt man das page.php Template.
Jetzt öffnen wir das onecolum-page-xyz.php Template und geben ihm einen Namen:
1 2 3 4 5 6 | <?php /** * Template Name: XYZ Template * */ |
und ändern die letzte Zeile von:
31 | <?php get_footer(); ?> |
in:
31 | <?php get_footer('xyz'); ?> |
SCHRITT 2: DIE ANDEREN DATEIEN RÜBERKOPIEREN UND UMBENENNEN
- die footer.php kopieren und in: footer-xyz.php umbenennen
- die sidebar-footer.php kopieren und in sidebar-footer-xyz.php umbennen
Jetzt öffnen wir die footer-xyz.php, suchen nach get_sidebar(‘footer’) und ändern es in get-sidebar(‘footer-xyz’).
Dann öffnen wir die sidebar-footer-xyz.php und ändern die Einträge für die vier Widget Areas. Wir suchen nach first-footer-widget-area, second-footer-widget-area usw. und fügen vorne ein xyz- ein, so dass es ungefähr so aussieht: xyz-first-footer-widget-area.
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 | <?php /* The footer widget area is triggered if any of the areas * have widgets. So let's check that first. * * If none of the sidebars have widgets, then let's bail early. */ if ( ! is_active_sidebar( 'xyz-first-footer-widget-area' ) && ! is_active_sidebar( 'xyz-second-footer-widget-area' ) && ! is_active_sidebar( 'xyz-third-footer-widget-area' ) && ! is_active_sidebar( 'xyz-fourth-footer-widget-area' ) ) return; // If we get this far, we have widgets. Let do this. ?> <div id="footer-widget-area" role="complementary"> <?php if ( is_active_sidebar( 'xyz-first-footer-widget-area' ) ) : ?> <div id="first" class="widget-area"> <ul class="xoxo"> <?php dynamic_sidebar( 'xyz-first-footer-widget-area' ); ?> </ul> </div><!-- #first .widget-area --> <?php endif; ?> <?php if ( is_active_sidebar( 'xyz-second-footer-widget-area' ) ) : ?> <div id="second" class="widget-area"> <ul class="xoxo"> <?php dynamic_sidebar( 'xyz-second-footer-widget-area' ); ?> </ul> </div><!-- #second .widget-area --> <?php endif; ?> <?php if ( is_active_sidebar( 'xyz-third-footer-widget-area' ) ) : ?> <div id="third" class="widget-area"> <ul class="xoxo"> <?php dynamic_sidebar( 'xyz-third-footer-widget-area' ); ?> </ul> </div><!-- #third .widget-area --> <?php endif; ?> <?php if ( is_active_sidebar( 'xyz-fourth-footer-widget-area' ) ) : ?> <div id="fourth" class="widget-area"> <ul class="xoxo"> <?php dynamic_sidebar( 'xyz-fourth-footer-widget-area' ); ?> </ul> </div><!-- #fourth .widget-area --> <?php endif; ?> |
SCHRITT 3: DIE NEUEN WIDGETS REGISTRIEREN
Nun müssen die Widget Areas registriert werden damit sie im WordPress Backend erscheinen und mit Widgets konfiguriert werden können. Das erreichen wir, indem wir der functions.php des Child-Themes eine neue Funktion hinzufügen. Wenn das Child-Theme noch keine functions.php hat, dann erstellen wir eine.
Dann kopieren wir Zeile 378 – 446 von der Twenty Ten functions.php und fügen sie in die functions.php des Child-Themes ein.
Hier ist der Code:
369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 | /**
* Register widgetized areas, including two sidebars and four widget-ready columns in the footer.
*
* To override twentyten_widgets_init() in a child theme, remove the action hook and add your own
* function tied to the init hook.
*
* @since Twenty Ten 1.0
* @uses register_sidebar
*/
function twentyten_widgets_init() {
// Area 1, located at the top of the sidebar.
register_sidebar( array(
'name' => __( 'Primary Widget Area', 'twentyten' ),
'id' => 'primary-widget-area',
'description' => __( 'The primary widget area', 'twentyten' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
// Area 2, located below the Primary Widget Area in the sidebar. Empty by default.
register_sidebar( array(
'name' => __( 'Secondary Widget Area', 'twentyten' ),
'id' => 'secondary-widget-area',
'description' => __( 'The secondary widget area', 'twentyten' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
// Area 3, located in the footer. Empty by default.
register_sidebar( array(
'name' => __( 'First Footer Widget Area', 'twentyten' ),
'id' => 'first-footer-widget-area',
'description' => __( 'The first footer widget area', 'twentyten' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
// Area 4, located in the footer. Empty by default.
register_sidebar( array(
'name' => __( 'Second Footer Widget Area', 'twentyten' ),
'id' => 'second-footer-widget-area',
'description' => __( 'The second footer widget area', 'twentyten' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
// Area 5, located in the footer. Empty by default.
register_sidebar( array(
'name' => __( 'Third Footer Widget Area', 'twentyten' ),
'id' => 'third-footer-widget-area',
'description' => __( 'The third footer widget area', 'twentyten' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
// Area 6, located in the footer. Empty by default.
register_sidebar( array(
'name' => __( 'Fourth Footer Widget Area', 'twentyten' ),
'id' => 'fourth-footer-widget-area',
'description' => __( 'The fourth footer widget area', 'twentyten' ),
'before_widget' => '<li id="%1$s" class="widget-container %2$s">',
'after_widget' => '</li>',
'before_title' => '<h3 class="widget-title">',
'after_title' => '</h3>',
) );
}
/** Register sidebars by running twentyten_widgets_init() on the widgets_init hook. */
add_action( 'widgets_init', 'twentyten_widgets_init' ); |
Am Anfang und Ende des Block sehen wir eine Funktion mit dem Namen: twentyten_widgets_init. Wir benennen sie um in: xyz-twentyten_widgets_init.
LETZTER SCHRITT: DIE WIDGET AREA IDS ABGLEICHEN
so dass sie gleich sind mit den Einträgen in der sidebar-footer-xyz.php. Wegen des guten Stils ändern wir die Namen und Beschreibungen auch. Von:
1 2 3 | 'name' => __( 'Primary Widget Area', 'twentyten' ), 'id' => 'primary-widget-area', 'description' => __( 'The primary widget area', 'twentyten' ), |
in:
1 2 3 | 'name' => __( 'XYZ Primary Widget Area', 'twentyten' ), 'id' => 'xyz-primary-widget-area', 'description' => __( 'The primary XYZ widget area', 'twentyten' ), |
Herzlichen Glückwunsch, wir sind fertig!
Wenn wir alles richtig und vor allem keine Schreibfehler gemacht haben, sehen wir nun 4 weitere Widget Areas in unserem Backend, und, nachdem wir sie mit Widgets bestückt haben, einen anderen Footer auf der Seite unserer Wahl!
Die Vorgehensweise ist ziemlich identisch für andere moderne WordPress Themes und funktioniert genauso wenn man auf ein Child-Theme verzichtet (allerdings macht es meistens Sinn eins zu verwenden). Für das Twentyeleven Theme sollten es so ähnlich funktionieren, allerdings ist es komplizierter ein Custom Page Template zu erstellen. Eine Suche im Internet hilft …
Anmerkung:
Voraussetzung für das Tutorial ist ein Grundverständnis in Webentwicklung, hierbei besonders WordPress, kennen der Werkzeuge und das Wissen wie man mit ihnen arbeitet. Weiterhin sollte das Konzept von Child Themes und der Umgang damit ebenfalls bekannt sein. Eigentlich sollte ich es nicht erwähnen müssen, aber zuvor ein Backup der Theme-Dateien zu machen ist sicher auch keine schlechte Idee.