5

エコーされた html 文字列で 2 つの関数呼び出しから返された値を使用したいと考えています。

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

以下はうまくいきます:

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

...しかし、それらすべてを 1 つのステートメントで取得するにはどうすればよいでしょうか?

4

6 に答える 6

10

問題が発生している理由は、the_permalink()the_title()が返されず、エコーするためです。代わりにget_permalink()$post->post_titleを使用してください。get_permalink ()にはパラメータとして投稿 ID ($post->ID) が必要です。これがいらいらし、直感に反することはわかっていますが、それがWordpressの仕組みです(この回答へのコメントの主観性を参照してください.)

これは、最初の質問で 2 番目の例が機能する理由を説明しています。文字列内から出力する関数を呼び出すと、エコーは文字列の末尾の前に出力されます。

したがって、この:

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>";

もちろん、これはloop 内からこれを呼び出していることを前提としています。それ以外の場合は、目的の出力を得るためにこれよりも少し多くのことが必要になります。

于 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 に答える