我想在我的 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>';
...但是我如何将它们全部放在一个语句中?
我想在我的 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>';
...但是我如何将它们全部放在一个语句中?
您遇到问题的原因是因为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>";
这当然是假设您从循环中调用它,否则需要比这更多的东西来获得所需的输出。
echo '<li><a href="', the_permalink(), '">', the_title(), '</a></li>';
printf( '<li><a href="%s">%s</a></li>', the_permalink(), the_title() );
使用连接(不需要换行符):
echo '<li><a href="'
. the_permalink()
. '">'
. the_title()
. '</a></li>';
echo "<li><a href=".the_permalink().">".the_title()."</a></li>";
使用<?php the_title_attribute() ?>
. 它显示或返回当前帖子的标题。它在某种程度上复制了 the_title() 的功能,但通过剥离 HTML 标记并将某些字符(包括引号)转换为与其等效的字符实体来提供标题的“干净”版本。