如果在回调函数

时间:2016-08-21 11:07:09

标签: wordpress

为什么<div>Ad goes here部分会显示在内容之上?它应该显示在$content的底部。如果我直接将$content作为return $content.'<div>The ads goes here</div>';返回,则会显示在底部。有线索吗?

add_filter( 'the_content', 'ads_filter' );

function ads_filter ($content){
     return $content.ads();
 }

function ads(){
   echo '<div>The ads goes here</div>';
}

2 个答案:

答案 0 :(得分:3)

对于简单的解决方案,请在return函数中使用echo代替ads()

add_filter( 'the_content', 'ads_filter' );

function ads_filter ($content){
     return $content.ads();
 }

function ads(){
   return '<div>The ads goes here</div>';
}

因为当你编写echo并将其与$content连接起来时,它已经打印了外部内容,然后连接了实际的帖子内容。

以下是您对短代码的回答:

add_filter( 'the_content', 'ads_filter' );

function ads_filter ($content){
     return $content.do_shortcode(ads());
 }
add_shortcode('ads_shortcode','here_is_func');
function here_is_func(){
    return '<div>The ads goes here</div>';
}
function ads(){
   return '[ads_shortcode]';
}

答案 1 :(得分:2)

如果您从documentation

中看到add_filter功能的签名
add_filter( string $tag, callable $function_to_add, int $priority = 10, int $accepted_args = 1 )

您可以通过更改不同的优先级来玩它。较低的数字与先前的执行相对应,具有相同优先级的函数按照它们添加到操作的顺序执行。只要给它一个高优先级,看看它的位置。

add_filter( 'the_content', 'ads_filter', 10 );

function ads_filter ($content){
     return $content.ads();
 }

function ads(){
   echo '<div>The ads goes here</div>';
}