Como concatenar strings com chamadas de função ao usar o Echo?
-
19-09-2019 - |
Pergunta
Quero usar os valores retornados de duas chamadas de função na minha string html de eco.
<li><a href="the_permalink()">the_title()</a></li>
O seguinte funciona bem:
echo '<li><a href="';
echo the_permalink();
echo '">';
echo the_title();
echo '</a></li>';
... Mas como faço para obtê -los todos em uma única declaração?
Solução
echo '<li><a href="', the_permalink(), '">', the_title(), '</a></li>';
Outras dicas
A razão pela qual você está tendo problemas é porque the_permalink () e o título() Não volte, eles ecoam. Em vez disso, use get_permalink () e $ post-> post_title. Lembrar get_permalink () requer o ID post ($ post-> id) como um parâmetro. Sei que isso é irritante e contra-intuitivo, mas é assim que o WordPress funciona (veja a subjetividade nos comentários dessa resposta.)
Isso explica por que o segundo exemplo funciona em sua pergunta inicial. Se você chama a função que imprime de dentro de uma string, o eco será lançado antes do final da string.
Então, é isso:
echo ' this should be before the link: '.the_permalink().' But it is not.';
não funcionará como esperado. Em vez disso, ele produzirá isto:
http://example.com this should be before the link: But it is not.
No PHP, você pode usar cotações únicas e duplas. Quando estou construindo strings com html, geralmente inicio a corda com uma única citação, dessa maneira, posso usar citações duplas compatíveis com HTML dentro da string sem escapar.
Então, para arredondá -lo, seria algo como:
echo '<li><a href="'.get_permalink($post->ID).'">'.$post->post_title.'</a></li>';
Ou, como você pediu originalmente, para simplesmente escapar deles, coloque uma barra de barriga antes da citação. Como assim (as citações únicas foram removidas)
echo "<li><a href=\"".get_permalink($post->ID)."\">".$post->post_title."</a></li>";
É claro que isso está assumindo que você está chamando isso de dentro do loop, caso contrário, um pouco mais do que isso seria necessário para obter a saída desejada.
printf( '<li><a href="%s">%s</a></li>', the_permalink(), the_title() );
Usando concatenação (quebras de linha não necessárias):
echo '<li><a href="'
. the_permalink()
. '">'
. the_title()
. '</a></li>';
echo "<li><a href=".the_permalink().">".the_title()."</a></li>";
Usar <?php the_title_attribute() ?>
. Ele exibe ou retorna o título da postagem atual. Ele duplica um pouco a funcionalidade do_title (), mas fornece uma versão 'limpa' do título, removendo tags HTML e convertendo certos caracteres (incluindo citações) em sua entidade de personagem equivalente.