捕获PHP中函数返回的数据的最佳方法是什么?

时间:2009-03-28 15:03:57

标签: php wordpress

我是使用Wordpress进行编程和学习的新手。

the_title(); //outputs the title of the page

我想将页面标题捕获到字符串变量中,以便我可以使用strtolowerstr_replace函数对其进行操作。

我使用它的唯一方法是使用输出缓冲。

ob_start();
the_title();
$result = ob_get_clean();

echo str_replace(" ","-",strtolower($result));

/*there has got to be an easier way....
i dont fully understand why */

str_replace(" ","-",strtolower(the_title())); 

我做错了什么?

5 个答案:

答案 0 :(得分:10)

如果你真正想要的是wp_title函数,它所采用的第二个参数是一个布尔值,它是否应该显示它或返回它。将其传递为false,然后将其返回到var,然后您可以执行此操作:

$mytitle = wp_title(null, false);

否则,您唯一的选择是找到您要查找的功能并修改源代码。

答案 1 :(得分:3)

没有更简单的方法。你的函数不返回字符串,它打印它,因此如果你想捕获输出,你将不得不使用输出缓冲。

以下示例中f1()和f2()之间的区别。

// Returns a string, prints nothing.
function f1() {
    return "String";
}

// Prints a string, returns nothing.
function f2() {
    echo "String";
}

答案 2 :(得分:2)

Wordpress是一个 HORRIBLE 应用程序,用于学习如何编程。它使用“正常工作”的这些全局函数,但它们在“循环”内部执行非常具体的任务。正如我所说,这是一个好的代码应该是一个可怕的例子。

谢天谢地(为你)还有其他功能只返回你正在寻找的部分。你可以阅读a full listing here,而不仅仅是写下你需要的东西。请注意你记下哪些必须在神秘的循环中,你可以在任何地方使用。

碰巧有更多方法可以获得标题,但我真的想象这个例子你会做的事情如下:

$this_post = get_post($post); // I *think* $post is the post ID inside the loop though I could be wrong
echo $this_post->post_title;

但正如另一张海报(正确地)说你可以使用一个相当简单的wp_title()函数来获取当前的循环标题。

这让我想起要解释为什么从Wordpress学习编程是一个坏主意。他们有太多该​​死的方式做同样的事情,以至于几乎不可能掌握事情。

博客是一组非常简单的数据(在WP的情况下甚至更多,因为它没有完全规范化),而是只有一种方法来输出标题<?php echo $post->title; ?>,你有无数的方法,都巧妙地做不同的事情。

如果你真的想学习如何编程(而不是乱搞你的WP内部的垃圾),创建一个简单的博客引擎是相当快速和有趣的......这当然是很多人进入一种新的语言或框架。

如果真的想要玩得开心,请看看Django。


足够的Wordpress咆哮。如果您将来有类似的事情没有100种方法,我真的不建议输出缓冲区捕获。它耗费了大量的资源,用于相对简单的事情。

最简单的方法就像获取原始函数的源代码一样简单,将其粘贴到新函数中并将echo替换为return

请注意,可能有一些数据库连接要处理过早返回可能会中断...所以如果echo不是最后一个语句,而不是在那里返回,请将字符串存储为变量并在结束时返回功能。

答案 3 :(得分:1)

我想与你们分享我的最终解决方案。

这是为了在wordpress中为我的身体标签提供唯一的ID。* /

$title =wp_title(null,false);
echo strtolower(str_replace(' ','-',ltrim($title)));


//without the ltrim() 2 dashes are created before the title.

答案 4 :(得分:1)

Wordpress中几乎每个“the_*”函数都有一个“get_the_*”对应项。所以,你只需要使用

echo str_replace(" ","-",get_the_title());

它会像魅力一样发挥作用。还有get_the_excerpt(),get_the_content()和the_permalink()以某种方式打破了命名惯例(上帝知道我写了多少次“get_the_permalink()”并对它为什么不起作用感到沮丧)< / p>

干杯!