我不认为所提供的代码中存在根本问题。我测试了一个进一步简化的测试用例,我已将其粘贴到下面,并且没有得到重复的内容:
function my_module_init() {
add_filter(\'the_content\', \'my_content_ctrlr\');
}
add_action(\'init\', \'my_module_init\');
function my_content_ctrlr( $content ) {
ob_start();
// This file contains only the following simple text for testing purposes: #########
include( plugin_dir_path( __FILE__ ) . \'views/my-grid.php\' );
$output = ob_get_contents();
ob_end_clean();
// Add our custom code before the existing content.
return $output . $content;
}
因此,我认为我们可以排除我最初的想法,即内容被回应而不是返回。
另一种可能性是apply_filters()
电话接通the_content
通过插件或主题在站点中的某个位置。E、 g.:
echo ( apply_filters( \'the_content\', \'<div>Hello there!</div>\' ) );
主题做这种事情并不罕见,它会导致
my_content_ctrlr()
对于每一个额外的事件调用一次。
您可以使用此代码段所示的一些附加检查来解决该问题(source).
function pippin_filter_content_sample($content) {
if( is_singular() && is_main_query() ) {
$new_content = \'<p>This is added to the bottom of all post and page content, as well as custom post types.</p>\';
$content .= $new_content;
}
return $content;
}
add_filter(\'the_content\', \'pippin_filter_content_sample\');