Fügen Sie den Inhalt eines Posts in einen anderen ein

Ich schreibe ein kleines Plugin, das einen benutzerdefinierten Post- Typ erstellt.

Ich habe einen Filter erstellt, der den Inhalt eines solchen Beitrags in einen anderen kopiert .

Dadurch durchlaufe ich alle benutzerdefinierten Posts. Für jeden bekomme ich einen target_type davon.

Dieser Wert wird mit dem tatsächlichen post_type des betrachteten post_type verglichen. Wenn es gleich ist, wird der Inhalt angehängt.

Mein Problem ist, dass Shortcodes, die im benutzerdefinierten Post-Content verwendet werden, im Kontext des Zielposts gerendert werden sollen.

Zum Beispiel: Ich habe einen Shortcode im benutzerdefinierten Post, der nur get_the_title(); zurückgibt get_the_title(); Im Zieleintrag wird der Titel des benutzerdefinierten Beitrags angezeigt.

Tatsächlich möchte ich, dass der benutzerdefinierte Post nur ein Container für später wiedergegebenen Inhalt ist.

Wow, das war eigentlich schwer für mich zu erklären.

Ich hoffe, dass jemand mein Problem versteht und mir helfen kann.

Vielen Dank im Voraus!

Hier ist der Filtercode:

 add_filter('the_content', 'copy_content'); function copy_content( $content ) { $post_type = get_post_type(); $args = array( 'post_type' => 'custom', 'post_status' => 'publish', 'posts_per_page' => -1 ); $post_query = new WP_Query($args); if($post_query->have_posts() ) { while($post_query->have_posts() ) { $post_query->the_post(); $target_type = get_post_meta(get_the_ID(), "target_type")[0]; if($target_type == $post_type){ return $content . get_the_content(); } } } wp_reset_postdata(); return $content; } 

Solutions Collecting From Web of "Fügen Sie den Inhalt eines Posts in einen anderen ein"

Wenn Sie in Ihrer function return verwenden, wird der Rest der function nicht ausgeführt. Es funktioniert irgendwie wie exit(); oder die(); , aber es wird nicht das gesamte Skript beenden, sondern nur dieses bestimmte Stück Code in Ihrer function beenden und einen Wert zurückgeben, falls erforderlich.

Sie sollten Ihren Inhalt in einer Zeichenfolge speichern und dann alle zurückgeben, nachdem Sie fertig sind.

So sollte Ihr Code aussehen:

 add_filter('the_content', 'copy_content'); function copy_content( $content ) { $post_type = get_post_type(); $args = array( 'post_type' => 'custom', 'post_status' => 'publish', 'posts_per_page' => -1 ); $post_query = new WP_Query($args); if($post_query->have_posts() ) { // Create an empty string $data = ''; while($post_query->have_posts() ) { $post_query->the_post(); $target_type = get_post_meta(get_the_ID(), "target_type")[0]; if($target_type == $post_type){ // Append each post's content to it $data .= get_the_content(); } } } wp_reset_postdata(); // Return both content and our custom data altogether return $content . $data; }