行。
我有一个很长很复杂的功能。
看起来几乎就像这个:
<?php
function hello() {
echo 'My Function!' ?>
<ul>
<li> Blablabla </li>
<ul>
(...)
<?php } ?>
这里的巨大问题是我无法回应任何事情。
我的功能必须返回它的内容而不是回显或直接输出(它必须是那样,它是一个Wordpress短代码,当我回声 - 内容显示在页面顶部 - 总是,不是在我想要的地方):
<?php
function hello() {
$output .= 'My Function!';
$output .= '<ul>';
$output .='<li> Blablabla </li>';
$output .='<ul>';
(...)
return $output;
} ?>
我希望到现在为止这很容易。
现在,真正的问题是:
我有很多直接输入代码,如:
?>
<div>
<span>
<p>Smth</p>
<a>smth</a>
</span>
</div>
<?php
在任何地方添加$ output会杀死漂亮的段落/空白并且代码变得非常难以阅读和理解(并且所有HTML元素现在都是变量的一部分,所以即使我的php编辑器也没有很好地对待它们并将它们着色为PHP元素)。
另外一件事,我有很多像这样的线:
<a href="<?php bloginfo('template_directory'); ?>/includes/php/timthumb.php?src=<?php echo $url; ?>&h=<?php if($items=="one") echo 320; elseif($items=="two") echo 230; elseif($items=="three") echo 180; elseif($items=="four") echo 130; ?>&w=<?php if($items=="one") echo 600; elseif($items=="two") echo 420; elseif($items=="three") echo 277; elseif($items=="four") echo 203; ?>" title="<?php the_title(); ?>" class="link">
(是的,这是一行)
我完全不知道如何将这些行添加到$ output。
$output .= '<a href="<?php bloginfo('template_directory'); ?>/includes/php/timthumb.php?src=<?php echo $url; ?>&h=<?php if($items=="one") echo 320; elseif($items=="two") echo 230; elseif($items=="three") echo 180; elseif($items=="four") echo 130; ?>&w=<?php if($items=="one") echo 600; elseif($items=="two") echo 420; elseif($items=="three") echo 277; elseif($items=="four") echo 203; ?>" title="<?php the_title(); ?>" class="link"> ';
当然不起作用(即使是'和'之前的')。
我相信必须有一种更简单的方法来附加所有返回的代码,但是如何? 我尝试过ob_start();在代码之前返回ob_get_clean();之后,但它输出短代码名称而不是内容。
答案 0 :(得分:4)
很难想象你在这里要解决的问题是什么 - 虽然我不熟悉wordpress。你不能只调用输出应该去的函数吗?
你可以使用输出缓冲 - 像往常一样使用echo / print但是......
ob_start();
hello();
$output=ob_get_contents();
ob_end_clean();
但这并不能解决您仍需要在页面中的正确位置发送到浏览器的问题 - 如果可以的话:
print $output;
在正确的地方,你肯定可以这样做:
hello();
在同一个地方。
答案 1 :(得分:2)
我同意symcbean,但这可能是与Wordpress集成的更实用的方法:如果你现在有一个名为hello()的函数显示HTML,你可能要考虑将该函数重命名为hello_content()(或类似的东西)并用symcbean提供的建议替换hello()函数:
function hello_content( ) {
echo "foo";
}
function hello( ) {
ob_start( );
hello_content( );
return ob_get_clean( );
}
这应该可以解决你的问题。
答案 2 :(得分:1)
PHP Heredoc语法将使事情看起来整洁,您可以将输出返回到变量。只要您不需要任何常量,它就可以正常工作。
你以这种方式使用它:
function bar() {
$var = <<<EOV
anything here
anything there
EOV;
return $var;
}