WordPress: Rich Snippet Tester bringt „missing required field updated“

Ich habe kürzlich meinen Blog mit entsprechenden Autor-Informationen ausgestattet, um in den Google-Suchergebnissen mit Bild und Namen aufzutauchen. Wer weiß, vielleicht spielt das ja irgendwann mal irgendeine Rolle^^ Man kann nie wissen.

Fakt ist, dass ich, um zu testen ob es funktioniert, das sogenannte „Test-Tool für strukturierte Daten“ ausprobiert habe (engl. rich snippet test). Soweit war da auch alles ok, nur ein Feld hat gefehlt und zwar „updated“. Ein kurzes Googleln brachte die Erkenntnis, dass Google ein Feld erwartet in dem steht, wann der entsprechende Beitrag das letzte mal geändert wurde. Möchte man einfach nur diesen ärgerlichen Fehler beseitigen, kann man einfach die Erstellungszeit mit als Zeit auszeichnen, an der zuletzt upgedated wurde. Wie das funktioniert wird hier beschrieben. Aber ich dachte mir: Das muss auch schöner gehen!

Zuerst muss man herausfinden, an welcher Stelle die Meta-Informationen der Beiträge generiert werden. Im oben verlinkten Artikel ist das in der functions.php der Fall. Beim Theme twentyfourteen ist das aber nicht so. Deshalb hab ich nach einer Zeichenkette gesucht, die ich kannte:

$ cd /pfad/zum/theme/
$ grep -rl "<span class="entry-date">" *
image.php
inc/template-tags.php
inc/widgets.php

Die Suche ergab 3 Dateien; die erste und die letzte kann man aber ausschließen. Also muss man in der Datei inc/template-tags.php suchen:

<?php

// Set up and print post meta information.
printf( '<span class="entry-date">
		<a href="%1$s" rel="bookmark"><time class="entry-date" datetime="%2$s">%3$s</time></a>
	</span>
	<span class="byline">
		<span class="author vcard"><a class="url fn n" href="%4$s" rel="author">%5$s</a></span>
	</span>',
esc_url( get_permalink() ),
esc_attr( get_the_date( 'c' ) ),
esc_html( get_the_date() ),
esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
get_the_author()
);

?>

Hier sehen wir die Funktion, die die Meta-Informationen zusammenbaut. Nun muss man nur noch ein Feld hinzufügen:

// Set up and print post meta information.
printf( '<span class="entry-date">
		<a href="%1$s" rel="bookmark"><time class="entry-date" datetime="%2$s">%3$s</time></a>
	</span>
	<span class="updated" style="display:none">
		<time datetime="%4$s" class="updated">%5$s</time>
	</span>
	<span class="byline">
		<span class="author vcard"><a class="url fn n" href="%6$s" rel="author">%7$s</a></span>
	</span>',
esc_url( get_permalink() ),
esc_attr( get_the_date( 'c' ) ),
esc_html( get_the_date() ),
esc_attr( get_the_modified_date( 'c' ) ),
esc_html( get_the_modified_date() ),
esc_url( get_author_posts_url( get_the_author_meta( 'ID' ) ) ),
get_the_author()
);

Bitte unbedingt beachten: Die Variablen müssen fortlaufend nummeriert werden. Das heißt, wo ursprünglich %4$s stand, muss dann in diesem Beispiel %6$s stehen. An diesen Stellen werden beim Ausgeben die nachstehenden dynamischen Strings ausgegeben.

Außerdem habe ich im Markup stehen, dass dieses Feld ausgeblendet wird. Wer auch selbst sehen möchte, wann der Artikel das letzte mal geupdated wurde, kann dieses Snippet natürlich nach seinen Vorstellungen abändern.

8 Gedanken zu „WordPress: Rich Snippet Tester bringt „missing required field updated““

  1. ich habe unter twentyfourteen (wordpress 4) ein childtheme installiert und im dortigen ordner das komplette twentyfourteen-zeugs liegen, mit den meinen individuellen änderungen an den entsprechenden stellen (css und gelegentliche anpassungen in den php-dateien.
    es gibt also im ordner /childtheme den ordner /inc die datei /template-tags.php.
    ich dachte, dass alle dateien, die im parent liegen durch ihre entsprechungen im child überschrieben werden und dass die child-dateien angesprochen und verwendet werden.
    im speziellen fall geht es hier um eine Änderung in der anzeige von „nächster beitrag“ / voriger beitrag“.
    diese wird in der template-tags.php eingerichtet.
    und da du hier eine änderung dieser datei behandelst, frag ich dich um hilfe.
    meine änderung in der child/template-tags.php wird nicht ausgeführt.
    hilfsweise habe ich im parent/template.php geändert – das wurde ausgeführt.
    alternativ habe ich die änderung in der child/functions.php eingefügt, das funktioniert auch, ist aber nicht sauber.
    ich hätte schon gern jede änderung dort, wo sie hingehört.
    meine frage ist also:
    wie erreiche ich, dass änderungen in der child/inc/template-tags.php ausgegeben werden und die parent/child/template-tags.php unwirksam ist
    vielen dank..

  2. fehlerkorrektur:
    „hilfsweise habe ich im parent/template.php geändert – das wurde ausgeführt.“
    -> hilfsweise habe ich im parent/inc/template-tags.php geändert – das wurde ausgeführt.

    1. Moin,

      jetzt verstehe ich zumindest dein Problem 😉 Wie genau man das lösen kann weiß ich allerdings nicht. Das Problem an Child-Themes ist, dass die PHP-Skripte nicht die Skripte des Parent-Themes überschreiben, sondern zusätzlich ausgeführt werden. Das (mir unverständliche) daran ist, dass die Child-Skripte _zeitlich vor_ den Skripten des Parent-Themes ausgeführt werden. Dieser Umstand verhindert offensichtlich, dass deine Einstellungen im Child-Theme korrekt greifen.
      Eine Lösung für das Problem fällt mir spontan nicht ein, das wäre vielleicht mal eine Frage für ein WordPress-Forum.

      Sauberste Lösung aus meiner Sicht ist die Anpassung direkt im Parent-Theme, auch wenn ein Update die Einstellungen ggf. wieder überschreibt.

      viele Grüße,
      Marco

  3. Die Anleitung hat mir sehr weitergeholfen, vielen Dank 🙂 Das theme twenty fourteen ist eben etwas anders zu handhaben als andere themes.
    Ergänzend noch:
    – Es reicht nicht, den grün hinterlegten Code zu übernehmen, man muß auch die blauen Zeilen ersetzen mit dem esc_…
    – display:none kann in display:inline geändert werden, wenn das update-Datum sichtbar sein soll.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.