在内容后插入函数输出

时间:2018-12-30 作者:D. Winning

因此,我试图在我的博客文章末尾添加一个按钮,以下是我目前在插件中的代码:

<?php
/*
Plugin Name: etc....
*/

function shares_content() { ?>
  <div class=\'social-shares-container\'>
    <a href=\'https://www.facebook.com/sharer/sharer.php?u=<?php echo the_permalink(); ?>\'>Share on Facebook</a>
  </div> <?php
}

function shares_add_buttons($content) {
  global $post;

  if (!is_page() && is_object($post)) {
    return $content . shares_content();
  }

  return $content;
}

add_filter(\'the_content\', \'shares_add_buttons\');
?>
这会在我的内容之前添加链接,但如果我这样做,它会将新内容添加到所需的位置(之后the_content):

function shares_add_buttons($content) {
  global $post;

  if (!is_page() && is_object($post)) {
    return $content . \'some random content\';
  }

  return $content;
}
谁能告诉我这是为什么吗?

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

你的shares_content 函数直接输出内容,如果您试图将结果分配给变量或在return 另一个函数中的语句。

您可以将其更改为return 字符串:

function shares_content() {
    $content = "<div class=\'social-shares-container\'><a href=\'https://www.facebook.com/sharer/sharer.php?u=%s\'>Share on Facebook</a></div>";
    return sprintf( $content, get_permalink() );
}
这里还值得指出的是get_permalink(). 如果您查看源代码,该函数也returns其价值。还有另一个API函数,the_permalink(), 其中包含echo 而不是return. 这也会破坏过滤器输出。大多数WordPress函数都有这样的两个版本。

SO网友:Krzysiek Dróżdż

在此行中:

return $content . shares_content();
将原始内容与shares_content 作用所以它看起来是正确的,但是。。。

在该功能中:

function shares_content() { ?>
  <div class=\'social-shares-container\'>
    <a href=\'https://www.facebook.com/sharer/sharer.php?u=<?php echo the_permalink(); ?>\'>Share on Facebook</a>
  </div> <?php
}
您不返回任何内容,因此此函数没有结果,因此不会向过滤器中的内容追加任何内容。

但同时。。。此函数将div与link相呼应,以便在函数运行时打印内容,从而在内容之前打印内容。。。

相关推荐

Organize functions.php

组织职能的最佳方式是什么。php的性能?我有几个add\\u操作调用、几个add\\u主题支持、几个add\\u过滤器和4个附加函数。对于面包屑、样式表、注册菜单和小部件。我们是否需要遵守订单?例如,首先是所有add\\u过滤器函数,然后是add theme\\u support等。不确定添加代码是否相关,因为这是一个一般性问题。如果需要,我很乐意更新这篇文章。