1

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

    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**

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

4

5 回答 5

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;
于 2013-03-20T16:20:17.833 回答
2

你会在函数之外回显。经验法则,您永远不应该在函数内部回显,始终返回输出并回显返回集

所以你会做

<?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);
?>
于 2013-03-20T16:20:27.883 回答
2

这不仅仅是 PHP,而是函数如何工作的规则。一旦 areturn被击中,函数就完成了。即使后面有更多行也是如此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

于 2013-03-20T16:21:05.333 回答
0

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

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

如果您让我们更多地了解您实际想要做什么(以比“输出值”更抽象的方式),这可能会更有意义。

于 2013-03-20T16:20:43.510 回答
0

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

echo rcMetaDisplayNone($someParam);

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

$returned = rcMetaDisplayNone($someParam);
echo $returned['echoVal'];
于 2013-03-20T16:22:28.863 回答