Vorwort

Inspiriert hierzu wurde ich durch Ralf, als er mich bat, ihm kurz bei seinem Vorhaben seine Autorenbox zu formatieren, zu helfen. Dabei viel es mir aufm das die Box allgemein etwas an der falschen Stelle ist, also überarbeitete ich auch mein Theme soweit. Positiver Nebeneffekt des Ganzen ist, das nun, sollte das letzte Element im Content „gefloatet“ sein, auch gleich ein „clear“ eingefügt wird, und somit das Layout unter Umständen nicht zerrissen wird.
[info]

Die folgende Beschreibung bezieht sich auf WordPress 3 und wurde mit WordPress 3.1 getestet. Das verwendete Theme ist somit aktuell und basiert auf dem TwentyTen-Theme (Version 1.1) von WordPress. Ich erteile somit keine Garantie, dass dies auch bei älteren Themes genau so funktioniert, wie hier beschrieben.

Da hier direkt am „offenen Herzen“ des Themes gearbeitet wird, bitte vorher in einer Testumgebung ausprobieren und gegebenenfalls etwas experimentieren.
[/info]

Anpassung der Funktionen

Die Funktionen, welche die Autorenbox direkt unter den Content setzen werden natürlich in die functions.php des verwendeten Themes eingebaut. Im ersten Schritt wird eine Funktion definiert, welche the_content(); ablöst. In diesem Beispiel my_the_content();. Somit kann diese später auch im Theme ohne Probleme verwendet werden. Im Grunde genommen ist diese Funktion nichts weiter als eine Kopie der Originalfunktion mit einer kleinen Ergänzung in Zeile 9. Hier wird eine komplett neue Funktion – my_the_athoorbox(); – aufgerufen.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
/**
 * Anzeige des Content eines Artikels.
 *
 * Hiermit wird the_content() umgangen, was eine
 * eigene Formatierung des Contens ermöglicht.
 */
if(!function_exists('my_the_content')) {
    function my_the_content($more_link_text = null, $stripteaser = 0) {
        $content = get_the_content($more_link_text, $stripteaser) . my_the_authorbox();
        $content = apply_filters('the_content', $content);
        $content = str_replace(']]>', ']]>', $content);
        echo $content;
    }
}

Der Aufruf in Zeile 9 bewirkt nun, dass die Autorenbox, welche in der neuen Funktion my_the_authorbox(); erstellt wird direkt an den Content angehängt wird. Damit das alles so funktioniert, muss diese Funktion natürlich ebenfalls in die functions.php eingearbeitet werden.

1
2
3
4
5
6
7
8
9
10
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
/**
 * Autoreninfo hinzufügen
 *
 * Box mit der Autoreninfo wird zu den Artikeln hinzugefügt.
 * Dies ist hier notwendig, damit die Autorenbox vor den eingefügten
 * Plugins steht und somit direkt unter dem Artikel.
 *
 * Bedingungen:
 *      => Einzelartikel wird angezeigt.
 *      => Autorenbeschreibung ist ausgefüllt.
 */
if(!function_exists('my_the_authorbox')) {
    function my_the_authorbox() {
        if(is_single()) {
            if(get_the_author_meta('description')) {
                $var_sAuthorBox = '<div id="entry-author-info-wrapper">' . "\n";
                $var_sAuthorBox .= '<div id="entry-author-info">' . "\n";
                $var_sAuthorBox .= '<div id="author-profile-wrapper">' . "\n";
                $var_sAuthorBox .= '<div id="author-avatar">' . "\n";
                $var_sAuthorBox .= get_avatar(get_the_author_meta('user_email'), apply_filters('my_theme_author_bio_avatar_size', 60)) . "\n";
                $var_sAuthorBox .= '</div>' . "\n";
                $var_sAuthorBox .= '</div>' . "\n";
                $var_sAuthorBox .= '<div id="author-description">' . "\n";
                $var_sAuthorBox .= '<h2>' . sprintf(esc_attr__('About %s', 'my_theme'), get_the_author()) . '</h2>' . "\n";
                $var_sAuthorBox .= get_the_author_meta('description') . "\n";
                $var_sAuthorBox .= '<div id="author-link">' . "\n";
                $var_sAuthorBox .= '<a href="' . get_author_posts_url(get_the_author_meta('ID')) . '">' . sprintf(__('View all posts by %s <span class="meta-nav">→</span>', 'my_theme'), get_the_author()) . '</a>' . "\n";
                $var_sAuthorBox .= '</div>' . "\n";
                $var_sAuthorBox .= '</div>' . "\n";
                $var_sAuthorBox .= '</div>' . "\n";
                $var_sAuthorBox .= '</div>' . "\n";
                $var_sAuthorBox .= '<p id="clear-after-content"></p>' . "\n";
            }
        } else {
            $var_sAuthorBox = '<p id="clear-after-content"></p>';
        }

        return $var_sAuthorBox;
    }
}

In beiden Fällen wird natürlich durch eine Bedingung an Beginn geprüft, ob es diese Funktionen eventuell schon gibt, denn dann würde eine erneute Deklaration zu Fehlern führen.

