我有一些代码,这里给我带来了一些麻烦。
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 :(得分: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'];