【问题标题】:PHP if/else get_field() with WordPressPHP if/else get_field() 与 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。谁能告诉我我做错了什么或者是否有更好的方法?

提前致谢,

【问题讨论】:

标签: php wordpress if-statement advanced-custom-fields


【解决方案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);
        猜你喜欢
        • 2020-12-01
        • 2023-02-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-05
        • 1970-01-01
        相关资源
        最近更新 更多