-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 回答