在php echo中使用php函数

Wil*_*lem 1 php wordpress

我正在尝试设置我的WordPress网站,以便在帖子/页面分配了特色图像时,此图像将用作页面横幅.但是,如果页面没有特色图像,则必须从六个可用选项中选择一个随机图像.我试过用下面的if语句:

<div id="slider">
    <div class="theslide">
        <?php
        if ( has_post_thumbnail() ) {
            the_post_thumbnail();
        }
        else {
            echo '<img src="/wp-content/uploads/link-ship-chandlers-banner-' . $random = rand(1,6); '.jpg">';
        }
        ?>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

它工作,但随机数函数没有正常关闭,所以代码最终看起来像这样:

<div id="slider">
<div class="theslide">
    <img src="/wp-content/uploads/link-ship-chandlers-banner-6  &lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
Run Code Online (Sandbox Code Playgroud)

而不是像这样:

<div id="slider">
<div class="theslide">
    <img src="/wp-content/uploads/link-ship-chandlers-banner-6.jpg">
</div>
</div>
Run Code Online (Sandbox Code Playgroud)

我假设我的语法在回声中使用php是错误的,但我尝试的一切都有相同的问题或导致php错误.

任何帮助,将不胜感激.

在此先感谢
威廉

Mik*_*lRo 5

如果您不需要知道选择了哪个标头,请执行以下操作:

echo '<img src="/wp-content/uploads/link-ship-chandlers-banner-' . rand(1,6) . '.jpg">';
Run Code Online (Sandbox Code Playgroud)

;在一行中使用多个是不行的(你实际上是在告诉php-interpreter这'.jpg">';是一个独立的命令 - 它什么也不做)

在这种情况下,$whatever = 'somethingecho语句中分配变量(即.)不会成为问题 - 尽管它实际上也没有任何好处.它的作用是创建一个新的变量$random,你可以在之后使用它来找出使用了哪个标题 - 但如果在echo语句中使用结果将是不可预测的(即在你的情况下变量将包含[random number].jpg,而不仅仅是随机数),而是将随机数分配给$random第一个,如下所示:

$random = rand(1,6);
echo '<img src="/wp-content/uploads/link-ship-chandlers-banner-' . $random . '.jpg">';
echo "We are using header {$random}, which was chosen at random.";
Run Code Online (Sandbox Code Playgroud)

请注意,上面的示例还显示了将变量包含在字符串中的另一种方法 - 使用双引号,您只需将变量直接写入字符串本身即可.这样做时,我建议总是使用{}包装变量,但在这种情况下不需要 - 这允许引用更复杂的变量(例如数组元素或对象属性),并且它使整个事物更具可读性.

其他(IMO可读性较差,可能更容易出错)的解决方案包括:

$random = rand(1,6);
echo "<img src=\"/wp-content/uploads/link-ship-chandlers-banner-$random.jpg\">";
echo sprintf('<img src="/wp-content/uploads/link-ship-chandlers-banner-%d.jpg">', $random);
printf('<img src="/wp-content/uploads/link-ship-chandlers-banner-%d.jpg">', $random);
Run Code Online (Sandbox Code Playgroud)