Support » Allgemeine Fragen » [Gelöst] Dynamische class bei jedem Artikel hinzufügen

  • Hallo Zusammen.

    Ich versuche nun seit geraumer Zeit zu jedem Artikel eine Class hinzuzufügen, die den Namen des Autors trägt. Ich Arbeite nach anleitung, doch, etwas läuft schief und ich weiss nicht was denn so ein php crack bin ich leider (noch) nicht :(.
    Ich Benutze das standart Template twentyfourteen.

    Die anleitung (Style Posts Based on Authors):
    http://www.wpbeginner.com/wp-themes/how-to-style-each-wordpress-post-differently/

    ich habe den code

    <?php post_class('class-1 class-2 ' . $author); ?>

    gleich am anfang eingefügt in der index.php:

    get_header(); ?>
    <?php $author = get_the_author_meta('display_name'); ?>
    
    <div id="main-content" class="main-content">

    und in der content.php auch am anfang:

    <article id="post-<?php the_ID(); ?>" <?php post_class('class-1 class-2 ' . $author); ?>>

    das seltsame: die zwei Klassen: class-1 class-2 werden hinzugefügt. Wieso mein Platzhalter nicht?

    Ich hoffe ihr könnt mir helfen

    gruss

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Hallo,

    wenn du z.B. eine statische Seite als Startseite festgelegt hast, dann wird erst gar nicht auf die index.php zugegriffen sondern gleich auf eine page.php. Es kommt auf deine Einstellungen in „Einstellungen -> Lesen“ an. Ich habe für den folgenden Test auch das twentyfourteen verwendet.

    Diese Grafik kann dir darüber einen Einblick verschaffen – ist wirklich sehr nützlich: http://wphierarchy.com/
    Codex: http://codex.wordpress.org/Template_Hierarchy

    Dann habe ich mir mal
    <?php $author = get_the_author_meta('display_name'); ?>
    angesehen. Dieser Code ergibt ausserhalb des Loops (z.B.: in page.php) keinen Wert zurück.

    Dieser allerdings schon (wenn ein User mit entsprechender ID besteht und eingefügt ist), z.B.:

    <?php $author = get_the_author_meta('display_name', 2);
    echo $author;

    Der Codex meint das übrigens auch:

    If used within The Loop, the user ID need not be specified, and the displayed data is that of the current post author. A user ID must be specified if used outside The Loop.

    (http://codex.wordpress.org/Function_Reference/get_the_author_meta)

    An der Stelle muss man sagen, dass dein Tutorial leider einen Fehler hat, da die Funktion get_the_author_meta ausserhalb des Loops ohne spezifizierte ID keinerlei Wert bringt. Würde ja auch keinen Sinn machen. Das geht aber vielleicht in einem Autoren-Template auch ausserhalb des Loops(?). Habe ich aber nicht getestet.

    So nun zur Lösung. Ich ändere jetzt mal eine Seite.
    content-page.php wird als Template für den Loop genommen. Alles was hier genommen wird, befindet sich innerhalb des Loops. Der Loop wird schon im Template page.php geöffnet und „umschliesst“ die content-page.php. Ich hoffe das ist verständlich?

    Ich habe nun in der content-page.php direkt vor:

    <article ...

    folgenden Code eingebunden:

    <?php $author = get_the_author_meta('display_name');  ?>

    Hier wird dann schon der Display Name des Autors „generiert“ und in der Variable $author gespeichert.

    Dann habe ich Zeile:

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

    mit $author ergänzt:

    <article id="post-<?php the_ID(); ?>" <?php post_class($author); ?>>

    Und Voila es funktioniert.
    Klappt es nun?

    Thread-Starter dodo13

    (@dodo13)

    Hallo Es piaT

    Besten dank für deine mühe.

    Ich kann leider nicht auf eine statische Seite umstellen, da sonst der benötigte Blog style flöten geht.

    Danke für die hilfreichen Tipps, kann ich gut gebrauchen!

    Ok kann dir soweit folgen, macht auch irgendwie sinn.
    Meine Fragen: Woher weisst du das die content-page.php inerhalb des Loops ist? Demfall könnte man theoretisch diesen Code auch in allen anderen Template Dateien einfügen die im Loop sind?

    Heeei suuuper, vielen dank!
    Ich verstehe deine Beschreibung sehr gut, super erklärt

    Ich habe den Code:

    <?php $author = get_the_author_meta('display_name');  ?>
    <article id="post-<?php the_ID(); ?>" <?php post_class($author); ?>>

    in die content.php eingefügt. So wird auf der Hauptseite die als Blog style alle Artikel anzeigt die gewünschte klasse vergeben und kann bei einem post von Autor X Blau einfärben und den von Autor Y Rot.

    Super Sache danke!

    Moin,

    Ich kann leider nicht auf eine statische Seite umstellen, da sonst der benötigte Blog style flöten geht.

    Du kannst zudem ja eine Seite anlegen, dort greift dann auch das page.php template.

    Woher weisst du das die content-page.php inerhalb des Loops ist?

    Da findest du in der page.php folgendes:

    get_template_part( 'content', 'page' );

    Das verweist dann auf content-page.php. Siehe: http://codex.wordpress.org/Function_Reference/get_template_part

    Was meinst du genau mit?

    Demfall könnte man theoretisch diesen Code auch in allen anderen Template Dateien einfügen die im Loop sind?

    Thread-Starter dodo13

    (@dodo13)

    Hallo

    Ach so, das heisst wenn ich aus:

    get_template_part( 'content', 'page' );

    ein

    get_template_part( 'content', 'page' 'meineseite' );

    mache, ist die meineseite.php auch im Loop drin, wo ich dann z.b die posts aufrufen kann?

    Wieso steht dann da nicht etwas wie

    get_template_part( 'content-page' );

    drin?

    Hallo,

    schaue dir dazu bitte genau den Codex an.

    get_template_part besitzt 2 Parameter:

    <?php get_template_part( $slug, $name ); ?>

    Gruss

    Ich glaube du möchtest hier noch einmal nachlesen:
    http://codex.wordpress.org/the_loop

    get_template_part( 'content', 'page' 'meineseite' );

    müsste so aussehen:

    get_template_part( 'content', 'meineseite' );
    Ruft dann also content-meineseite.php auf.

    Siehe Link von Es piaT:

    Das verweist dann auf content-page.php. Siehe: http://codex.wordpress.org/Function_Reference/get_template_part

    Gruß, Torsten

    Thread-Starter dodo13

    (@dodo13)

    Vielen Dank!

    Grüsse

Ansicht von 7 Antworten - 1 bis 7 (von insgesamt 7)
  • Das Thema „[Gelöst] Dynamische class bei jedem Artikel hinzufügen“ ist für neue Antworten geschlossen.