为什么添加操作(‘the_content’)会覆盖我的页面

时间:2016-11-27 作者:iani garthalski

我是wordpress的新手,我正在尝试在我的网站的特定页面上显示一些文本。我的问题是,我的插件将该页面上的当前内容替换为插件上的内容。如何使插件不替换页面上的内容。

add_action( \'the_content\', "displayNewsSlider");
function displayNewsSlider(){
  if (is_page(\'sample-page\')){
  echo "plugin content 1";
  echo "plugin content 2";
  }
}

1 个回复
最合适的回答,由SO网友:JHoffmann 整理而成

有一种微妙的difference between action hooks and filters. 最值得注意的一点是,过滤器函数需要接收一个值,并在完成其工作时传递该值。在函数内部,该值可以修改或用于其他用途。

在你的情况下the_content 是一个过滤器,在调用时,它接受posts内容并将其作为第一个参数发送给第一个挂钩函数。钩子函数现在可以修改此内容,或者例如附加一些内容。但是该函数也期望最终返回内容字符串,因此可以将其传递给钩子上的下一个函数the_content. 重复此操作,直到完成所有挂钩函数。然后,最终产品将返回到调用过滤器的代码(此过滤器在the_content(), 但它也可以在其他地方被调用),只有这样,结果字符串才会被回显。这就是为什么总是返回字符串很重要,否则invocating函数不知道输出什么。

在您的情况下,此筛选器的用法如下所示:

add_filter( \'the_content\', \'wpse247535_display_news_slider\' );
function wpse247535_display_news_slider( $content ) {
    if ( is_page( \'sample-page\' ) ) {
        $content .= "plugin content";
        $content .= "more plugin content";
    }
    return $content;
}
因此,要回答问题的标题:页面的内容不会被覆盖,但函数不会将获取的内容字符串作为参数进行处理,因此不会将其返回给invocating函数,而invocating函数则无法再输出内容,因为它在途中丢失了。