it-swarm.com.de

So filtern Sie the_content () und fügen Inhalte aus der Vorlage hinzu

Ich versuche, the_content() auf einer einzelnen Seite zu filtern, aber es sieht so aus, als würde eine Endlosschleife erstellt. Ich möchte wissen, wie ich das beheben kann. Ich möchte the_content() überschreiben.

Gibt es eine andere Möglichkeit, den Inhalt einzelner Seiten aus dem Plug-in zu überschreiben?

add_filter( 'the_content', 'change_single_content' );
function change_single_content($content){
    global $post;

    if ( 'my-CPT' == get_post_type() && is_single() ){
        ob_start();
        include my_plugin_theme('single-template.php'); //include single template content
        return ob_get_clean();
    }

    return $content;
}
1
user1983017

Ich vermute, dass single-template.phpthe_content verwendet. Nun überlege, was passiert:

  1. Ihr Filter bewirkt, dass single-template.php geladen wird
  2. single-template.php verwendet the_content
  3. Also wird single-template.php erneut geladen
  4. Welche verwendet the_content
  5. Welche lädt single-template.php
  6. Welche verwendet the_content
  7. ...

Ich bin mir nicht ganz sicher, wie ich das beheben soll, da Ihre Frage sich auf Details bezieht. Es ist schwer zu sagen, was der Großteil des Codes bewirkt oder was Ihr Endziel ist, aber es kann so einfach sein, den Filter unter bestimmten Bedingungen zu entfernen:

add_filter( 'the_content', 'change_single_content' );
function change_single_content($content){
    global $post;

    if ( 'my-CPT' == get_post_type() && is_single() ){
        remove_filter( 'the_content', 'change_single_content' ); // this !!
        ob_start();
        include my_plugin_theme('single-template.php'); //include single template content
        return ob_get_clean();
    }

    return $content;
}

Ich bin mir auch ziemlich sicher, dass das, was Sie tun, der falsche oder zumindest ein weniger richtiger Weg ist, das zu tun, was Sie versuchen. Ich kann das nicht beweisen, aber mein Spinnengefühl kribbelt etwas Schreckliches.

2
s_ha_dum
add_filter( 'the_content', 'filter_content' );
function filter_content( $content ){
    if ( is_single() ){
        $new_content = str_replace( 'for', 'FOR', $content );
        return $new_content;
    }
    else
    {
        return $content;
    }
}

Versuche dies. Ich habe versucht, the_content auf einzelnem Beitrag zu ersetzen. Es wird ersetzt, aber aufgrund einer is_single()-Bedingung nicht auf der Indexseite.

Sie können es so anpassen, dass es Ihren Bedürfnissen entspricht.

Das Problem mit Ihrem Code ist, dass Sie $content als Parameter akzeptieren und ob_get_clean() zurückgeben. In diesem Szenario sollten Sie $content nach dem Optimieren zurückgeben.

Wie im obigen Code habe ich $content akzeptiert, optimiert und $new_content zurückgegeben.

0
Sudeep K Rana