5

我想在我的 echo'ed html 字符串中使用从两个函数调用返回的值。

<li><a href="the_permalink()">the_title()</a></li>

以下工作正常:

echo '<li><a href="';
echo the_permalink();
echo '">';
echo the_title();
echo '</a></li>';

...但是我如何将它们全部放在一个语句中?

4

6 回答 6

10

您遇到问题的原因是因为the_permalink()the_title()没有返回,它们会回显。而是使用get_permalink()$post->post_title。请记住get_permalink()需要帖子 ID ($post->ID) 作为参数。我知道这很烦人且违反直觉,但这就是 Wordpress 的工作方式(请参阅对此答案的评论中的主观性。)

这解释了为什么第二个示例适用于您的初始问题。如果您调用从字符串中打印的函数,则回显将在字符串结尾之前输出。

所以这:

echo ' this should be before the link: '.the_permalink().' But it is not.';

不会按预期工作。相反,它将输出:

http://example.com this should be before the link: But it is not.

在 PHP 中,您可以使用单引号和双引号。当我使用 HTML 构建字符串时,我通常以单引号开始字符串,这样,我可以在字符串中使用与 HTML 兼容的双引号而无需转义。

所以把它四舍五入,它看起来像:

echo '<li><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>';

或者按照您最初的要求,为了简单地转义它们,在引号前加一个反斜杠。像这样(单引号已被删除)

echo "<li><a href=\"".get_permalink($post->ID)."\">".$post->post_title."</a></li>";

这当然是假设您从循环中调用它,否则需要比这更多的东西来获得所需的输出。

于 2010-02-11T08:20:46.393 回答
6
echo '<li><a href="', the_permalink(), '">', the_title(), '</a></li>';
于 2010-02-11T07:52:04.983 回答
2
printf( '<li><a href="%s">%s</a></li>', the_permalink(), the_title() );
于 2010-02-11T07:27:02.153 回答
1

使用连接(不需要换行符):

echo '<li><a href="'
 . the_permalink()
 . '">'
 . the_title()
 . '</a></li>';
于 2010-02-11T07:30:30.820 回答
0
echo "<li><a href=".the_permalink().">".the_title()."</a></li>";
于 2010-02-11T07:32:33.793 回答
0

使用<?php the_title_attribute() ?>. 它显示或返回当前帖子的标题。它在某种程度上复制了 the_title() 的功能,但通过剥离 HTML 标记并将某些字符(包括引号)转换为与其等效的字符实体来提供标题的“干净”版本。

于 2010-12-20T06:49:55.050 回答