一直在阅读多个类似的问题并多次查看我的语法,但我无法弄清楚为什么我的PHP代码执行这两个条件。
如果字段不为空,我试图用自定义字段中的字符串替换元素的url。如果该字段为空,我想正常输出永久链接。会发生的是,当字段不为空时,代码会连接自定义字段中的字符串和永久链接。如果我删除字段中的字符串,它工作正常。
<div class="profile-content">
<a href="
<?php
if ( the_field('direct_resource_link') != '') {
the_field('direct_resource_link');
} else {
the_permalink($id);
} ?>
"><h5><?php the_title(); ?></h5></a>
<div class="profile-footer">
谢谢! 丹。
答案 0 :(得分:2)
在原始海报评论后编辑
我的初步评估(左下方供参考)是正确的。您正在使用print
/ echo
内容而不是return
内容的功能。你的if总是会被评估为false,因为你正在调用什么都不返回的函数;并且PHP认为没有任何东西和空字符串是一回事。
当字段为空时,你没有看到,因为the_field()
为空字段打印空字符串(或根本没有),即它没有修改由{{1}打印的值以任何方式/
根据ACF documentation,the_permalink()
附有get_field()
,它返回值而不是打印它。
您的代码应如下所示:
the_field()
您运行的功能<div class="profile-content">
<a href="
<?php
if ( get_field('direct_resource_link') ) {
the_field('direct_resource_link');
} else {
the_permalink($id);
} ?>
"><h5><?php the_title(); ?></h5></a>
<div class="profile-footer">
会将其返回值与&#39;&#39;如果该值为空,则运行the_field('direct_resource_link')
。
很难说出the_permalink($id);
是什么以及它应该做什么,但我想它是the_field()
的值,而不是print
。因此,如果字段为空,则不会输出任何内容,从而导致return
的纯粹运行。如果field不为空,则打印内容并不返回任何内容。由于没有任何东西等于空字符串,PHP继续the_permalink()
分支并调用else
来打印其他信息。
解决方案:修改the_permalink()
以返回值而不是打印它,或者创建将查询值并返回值的附加函数,并在if语句中使用该函数。
答案 1 :(得分:1)
Miroslaw Zalewski已经回答了您的问题here,因此这只是为了向您展示解决问题所需的代码类型:
function get_the_field($field) {
ob_start();
the_field($field);
return ob_get_clean();
}
此代码将启动输出缓冲区(将捕获所有回显数据),运行the_field
并返回(并删除)输出缓冲区(来自the_field
的回声数据)。这意味着您可以简单地执行以下操作:
...
<?php
$theField = get_the_field('direct_resource_link');
if ( $theField != '') {
echo $theField;
} else {
the_permalink($id);
}
?>
...
答案 2 :(得分:0)
这一切都可以简化。 the_field()
回应元值。您不希望这样......相反,您需要return
值来检查它,然后才能有条件地回显它。您可以使用get_field()
执行此操作。
在最简单的形式中,您的最终代码如下所示:
<a href="<?php get_field('direct_resource_link') ? the_field('direct_resource_link') : the_permalink($id); ?>">
<h5><?php the_title(); ?></h5>
</a>