所以我尝试创建一个代码(在functions.php) 根据用户是登录还是注销(访问者),显示来自快捷码的小部件内容。我成功地为登录用户显示了内容,但没有为访问者显示,因为我需要在同一个小部件中发生所有事情。我尝试的方法是使用两种不同的短代码,如下所示:
[member_only]You are logged in.[/member_only]
[visitor_only]Login / Register[/visitor_only]
如果用户已登录,则会显示
[member_only]You are logged in.[/member_only]
如果用户已注销,它将显示
[visitor_only]Login / Register[/visitor_only]
我的代码:
/* BEGIN LOGIN BUTTON WIDGET SHORTCODE */
function member_only_shortcode($atts, $content = null)
{
if (is_user_logged_in() && !is_null($content) && !is_feed()) {
return $content;
}
}
add_shortcode(\'member_only\', \'member_only_shortcode\');
function visitor_only_shortcode($atts, $content = null)
{
if (is_user_logged_in() && !is_null($content) && !is_feed()) {
return "";
}
else {
return $content; }
}
add_shortcode(\'visitor_only\', \'visitor_only_shortcode\');
/* END LOGIN BUTTON WIDGET SHORTCODE */
最合适的回答,由SO网友:mozboz 整理而成
正如您在问题中所说的,代码对我来说很好,并且完全符合您的建议。
为了使其正常工作,我必须确保我的WP post编辑器处于代码编辑器模式,因为HTML或可视化编辑器可能会产生额外的问题:

这就是我在post editor中的测试代码在测试成功时的样子:
<!-- wp:html -->
<p>this is the content</p>
<p>more content
[member_only]You are logged in.[/member_only]
[visitor_only]Login / Register[/visitor_only]
</p>
<!-- /wp:html -->
您可以通过添加
! 对于第一个条件前面的“not”,则结构与第一个短代码相同,并且不需要
else:
function visitor_only_shortcode($atts, $content = null)
{
if (!is_user_logged_in() && !is_null($content) && !is_feed()) {
return $content;
}
}
add_shortcode(\'visitor_only\', \'visitor_only_shortcode\');