J'essaie de filtrer the_content()
sur une seule page, mais il semble que cela crée une boucle infinie. Je veux savoir comment résoudre ce problème. Je veux remplacer the_content()
.
Existe-t-il un autre moyen de remplacer le contenu d'une seule page à partir du plugin?
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;
}
Je suppose que single-template.php
utilise the_content
. Maintenant, pensez à ce qui se passe:
single-template.php
single-template.php
utilise the_content
single-template.php
charge à nouveauthe_content
single-template.php
the_content
Je ne suis pas tout à fait sûr de savoir comment résoudre ce problème, car votre question est assez détaillée. Il est difficile de dire ce que la plupart du code fait ou quel est votre but ultime, mais cela peut être aussi simple que de supprimer le filtre de manière conditionnelle:
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;
}
Je suis également à peu près sûr que ce que vous faites est la mauvaise façon, ou du moins la moins bonne, de faire ce que vous essayez de faire. Je ne peux pas le prouver, mais mon sens de l'araignée pique quelque chose de terrible.
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;
}
}
Essaye ça. J'ai essayé de remplacer the_content sur un seul post. Il remplace mais pas sur la page d'index en raison de la condition is_single()
.
Vous pouvez le modifier selon vos besoins.
Le problème avec votre code est que vous acceptez $content
en tant que paramètre et que vous renvoyez ob_get_clean()
. Vous devez renvoyer $content
après l'avoir modifié, dans ce scénario.
Comme dans le code ci-dessus, j'ai accepté $content
, l'ai modifié et renvoyé $new_content
.