WordPress Snippet: Artikel-Updates in Feedly anzeigen lassen

Wer seine Website pflegt, hält bestehende Artikel aktuell und überarbeitet sie von Zeit zu Zeit. Warum also nicht den überarbeiteten Artikel wieder auf die erste Seite hochziehen und so neue Leser darauf aufmerksam machen.

Leider bekommen davon eure Feed-Abonnenten z.B. über Feedly, Feedbin… wahrscheinlich nichts mit, weil sich der Globally Unique Identifier, kurz GUID, nicht ändert:

<guid isPermaLink="false">https://go-around.de/?p=331</guid>Code-Sprache: HTML, XML (xml)

WordPress verwendet dafür standardmäßig die Post ID und diese ändert sich nie. Feedaggregate wie Feedly überprüfen in ihrer Datenbank, ob die GUID schon vorhanden ist und zeigen den Lesern nur neue Artikel an. So verhindert Feedly zwar Spam, für die Leser kann es aber auch von Nachteil sein.

Da wir bei Travel-Dealz bevorzugt bestehenden Content recyceln und aktuell halten, ändere ich mithilfe eines kleinen Snippet die GUID bei einem signifikanten Update und der Artikel wird noch einmal von Feedly & co aufgenommen.

Info

Das komplette Snippet findet ihr als Gist auf Github:

Ihr könnt es einfach in euer /wp-content/plugins/ Verzeichnis schieben und als Plugin nutzen.

So funktioniert’s

Als Ersatz nehme ich die aktuelle ID der letzten Revision. Allerdings nur, wenn das Post Date signifikant (um mehr als 24 Stunden) geändert worden ist.

Dafür müssen wir bei jedem Update eines Posts über die post_updated Action überprüfen, ob sich das Datum geändert hat und anschließend die ID der letzten Revision in den Post Meta speichern.

function check_post_update( $post_id, $post_after, $post_before ) {


	$timestamp_before = strtotime( $post_before->post_date );
	$timestamp_after = strtotime( $post_after->post_date );

	// Check if Post Date changed
	if ( $timestamp_before >= $timestamp_after ) {
		return;
	}

	// Check is Post Status is publish and if the Post Date changed significant
	if ( 'publish' === $post_after->post_status && 60*60*24 < $timestamp_after - $timestamp_before ) {

		// Find lates Revision
		if ( $latest_revision = array_shift( wp_get_post_revisions( $post_id ) ) ) {

			// Update _last_update_id to the latest revision ID
			update_post_meta( $post_id, '_last_update_id', $latest_revision->ID );

		}

	}

}
add_action( 'post_updated', __NAMESPACE__ . '\check_post_update', 10, 3 );Code-Sprache: PHP (php)

Anschließend ändern wir die GUID, indem wir den the_guid Filter nutzen. Dabei überprüfen wir zuerst, ob der aktuelle Query für einen Feed ist und ob für den aktuellen Artikel eine _last_update_id vorliegt. Wenn das der Fall ist, ergänzen wir die GUID um die vorher gespeicherte ID der Revision:

function feed_guid( $guid, $id ) {

	// Check if current query is for a feed
	if( ! is_feed() ) {
		return $guid;
	}

	// Get the last id
	if ( $last_id = get_metadata( 'post', $id, '_last_update_id', true ) ) {

		// Add the last id
		$guid .= '#' . (int) $last_id;

	}

	return $guid;
}
add_filter( 'the_guid', __NAMESPACE__ . '\feed_guid', 10, 2 );Code-Sprache: PHP (php)

Das Ergebnis sieht im Feed so aus:

<guid isPermaLink="false">https://go-around.de/?p=331#845</guid>Code-Sprache: HTML, XML (xml)

Ich habe die ID der Revision durch ein # abgetrennt, damit der GUID Link weiterhin zum Beitrag führt und ein Hashtag hat i.d.R. keinen Einfluss auf den Cache, im Gegensatz zu einem zusätzlichen Parameter, z. B. ?p=331&revision=845.

Fazit

Anschließend bekommen auch eure Feed-Leser die Updates eurer Artikel mit. Bitte spammt eure Leser aber nicht zu und ändert alle 24 Stunden die GUID. Pusht einen Artikel nur, wenn ihr ihn auch signifikant geändert habt.

Titelbild: Bild von Hin und wieder gibts mal was.

4 Reaktionen zu “WordPress Snippet: Artikel-Updates in Feedly anzeigen lassen

  1. Interessanter Ansatz, dies über das Datum zu automatisieren. Aber die Mühe mit dem Link würd eich mir nicht machen. Die GUID ist ja nur historisch so gewachsen. Der Link wird nicht (bzw. sollte nicht!) als Link irgendwo benutzt werden.

    Siehe:
    https://deliciousbrains.com/wordpress-post-guids-sometimes-update/
    oder
    https://developer.wordpress.org/reference/functions/the_guid/

    Das Konstrukt sieht aber nicht vor, etwas zu ändern ohne die GUID zu ändern, oder? Wäre ein simpler Button, der die GUID ändert nicht flexibler und auch nicht wesentlich komplizierter für einen Redakteur?

    1. Johannes sagt:

      Die GUID ändert sich ja nur, wenn man das Veröffentlichungsdatum ändert. Alles andere kann man beliebig ändern ohne das sich die GUID ändert.

      Bis ich den Artikel geschrieben habe, haben ich sogar die ID durch die neue immer ersetzt. Mir ist das nur im schreiben dieses Artikels aufgefallen. So würde man auf einer 404 Seite landen. Das wollte ich vermeiden.

Schreibe einen Kommentar

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