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的主要内容,如果未能解决你的问题,请参考以下文章