Wie zu sehen ist, wird innerhalb der Funktion my_the_authorbox(); das HTML der Autorenbox erstellt und befüllt. Auch wird in Zeile 14 geprüft, ob es sich um einen Einzelartikel handelt – is_single(); – denn nur dort soll die Box angezeigt werden. Die Prüfung mit get_the_author_meta(‚description‘) in Zeile 15 stellt sicher, dass diese Box nur angezeigt wird, wenn auch eine Beschreibung im Profil des Autor hinterlegt ist. Eine leere Box anzeigen ist ja sinnfrei :-)

Anpassung des Templates

Hierbei ist die Datei single.php betroffen. Denn nur hier soll die Autorenbox angezeigt werden, also ist es hier auch sinnvoll die neue Funktion einzusetzen. Diese Anpassung ist sehr schnell gemacht. Innerhalb dieser Datei gibt es die folgenden Zeilen.

1
2
3
4
5
6
7
<?php if ( get_the_author_meta( 'description' ) ) : // If a user has filled out their description, show a bio on their entries  ?>
                    <div id="entry-author-info">
                        <div id="author-avatar">
                            [....]
                        </div><!-- #author-description -->
                    </div><!-- #entry-author-info -->
<?php endif; ?>

Das ist die bisherige Autorenbox. Dieser Aufruf wird nun in Zeile 1 etwas erweitert, um sicher zu stellen, dass diese nicht eingeblendet wird, wenn die Neue Autorenbox verfügbar ist. Dazu wird geprüft, ob die Funktion my_the_content(); existiert oder nicht. In diesem Falle, ob sie nicht existiert. Denn dann wird die neue Box auch nicht angezeigt und es gibt somit einen Fallback auf die Bisherige. Dazu wird die erste Zeile dieses Blockes etwas erweitert.

1
<?php if (!function_exists('my_the_content') && get_the_author_meta('description')) : // If a user has filled out their description, show a bio on their entries  ?>

Nun wird noch der Aufruf der Funktion the_content(); innerhalb dieser Datei modifiziert und mit den folgenden Zeilen ersetzt:

1
2
3
4
5
if(function_exists('my_the_content')) {
    my_the_content();
} else {
    the_content();
}

Was passiert hier?
Es wird geprüft, ob die Funktion my_the_content(); – also die Funktion, die in die functions.php eingebaut wurde – existiert. Ist dies der Fall, wird sie aufgerufen, sollte sie nicht existieren, wird wie bisher einfach the_content(); verwendet. Somit ist sicher gestellt, dass der Artikel auf jeden Fall angezeigt wird.

Anpassung bei Themes die loop-single.php nutzen

Bei diesen Themes sieht die single.php natürlich komplett anders aus und enthält nur noch den Aufruf zum Loop.

1
2
3
4
5
6
7
<?php
/* Run the loop to output the post.
 * If you want to overload this in a child theme then include a file
 * called loop-single.php and that will be used instead.
 */

get_template_part( 'loop', 'single' );
?>

Hier ist sind die oben genannten Änderungen natürlich in der loop-single.php durchzuführen.

Anpassung der neuen Autorenbox

Die Anpassung ist ganz einfach per CSS möglich. ich stelle hier das generierte HTML der Box einfach mal zur Ansicht. Dort sind die verwendeten Klassen und IDs zu sehen, welche im CSS angesprochen werden müssen. Sinnvoll ist es auf jeden Fall dem Wrapper – #entry-author-info-wrapper – welcher die gesamte Box umgibt ein clear:both; mit auf dem Weg zu geben.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<div id="entry-author-info-wrapper">
    <div id="entry-author-info">
        <div id="author-profile-wrapper">
            <div id="author-avatar">
                <img src="" />
            </div>
        </div>
        <div id="author-description">
            <h2></h2>
            <div id="author-link">
                <a href=""><span class="meta-nav"></span>
            </div>
        </div>
    </div>
</div>
<p id="clear-after-content"></p>

Schlusswort

Auch hier noch mal der Hinweis, dieses nicht in der Liveumgebung zu testen, sondern in einer Testinstallation eures Blogs und eures Themes. Es kann immer etwas schief gehen und ich übernehme keine Garantie für eventuell zerlegte Themes. Ich habe die hier beschriebene Vorgehensweise bei mir getestet. Jedoch ist mein Theme nur eines von vielen und ich musste feststellen, der Aufbau der verschiedenen Themes könnte unterschiedlicher nicht sein.

Auf jeden Fall wünsche ich euch viel Erfolg damit und lasst es mich wissen, wenn ich euch etwas weiterhelfen konnte :-)

Artikel / Seite weiterempfehlen

2 Meinungen zu “WordPress: Autorenbox direkt unter dem Artikel platzieren

  1. Hallo Peter,

    hast du auch einen Tipp, wie man die Überschrift „Über H.-Peter Pfeufer“ los wird und gleich mit dem Text einsteigen kann?

    Grüße aus Leipzig!

    Adelina

    • Ich verstehe zwar die Frage nicht ganz, vor allem nicht, was dies mit meinem Namen zu tun hat, also gehe ich einfach mal von dem Fall aus, dass Du meinst, wie man allgemein die Überschrift „Über [Autorname]“ wegbekommt.

      Ganz einfach, die entsprechende Zeile aus dem Code entfernen.

      1
      $var_sAuthorBox .= '<h2>' . sprintf(esc_attr__('About %s', 'my_theme'), get_the_author()) . '</h2>' . "\n"

Schreibe einen Kommentar

Ihre Email-Adresse wird nicht veröffentlicht. Pflichtfelder sind durch * markiert.

Sie können folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>