如何限制对页面的特定部分的访问,而不仅仅是页面本身?

时间:2014-08-07 作者:johnny

我查看了WP的网站,没有看到我可以使用的角色。我可以自己创建,但如何限制页面本身的内容?一些私人信息和一些公共信息可以在同一页上。我可以创建两个页面,但我不知道WP是否有办法做到这一点,也不知道我可以在哪里构建安全机制来实现这一点。

如何限制对页面特定部分的访问,而不仅仅是页面本身?

3 个回复
SO网友:Welcher

如果您想限制某个功能(内置或自定义),可以使用current_user_can() 并通过相应的capability.

if( current_user_can(\'manage_options\') ) {
    echo "Hi there user who can manage options\';
}
请记住,帖子或页面内容是一块,您需要做一些更为自定义的事情来隐藏某些段落等。

在这种情况下,您可能需要一个短代码来包装要隐藏的内容-实际上,对于一个很可能已经存在的插件来说,这是一个好主意:)

编辑:

我很快就写了这个。需要一些测试。cap是可选的,如果未设置,则默认为必须登录才能查看内容。

class Hide_Content {

    function render_shortcode( $atts, $content = "" ) {
        //get the atts passed to the shortcode
        $atts = shortcode_atts( array(
            \'cap\' => false,
        ), $atts );

        //we need to be logged in either way
        if( is_user_logged_in() ) {

            // there is a cap set and the user can do it - we\'re good
            if( $atts[\'cap\'] && current_user_can( $atts[\'cap\']) ) {
                return "content {$atts[\'cap\']} = $content";
            }else{

                //if there is no cap set - we\'ll just show it to logged in users
                return \'Logged in only :: \' . $content ;
            }
        }
    }
}
add_shortcode( \'hide_content\', array( \'Hide_Content\', \'render_shortcode\' ) );

//useage
[hide_content cap="manage_options"]This is hidden from non-logged in and users who can\'t manage options[/hide_content]

SO网友:gdaniel

虽然这意味着要阻止整个页面,但它可以用来阻止页面的一部分。

<?php if (post_password_required()):?>

<!-- Content that\'s not public -->

<?php endif;?>
然后,您只需要对该页面进行密码保护。为了使其正常工作,该页面最好有自己的模板,或者先有条件检查您所在的页面,然后决定是否阻止内容。

SO网友:Nicolai Grossherr

is_user_logged_in() - codex页面示例:

if ( is_user_logged_in() ) {
    echo \'Welcome, registered user!\';
} else {
    echo \'Welcome, visitor!\';
}

结束

相关推荐

WordPress Ajax Data Security

我知道nonce可以检查意图,但如果我可以用它们来限制数据库读取,那就没有任何意义了?我的意思是,我正在使用AJAX从数据库中获取记录,但我不希望任何人通过其他方式获得该数据(向该数据库发布请求admin-ajax.php 第页)。例如,在我的AJAX处理程序中,我有这么多的工作(我正在发送$myid 以及AJAX调用中的操作):$myid = 5575; $query = \"SELECT `id` FROM table WHERE `user_id` = $myid;\"; $data