Ändern Sie WP_Post vor der Verarbeitung

Ich suche nach einer Möglichkeit, WP_Post Objekt zu ändern, bevor es auf der Seite verarbeitet und angezeigt wird.

Grund – Ich habe meine Site erstellt, als WP noch in Version 2.0 oder noch früher war. Ich habe mich ein paar Jahre nicht darum gekümmert, aber jetzt mache ich wieder Updates. Die erste Version meiner Seite wurde mit my-hacks.php und einigen cleveren Anwendungen von add_filter('the_content', some_function); Gute Sache ist, dass sie immer noch funktionieren, aber ich habe Probleme, etwas functionalität hinzuzufügen.

tl; dr – Meine Posts haben kein “Featured Image” (oder Auszug), aber aufgrund der Art und Weise, wie ich die Site erstellt habe, weiß ich wo die Bilder sind und ich kann dynamisch eine URL für jeden Post generieren Auszug); Ich möchte sie nicht zum Beitrag hinzufügen. Ich möchte, dass sie den Ergebnissen der Abfrage hinzugefügt werden, bevor sie vom Theme angezeigt und verarbeitet werden, sodass alle Thatsachen, die das Theme liefert, “denken”, dass die Daten tatsächlich da sind.

Was ich schon gemacht habe – ich habe add_action und add_filter zu 'the_post' oder 'the_content' versucht und ich habe versucht mit add_post_meta (was ein guter Weg zu sein scheint), aber ich kann es nicht funktionieren lassen.

Was ich denke, ist ein guter Weg zu gehenadd_filter('the_content') wird nicht tun, da die meisten Vorlagen in diesen Tagen für die Metadaten im Beitrag, wie das Thumbnail / Featured Bild oder der Ausschnitt, so einige hinzufügen Inhalt auf die Post wird es nicht schneiden. Deshalb denke ich, dass es am besten wäre, alle Post-Daten zu verarbeiten, bevor sie von der Vorlage verarbeitet werden. Dies scheint ein guter Ort zu sein, um Hooks zu benutzen, aber welcher und wie benutze ich ihn?

Was ich zu schätzen wüsste – Ein einfaches Beispiel, das in einer Schleife und in einem einzelnen Beitrag funktionieren würde, und den Titel ändern, indem Sie die the_post Daten the_post , anstatt the_title() . Ich wäre sehr dankbar für ein Beispiel, bei dem ein vorgestellten Bild in den Post, wo es keine gibt (kann eine statische URL sein) und Auszug (kann auch statischen Text sein) platziert werden.

Zur Klarstellung – ich möchte nicht, dass dies Änderungen in der database vornimmt, sondern nur die Ergebnisse, die die Abfrage zurückgegeben hat, so dass sie von Anfang an in der database zu sein scheint. Dies alles sollte über functions.php oder einen anderen Wrapper (Hinzufügen von require_once("my_functions.php") zur functions.php des Themes) erreicht werden.

tfl; dfr – Wie ändere WP_Post das WP_Post Objekt (Inhalt, Meta, Thumbnail, benutzerdefinierte Felder …) innerhalb und außerhalb der Schleife, indem ich die Ergebnisse der Abfrage modifiziere, so dass die Vorlage / das Theme die Änderungen “denkt” schon da und es kann sie wie vorgesehen verarbeiten? Sollte eine externe Datei verwenden (nicht die Vorlage selbst ändern) wie functions.php .

Solutions Collecting From Web of "Ändern Sie WP_Post vor der Verarbeitung"

Es gibt einen the_post Hook, mit dem Sie das Post-Objekt ändern können:

 function my_the_post_action( $post_object ) { // modify post object here } add_action( 'the_post', 'my_the_post_action' ); 

Aber die Post-Daten sind nicht dort, wo deine Thumbnails gespeichert sind. Sie sind über ein Post-Meta-Feld verbunden. Das wirst du manipulieren müssen. Etwas wie:

 function my_thumbs($n, $object_id, $meta_key, $single ) { if ('_thumbnail_id' == $meta_key) { echo 'image link'; } } add_filter( "get_post_metadata", 'my_thumbs', 10, 4 ); 

Obwohl ich keine Ahnung habe, wie komplex diese function sein müsste.

Ehrlich gesagt, wenn Sie WP 2-etwas ausführen, müssen Sie aktualisieren und verbringen Sie die Zeit, um Ihr improvisiertes System zu Core-functionen zu konvertieren. Mit freundlichen Grüßen.

Danke s_ha_dum, dass er mich in die richtige Richtung weist. Hier ist die vollständige Antwort auf die Frage, die ich gestellt habe.

Um einen Auszug in den Beitrag zu injizieren, mache folgendes:

 // function called by the_post filter (by reference) // needs no return statement. changes WP_Post object function _inject_excerpt($post) { // do whatever you like here. I needed to treat the content of the post // before the  tag as excerpt // extract the text before the  tag to be treated as excerpt $post->post_excerpt = preg_split('//', $post->post_content)[0]; } add_filter('the_post', '_inject_excerpt'); 

Um ein Feature-Bild in den Post zu injizieren, mache folgendes:

 // function called by a post_thumbnail_html filter // injects post thumbnail / feature image into the post // when there is none before processing so the template can see it function _inject_thumbnail( $html, $post_id, $post_thumbnail_id, $size, $attr ) { if (empty($html)) { https://wordpress.stackexchange.com/questions/205877/modify-wp-post-before-processing/$url = "preview.jpg"; // some processing might be needed to find the right url $html = ""; // some additional styling might be needed } return $html; } add_filter( 'post_thumbnail_html', '_inject_thumbnail'); 

Hoffe das hilft jemand anderem in Not.