以下のコードをプラグインで実行しています。
add_filter('the_content','thousand_pay');
//Callback function
function thousand_pay($content)
{
echo $content;
if( !in_category( 'Stories') )
{
return;
}
?>
<hr></hr>
[Some HTML]
<?php
return
}
何らかの理由で、個々の投稿のページにはHTMLが複数回印刷されます。
誰もがこれがなぜだろうかについて考えることができますか? is_singular()とis_main_query()をチェックするために条件に追加しなければならないかもしれないことを ここ /と読みます、それでそれはif(!in_category('Stories') || !is_singular() || !is_main_query()
のように見えるでしょう、しかしそれはちょうどポストページにHTMLが印刷されるのを止めるようです。何か案は?
コンテンツが複数回アクセスされるのは普通のことです。例えばSEOプラグインはこれにアクセスしてメタデータを生成するためにこれを行う必要があります。
また filter hookです。フィルタは、ページに何も反映しないようにする必要があります。渡された値を変更して返すためのものです。
その時点で、ループ内でのみ何かをしたいのであれば、in_the_loop()
が必要条件です。
私は同じ問題を抱えていました。私のthe_content
フィルターは複数回呼び出されていましたが、私のthe_content
フィルターは外部APIを呼び出していたため、これはページの読み込みを遅くしていました。だから私の場合、APIは同じデータに対して複数回問い合わせを受けていました。
私はin_the_loop()
、is_singular()
そしてis_main_query()
を使ってみました、しかし時々、テーマによっては、それらは私のフィルターへの呼び出しを一度に制限するのに失敗しました。
だから私は私のフィルタに定数を追加し、それが問題を解決したようです。
the_content
フィルタへの呼び出しを1回に制限する方法の例を示します。
add_filter( 'the_content', 'se225721_the_content' );
function se225721_the_content( $content ) {
if ( ! in_the_loop() ) {
return $content;
}
if ( ! is_singular() ) {
return $content;
}
if ( ! is_main_query() ) {
return $content;
}
$content = ucwords( $content );
remove_filter( 'the_content', 'se225721_the_content' );
return $content;
}
それが役立つことを願っています!
エリック