在if语句中返回后使用echo

时间:2013-03-20 16:18:21

标签: php wordpress

我有一些代码,这里给我带来了一些麻烦。

    function rcMetaDisplayNone($content)
    {
        global $rc_options;
        global $post;
        global $login_button;

    $rcUserLevel = get_post_meta($post->ID, 'rcUserLevel', true);

    if (!current_user_can('read') && ($rcUserLevel == 'Administrator' || $rcUserLevel == 'Editor' || $rcUserLevel == 'Author' || $rcUserLevel == 'Contributor' || $rcUserLevel == 'Subscriber'))
    {
        $userLevelMessage = strtolower($rcUserLevel);
        return do_shortcode( $rc_options[$userLevelMessage . '_message'] );
    }
    else
    {
        // return the content unfilitered
        return $content;
    }
}

我试图征服的任务是,如何将echo附加到if语句的末尾,如下所示:

return do_shortcode( $rc_options[$userLevelMessage . '_message'] );
echo $login_link;

现在,根据 PHP 的工作原理,我明白这不应该有效。我的问题是:我将如何使其发挥作用?是否有功能或解决方法可以让我这样做?

我是PHP的初学者,所以如果解决方案很明显,我会道歉。

**更新**

神圣的回答,蝙蝠侠!伙计们,感谢您的帮助。我应该澄清一下。我已更新代码以包含整个功能。

$login_link代码基本上是输出链接,允许用户登录(具有讽刺意义)。但是,return代码是输出消息,在我使用的 WordPress插件的上下文中,表示用户没有权限访问页面上的内容。

看到这里的困境?我正在尝试在此消息中附加登录链接。它不仅仅是一个空的返回值,而是输出到浏览器的实际消息

**更新2 **

这是我正在使用的短代码,所以我不确定我是否可以在函数之外输出所述代码。

5 个答案:

答案 0 :(得分:3)

您无法在return语句后执行代码(在函数返回中)。

如果我正确理解您的问题(执行do_shortcode()然后显示$login_link的值,然后返回),则:存储返回值,调用echo,最后返回存储的值。

$returnValue = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
echo $login_link;
return $returnValue;

修改:根据您的更新,我相信您正在寻找以下内容:

$returnValue = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
return $returnValue . $login_link;

答案 1 :(得分:2)

你会在函数之外回声。经验法则你永远不应该回复INSIDE函数总是返回输出并回显返回集

所以你要做

<?php 
$echovar = rcMetaDisplayNone($content);

echo $echovar;

?>

使用您的完整代码更新

<?php

function rcMetaDisplayNone($content)
    {
        global $rc_options;
        global $post;
        global $login_button;

    $rcUserLevel = get_post_meta($post->ID, 'rcUserLevel', true);
    $staticstring = "<a href=\"blah.php\">THIS IS MY STATIC STRING IT CAN CONTAIN ANYTHING</a>";

    if (!current_user_can('read') && ($rcUserLevel == 'Administrator' || $rcUserLevel == 'Editor' || $rcUserLevel == 'Author' || $rcUserLevel == 'Contributor' || $rcUserLevel == 'Subscriber'))
    {
        $userLevelMessage = strtolower($rcUserLevel);
        $output = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
    }
    else
    {
        // return the content unfilitered
        $output = $content;
    }
    return $output.$staticstring;
}

echo rcMetaDisplayNone($content);
?>

答案 2 :(得分:2)

这不仅仅是PHP,而是功能如何运作的规则。一旦return被击中,该功能就完成了。即使return之后有更多行,

也是如此
Function test(){
  echo "test";
  return;
  echo "done";
}

这只会在返回命中后输出"test"。如果你想做任何事情,你需要在一个函数结束之前实现它,而不是在它完成之后。

echo $login_link;
return do_shortcode( $rc_options[$userLevelMessage . '_message'] );

所以你可以在返回之前回显变量。

修改 因为您要查找的是在do_shortcode之后添加到消息,您可以在返回之前连接字符串。像这样:

$shortcode = do_shortcode( $rc_options[$userLevelMessage . '_message'] );
return $shortcode."possible HTML".$login_link;

“可能的HTML”可以是您可能希望的任何字符串或格式。研究PHP String Concatenation

答案 3 :(得分:0)

没有意义,你可以将它移到上面 return

echo $login_link;
return do_shortcode( $rc_options[$userLevelMessage . '_message'] );

如果你让我们更多地了解你真正想要做的事情(以一种不那么抽象的方式而不是“输出一个价值”),可能会更有意义。

答案 4 :(得分:0)

你做不到。返回将完成该功能。 您可以返回所需内容,然后在调用函数时使用echo:

echo rcMetaDisplayNone($someParam);

如果您需要更多,您可以返回数组。

$returned = rcMetaDisplayNone($someParam);
echo $returned['echoVal'];