2013-03-20 63 views
1

我有一些代码,在这里,这给我一些麻烦。在if语句返回后使用回显

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

这是我使用的是短代码,所以我不知道我能说的输出函数外部的代码。

+0

寻址更新:我下面说的仍然是你永远不会在功能上回声。在你的情况下,你想要做的就是将你的静态字符串附加到返回,所以它会像'返回whatever()。“我的静态链接在这里”;' – Dave 2013-03-20 16:31:59

+0

太棒了。谨慎附加到你的答案? – 2013-03-20 16:33:11

回答

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

@JordanThornquest完成。祝你好运! :) – Eric 2013-03-20 16:35:06

+0

它的工作!现在,一个简单的问题是:我将如何将登录链接移动到新行? **编辑**:啊,等等,@ UnholyRanger明白了。没关系。 – 2013-03-20 16:42:02

+0

@JordanThornquest除非你扩展表达式,否则你将无法做到。例如,'$ returnValue = ...; $ returnValue。= $ login_link;返回$ returnValue;' – Eric 2013-03-20 16:45:01

2

你将回声功能之外。经验法则,你不应该呼应里面的函数总是返回输出和回声返回设置

所以,你会怎么做

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

echo $echovar; 

?> 

UPDATE使用完整的代码

<?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); 
?> 
+0

@JordanThornquest使用您的完整代码更新了答案 – Dave 2013-03-20 16:35:41

+0

谢谢,@Dave。你的回答是完全正确的,就像埃里克的回答一样。他在更新答案时简单快一点。你们俩都帮了很多忙! – 2013-03-20 16:37:06

+1

只要你得到你的答案,也许没有问题,也许在途中学到了一点:) – Dave 2013-03-20 16:38:32

0

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

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

如果你给了我们更多关于你实际想要做什么的想法(用比“输出一个值”更抽象的方式),可能会更有意义。

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

+0

谢谢@UnholyRanger!您的编辑帮助我后续的问题涉及到格式化我的连接。 – 2013-03-20 16:46:40

0

你不能。返回将完成该功能。 您可以返回您需要什么,然后用回声,你调用该函数:

echo rcMetaDisplayNone($someParam); 

,如果你需要更多的可以返回walues的阵列。

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