-1

コードに問題があります。私はそれが引用に関連しているとかなり確信しています。実演させてください。

これは正常に機能します。

<?php if ( $is_latest_post ) echo '
hello world
'; ?>

これは機能しません:

<?php if ( $is_latest_post ) echo '
<a class="recent<?php $category = get_the_category(); echo $category[0]->category_nicename; ?>" href="<?php bloginfo('url'); ?>/<?php echo $category[0]->category_nicename; ?>"><?php echo $category[0]->cat_name; ?></a>
'; ?>

なぜそれが機能しないのですか?機能させるために何を変更できますか?コードの一部は、ステートメントa classの外側で完全に機能します。if ( $is_latest_post )PHPを使用したコーディングの学習を始めたばかりであることを理解してください。

4

4 に答える 4

6

文字列を一重引用符で囲むと、その文字列はリテラルとして扱われます。PHP は、その文字列にあるコードを解析しません。

必要なのは連結です。ドット演算子.を使用すると、複数の文字列を結合できます。

<?
if ( $is_latest_post ) {
    $category = get_the_category();
    echo '
    <a class="recent' . $category[0]->category_nicename . '" href="' . bloginfo('url') . '/'. $category[0]->category_nicename . '">' . $category[0]->cat_name . '</a>';
}
?>

多くのものを任意に連結できます。

<?
    $a = 1;
    $b = 2.0;
    $c = 'string';
    $d = function_call();

    $string = $a . $b . 'random text' . $c . $d;

?>
于 2012-09-06T18:21:37.850 に答える
1
    <?
    if ( $is_latest_post ) {
        $category = get_the_category();
        echo "<a class=\"recent" . $category[0]->category_nicename . "href=\"" . bloginfo('url') . "/". $category[0]->category_nicename. "\">" .$category[0]->cat_name."</a>";
}
    ?>

ケビンの答えに加えて、一重引用符ではなく二重引用符を使用し、必要に応じてエスケープすることを好みます。

于 2012-09-06T18:38:55.107 に答える
1

文字列リテラル内で php コードを実行することはできません。ブラウザーは、レンダリングするものが何もないため、空のタグを表示しません。

于 2012-09-06T18:39:24.100 に答える
0

初心者には一重引用符を使用しています。これはphpコードを評価することはありません-それを印刷するだけです。

編集:blogInfo()が文字列を返す($ somevarを返す)場合は、以下のコードを使用してください。

<?php

if ( $is_latest_post ) 
{
    $category = get_the_category(); 
    $template = '<a class="recent%s" href="%s/%s">%s</a>';
    $blogInfo = bloginfo('url');

    echo sprintf(
        $template,
        $category[0]->category_nicename,
        $bloginfo,
        $category[0]->category_nicename,
        $category[0]->cat_name
    );
}
?>

blogInfo()が画面にデータをエコーする場合(echo $ somevar)、以下のコードを使用します。

<?php

if ( $is_latest_post ) 
{
    $category = get_the_category(); 
    $prefix   = '<a class="recent%s" href="';
    $suffix   = '/%s">%s</a>';

    echo sprintf(
        $prefix,
        $category[0]->category_nicename,
    );

    bloginfo('url');

    echo sprintf(
        $suffix,
        $category[0]->category_nicename,
        $category[0]->cat_name
    );
}
?>

sprintfを使用すると、テンプレートに変数を「挿入」できます。

コードを再検討して、できるだけ単純にすることを強くお勧めします。プレゼンテーション層(つまりエコー)に多数の割り当てと関数呼び出しがあると、コードの理解と維持が非常に困難になります。

于 2012-09-06T18:33:24.373 に答える