True/False用户字段的If语句不起作用


If statement for True/False user field wont work

我已经创建了一个ACF True/False字段,它附加到我的用户。这是一个访问级别的选项,所以如果该选项为True,他们将在菜单中看到一个链接,如果为false,他们将看到一个备用链接。

下面是代码我添加到我的functions.php,其中我创建了一个短代码:" customLink ",然后添加到我的菜单链接。下面是我到目前为止所做的,希望能展示我想做的事情。如果用户角色为my_custom_role,那么获取ACF值,如果为真,显示一个链接,如果为假,显示另一个链接。

add_shortcode('customLink', 'cm_link');
function cm_link($atts) {
$atts = shortcode_atts(array('title' => 'Custom Link', 'fallbackurl' => '#'), $atts, 'customLink');
$advcontent = get_field('acf_field', $current_user->ID);
        $user = wp_get_current_user();
        if (!empty($user->roles) && is_array($user->roles)) {
            foreach ( $user->roles as $role ) {
                if ($role=='my_custom_role') {
                    if ($advcontent == 'true') {
                        return "<a href='/my-link/'>".$atts['title']."</a>";
                    }
                    if ($advcontent == 'false') {
                        return "<a>".$atts['title']."</a>";
                    }
                }
            }
        }        
    }

我也试过下面的,但没有运气:

add_shortcode('customLink', 'cm_link');
function cm_link($atts) {
$atts = shortcode_atts(array('title' => 'Custom Link', 'fallbackurl' => '#'), $atts, 'customLink');
$advcontent = $_POST['acf']['field_58061ec5608bd'];
if ($advcontent == 'true' ) {
    return "<a href='/my-link'>".$atts['title']."</a>";
} else {
    return "<a>".$atts['title']."</a>";
    }      
}

true/false字段不会返回这样的值。如果被选中,它基本上会返回一个非空值,所以get_field是你所需要做的为了返回是否被选中。如果它被选中了,那么你只需执行

   if ($advcontent) {
             return "<a href='/my-link/'>".$atts['title']."</a>";
   }  else {
             return "<a>".$atts['title']."</a>";
   }

如果你想要一个真/假,在你的例子中,你可以使用一个单选按钮,值设置为真或假。