【问题标题】:Disable profile editing for one single account禁用单个帐户的个人资料编辑
【发布时间】:2011-11-15 10:15:48
【问题描述】:

我在 wordpress 中创建了一个公共帐户,我将发送给 100 个用户。
所以登录将是:

用户名:public
密码:123example

我唯一想要的是隐藏此特定用户帐户的个人资料页面,这样他们就无法更改密码、电子邮件地址等。

如何做到这一点?也许改变一些php?

【问题讨论】:

    标签: php wordpress profile user-profile


    【解决方案1】:

    @aSeptik 答案的最后一部分可能对 WP 更友好一些。

    function force_profile_redirect() {
        global $pagenow, $current_user;
        get_currentuserinfo();
    
        if ($pagenow == 'profile.php' && $current_user->user_login == 'public') {
            wp_redirect(home_url());
        }   
    }
    add_action('admin_init', 'force_profile_redirect');
    

    【讨论】:

    • 脚本中有两件事是不需要的。一个是get_currentuserinfo();然后 $pagenow == 'profile.php'
    【解决方案2】:

    此脚本涵盖了问题的所有方面,请阅读代码 cmets 以获得进一步解释。

    <?php
    /**
     * this make sure the public user where redirected
     * to home instead of profile page
     */
    function redirect_user_to($redirect_to, $request, $user)
    {
      global $user;
      if ($user->user_login == 'public') {
        return home_url();
      }
      else {
        return home_url("/wp-admin/");
      }
    }
    add_filter('login_redirect', 'redirect_user_to', 10, 3);
    
    /**
     * this remove the profile links from
     * the top nav menu
     */
    function remove_edit_profile()
    {
      global $wp_admin_bar, $current_user;
      get_currentuserinfo();
      if ($current_user->user_login == 'public') {
        $wp_admin_bar->remove_menu('edit-profile');
        $wp_admin_bar->remove_menu('my-account-with-avatar');
        $wp_admin_bar->remove_menu('my-account');
      }
    }
    add_action('wp_before_admin_bar_render', 'remove_edit_profile', 0);
    
    /**
     * this remove the "Site Admin" link from
     * the WP meta widget, usually placed in
     * the side bar.
     */
    function my_unregister_widgets()
    {
      unregister_widget('WP_Widget_Meta');
      register_widget('MY_Widget_Meta');
    }
    add_action('widgets_init', 'my_unregister_widgets');
    
    class MY_Widget_Meta extends WP_Widget
    {
    
      function MY_Widget_Meta()
      {
        $widget_ops = array(
          'classname' => 'widget_meta',
          'description' => __("Log in/out, admin, feed and WordPress links"),
        );
        $this->WP_Widget('meta', __('Meta'), $widget_ops);
      }
    
      function widget($args, $instance)
      {
        extract($args);
        $title = apply_filters('widget_title', empty($instance['title']) ? __('Meta') : $instance['title']);
        echo $before_widget;
        if ($title) {
          echo $before_title.$title.$after_title;
        }
        ?>
                        <ul>
                        <?php
            global $current_user;
        get_currentuserinfo();
        if ($current_user->user_login == 'public') {
        }
        else {
          wp_register();
        }
        ?>
    <li>
    <?php wp_loginout();?>
    </li>
    <li>
    <a href="<?php bloginfo('rss2_url');?>" title="<?php echo esc_attr(__('Syndicate this site using RSS 2.0'));?>">
        <?php _e('Entries <abbr title="Really Simple Syndication">RSS</abbr>');?></a>
    </li>
    <li>
    <a href="<?php bloginfo('comments_rss2_url');?>" title="<?php echo esc_attr(__('The latest comments to all posts in RSS'));?>">
        <?php _e('Comments <abbr title="Really Simple Syndication">RSS</abbr>');?></a>
    </li>
    <li>
    <a href="http://wordpress.org/" title="<?php echo esc_attr(__('Powered by WordPress, state-of-the-art semantic personal publishing platform.'));?>">WordPress.org</a>
    </li>
    <?php wp_meta();?>
    </ul>
            <?php
                    echo $after_widget;
      }
    }
    
    /**
     * this prevent from non authorized user ( public )
     * to pointing to the profile page by writing into
     * the address bar.
     */
    function force_profile_redirect()
    {
      global $pagenow, $current_user;
      if (strtolower($current_user->user_login) == 'public') {
        wp_redirect(home_url());
      }
    }
    add_action('admin_init', 'force_profile_redirect');
    ?>
    

    【讨论】:

    • 像魅力一样工作!谢谢 aSeptik!
    • 这里的最后一个重定向部分可能对 WP 更友好一点,尽管性能下降非常轻微。 Arg,请参阅下面的代码以获取我的答案。
    【解决方案3】:

    如果用户 ID 为 [xyz],您需要修改您的个人资料页面代码,使其不显示可编辑区域,并且不运行“更新个人资料”操作。

    对于实际更新配置文件的页面,您可以在顶部放置类似

    // Change this line to match however you identify your logged-in user
    // And change the id number to the ID of the public user
    global $current_user;
    get_currentuserinfo();
    if ($current_user->ID == 1)
    {
        // Stop them seeing this page
        header('Location: index.php');
        // And for good measure
        die();
    }
    

    对于他们可以在提交表单之前更改个人资料字段的页面,您可以执行类似的操作

    // Change this line to match however you identify your logged-in user
    // And change the id number to the ID of the public user
    global $current_user;
    get_currentuserinfo();
    if ($current_user->ID == 1)
    {
        // Say no
        echo '<p>You cannot edit your profile on this account.</p>';
        // And for good measure
        die();
    }
    

    没有看到您的代码,很难更具体,但这应该可以在推送中起作用,即使它不是您想要的工作方式。

    【讨论】:

    • 谢谢乔。我不是真正的编码员,但我知道如何编辑代码。您能否在代码中描述如何更改它?非常感谢。
    • 我明天去看看,我现在gtg。非常感谢!
    • 对不起,我不能让它工作:-(我需要用上面的信息更新 profile.php 文件吗?并将数字 1 替换为 ID 号的 ID 号公众号对吧?
    • 更新了答案以在其中包含 Wordpress 代码 - 复制代码并将 1 替换为公共帐户的 ID。
    • 谢谢乔。我已将第一个代码放在 profile.php 中,但出现此错误:致命错误:在第 11 行的 /myurl/wp-admin/profile.php 中调用未定义函数 get_current_user_id()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-28
    相关资源
    最近更新 更多