プロが教える店舗&オフィスのセキュリティ対策術

echoを使ってできないことがあり、自力解決ができないでいます。
お分かりになる方いらっしゃれば解決方法をご教授願います。

【やりたいこと】
WordPressでphpをカスタマイズしています。
その中で下記のことをやろうとしています。

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


【期待する結果】
下記のような感じです。WordPressの関数?の戻り値が展開されて
<a href="aaa.html">bbb</>

要はリンクが張られている状態を作りたいのですが、現在の結果は下記のようになります。
aaa.htmlbbb

とリンクが張られずにそのまま文字列が表示されてしまいます。
Fifrebugで確認すると、なぜか上記文字列の下に
<a href=""></a>
と入れられているのがわかりました。


試しにWordPressの関数の戻り値を使わず下記(ハードコード)にすると
echo '<a href="' . 'zzz.html' . '">' . 'test' . '</a>';

ただしくリンクが張られています。

また関連するかはわかりませんが、戻り値の扱い方がおかしいのかも判断して
下記のようにしました。
$title = the_title();

変数に入れるつもりが、なぜかこれが、echoがされた状態になり、(上記のコードだけで)プレビュー画面でタイトルが表示されています。
他にはヒアドキュメントでやっても同じような結果となり、原因がわかりません。

もともとは
<a href="<?php the_permalink( ); ?>"><?php the_title(); ?></a>
で書いてあったコード(正常に動作)をIF文などの条件が必要になり、(上記の書き方では私の知識ではわかりづらく)
<?php
?>
のようなブロック単位?に書き直しているタイミングで発生しました。

当方はPerl等メインでやっていますが、PHPは初心者です。ネットで検索したサンプルなどを手直しして使っているレベルです。

識者の方お願いします。

A 回答 (1件)

the_permalink() は「記事のパーマリンクを出力」する関数です。

呼び出し側にパーマリンクの文字列を返す関数ではありません(いわゆるfunctionではなくprocedure的な用途です)。

http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3% …

the_title() も同様です。


なので、最初にあった

<a href="<?php the_permalink( ); ?>"><?php the_title(); ?></a>

のような記述になります。どうしてもechoしたければ(全部phpモードで書きたければ)

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

のようになります。
    • good
    • 0
この回答へのお礼

shimixさん

どうもありがとうございました。
まさに求めている回答でした!謎が解けました。

仰る通りリンク先を見ると、WordPress側の出力は「画面に出力までする」みたいな感じのプロシージャ的な扱いになっているよですね。
WordPressを使う限り、今回の理解は結構大きいように思えます。
貴重な情報ありがとうございました。

お礼日時:2012/11/08 10:31

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!