PHP / Wordpress:IF / ELSE执行两个条件

时间:2015-09-20 20:54:27

标签: php wordpress

一直在阅读多个类似的问题并多次查看我的语法,但我无法弄清楚为什么我的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">

谢谢! 丹。

3 个答案:

答案 0 :(得分:2)

在原始海报评论后编辑

我的初步评估(左下方供参考)是正确的。您正在使用print / echo内容而不是return内容的功能。你的if总是会被评估为false,因为你正在调用什么都不返回的函数;并且PHP认为没有任何东西和空字符串是一回事。

当字段为空时,你没有看到,因为the_field()为空字段打印空字符串(或根本没有),即它没有修改由{{1}打印的值以任何方式/

根据ACF documentationthe_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>