Как объединить строки с вызовами функций при использовании echo? - PullRequest
5 голосов
/ 11 февраля 2010

Я хочу использовать значения, возвращаемые двумя вызовами функций, в моей html-строке echo'ed.

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

Следующее прекрасно работает:

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

... но как мне получить их все в одном утверждении?

Ответы [ 6 ]

10 голосов
/ 11 февраля 2010

Причина, по которой у вас проблемы, заключается в том, что the_permalink () и the_title () не возвращаются, они отражаются. Вместо этого используйте get_permalink () и $ post-> post_title . Помните, get_permalink () требует в качестве параметра идентификатор записи ($ 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>";

Это, конечно, при условии, что вы вызываете это из внутри цикла , в противном случае для получения желаемого результата потребуется чуть больше, чем это необходимо.

6 голосов
/ 11 февраля 2010
echo '<li><a href="', the_permalink(), '">', the_title(), '</a></li>';
2 голосов
/ 11 февраля 2010
printf( '<li><a href="%s">%s</a></li>', the_permalink(), the_title() );
1 голос
/ 11 февраля 2010

Использование конкатенации (разрывы строк не требуются):

echo '<li><a href="'
 . the_permalink()
 . '">'
 . the_title()
 . '</a></li>';
0 голосов
/ 20 декабря 2010

Используйте <?php the_title_attribute() ?>. Отображает или возвращает заголовок текущего сообщения. Он несколько дублирует функциональность the_title (), но обеспечивает «чистую» версию заголовка, убирая HTML-теги и преобразуя определенные символы (включая кавычки) в эквивалент их символьного объекта.

0 голосов
/ 11 февраля 2010
echo "<li><a href=".the_permalink().">".the_title()."</a></li>";
...