1つのページでthe_content()
をフィルタリングしようとしていますが、無限ループになっているようです。これを修正する方法を知りたいです。 the_content()
をオーバーライドしたいです。
プラグインから単一ページのコンテンツを上書きする他の方法はありますか?
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;
}
single-template.php
はthe_content
を使っていると思います。今何が起こるか考えてみましょう:
single-template.php
をロードさせますsingle-template.php
はthe_content
を使用しますsingle-template.php
は再びロードされますthe_content
を使用していますsingle-template.php
をロードしますthe_content
を使用していますあなたの質問は細部については軽いので、私はそれをどのように修正するかについて完全に確信がありません。コードの大部分が何をしているのか、またはあなたの最終的な目標が何であるのかを判断するのは難しいですが、条件付きでフィルタを削除するのと同じくらい簡単かもしれません。
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;
}
私はまた、あなたがしていることがあなたがやろうとしていることをするのに間違った方法であるか、少なくとも不適切な方法であることを確信しています。それを証明することはできませんが、私のクモの感覚はひどいものを痛感しています。
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;
}
}
これを試して。私は単一の投稿でthe_contentを置き換えてみました。 is_single()
条件のため、置き換えられていますが、インデックスページにはありません。
あなたはあなたの必要に合ったそれを微調整することができます。
あなたのコードの問題はあなたが$content
をパラメータとして受け入れてob_get_clean()
を返すことです。このシナリオでは、調整後に$content
を返す必要があります。
上記のコードのように、私は$content
を受け入れ、それを微調整し、そして$new_content
を返しました。