PHP if/else get_field() 与 WordPress

Posted

技术标签:

【中文标题】PHP if/else get_field() 与 WordPress【英文标题】:PHP if/else get_field() with WordPress 【发布时间】:2015-08-15 04:52:04 【问题描述】:

我正在尝试在 WP 后端为客户提供一些选项,以自定义显示在其网站主页上的轮播。我正在使用高级自定义字段来处理从客户端获取输入。我想给他们两个选择:

选项 #1) 允许客户端插入要显示的文本字符串 ('carousel_title_text')

选项 #2) 允许客户端上传要显示的徽标 ('carousel_logo')

我希望代码检查标题文本,如果没有,则显示徽标。我还没有决定如果两个字段都为空会发生什么。无论如何,这是我想出的:

<?
if( get_field('carousel_title_text') )  ?>
  <h2 class="promo"><?php the_field('carousel_title_text');?></h2>
<?  elseif( get_field('carousel_logo') ) 
  the_field('carousel_logo');

?>

只要有输入,'carousel_title_text' 就会显示,但是当它为空且 'carousel_logo' 不是时,它不会正确输出 logo。谁能告诉我我做错了什么或者是否有更好的方法?

提前致谢,

【问题讨论】:

评论不用于扩展讨论;这个对话是moved to chat。 【参考方案1】:

这听起来像是与徽标的设置有关,我假设它是一个图像字段?在 Wordpress 管理员中,该字段下将有一个名为“返回值”的设置,可以设置为“数组”或“URL”。

如果设置为“数组”,则需要将该数组存储到变量中,然后在标记中访问其属性,如下所示:

<?php

    if ( get_field('carousel_title_text') )  ?>
        <h2 class="promo"><?php the_field('carousel_title_text'); ?></h2>
    <?php  else
        $carousel_logo = get_field('carousel_logo');
        if ( $carousel_logo )  ?>
            <img src="<?php echo $carousel_logo['url']; ?>" />
        <?php  else  ?>
            <h2 class="promo">Default slider title </h2>
        <?php 
    

?>

或者,您可以将您的字段设置为仅返回图像 URL,然后像这样访问它:

<?php

    if ( get_field('carousel_title_text' )  ?>
        <h2 class="promo"><?php the_field('carousel_title_text'); ?></h2>
    <?php  elseif ( $carousel_logo )  ?>
        <img src="<?php the_field('carousel_logo'); ?>" />
    <?php  else  ?>
        <h2 class="promo">Default slider title </h2>
    <?php 

?>

ACF's documentation on the Image field 将提供更多相关信息。

【讨论】:

【参考方案2】:

如果我猜对了,您的问题不在于If/Else 语句,而在于徽标字段。我假设您在 ACF 中将此字段 (carousel_logo) 正确配置为 Image

Image 字段提供三种不同的返回值可能性:

注意:在某些版本的 ACF 中,您会发现 Image Object 而不是 Image Array,但它们在概念上是相同的。

如果您只在模板中使用the_field('carousel_logo');,它们都不会正确显示您的图像。那么,如何获得您的徽标?

如果您想要最简单的解决方案,请为您的徽标字段选择 图像 URL 作为 返回值,然后像这样打印:

<?
$title = get_field('carousel_title_text');
$logo = get_field('carousel_logo');

if (!empty($title)) : ?>
    <h2 class="promo"><?= $title ?></h2>
<?php elseif (!empty($logo)) : ?>
    <img class="logo" src="<?= $logo ?>">
<?php else: ?>
    <!-- No title, no logo -->
<?php endif ?>

我对你的代码做了一点改动,但基本上这里的关键是:

<img class="logo" src="<?= $logo ?>">

这个,或等效的:

<img class="logo" src="<?php echo $logo ?>">

应该在缺少标题时显示您的图片。


奖励:如果您要处理不同的缩略图大小,我建议您使用 Image Array 作为返回值。在这种情况下,$logo 将是一个包含所有信息(例如大小、所有缩略图 URL、标题等)的数组

用途:

<img class="logo" src="<?= $logo['sizes']['medium'] ?>">

其中'medium' 是您的thumbnail size 标签以输出它。

另外,请查看ACF's Image 字段类型的官方文档以获取更多示例和进一步解释。

【讨论】:

【参考方案3】:

试试:

<?php 
 $output = (get_field('carousel_title_text')) ? get_field('carousel_title_text'):get_field('carousel_logo');

 echo $output;
?>

【讨论】:

【参考方案4】:

您在最后设置了 else 条件,如果客户端不输入文本或徽标,则默认文本将显示。 您将使用以下代码。

<?php  
 if( get_field('carousel_title_text') )  ?>
  <h2 class="promo"><?php the_field('carousel_title_text');?></h2>
<?php  elseif( get_field('carousel_logo') ) 
  the_field('carousel_logo');
else 
  echo " <h2 class="promo"> Default slider title </h2>"
?>

它是默认标题客户端表明他没有输入滑块文本

希望它对你有用。

【讨论】:

不幸的是,这不起作用。这会产生一个几乎空白的屏幕。 试试这个老兄。 $field = get_field($field_name, $post_id, $format_value);

以上是关于PHP if/else get_field() 与 WordPress的主要内容,如果未能解决你的问题,请参考以下文章

在PLESK计划任务上取消定义函数get_field()

PHP if...else...elseif 语句

php PHP if else阻止

php PHP If / Else Statement

PHP控制语句之“if...else”语句

PHP - If/else, for, foreach, while - 没有花括号?