How to restrict biographical info length and content in WordPress?

In WordPress there is Biographical Info under Profile. I would like to prevent the user from exceeding a maximum length of 400 characters. Also, the number of hyperlinks he can place in the biographical info should not exceed three. How do I do that? I am very familiar with JQuery, if that helps in this question. I am just a newbie with WordPress.

Related posts

Leave a Reply

1 comment

  1. For the Javascript side, you should attach the necessary events to the description field. You can load your script via the wp_enqueue_script hook, and you probably want to do all this in your handler for admin_enqueue_scripts, where you check for the passed $hook_name, which in this case is the page name. It is user-edit.php when an admin edits a user, and profile.php when the user edits their own information (in which case IS_PROFILE_PAGE will also be defined as TRUE).

    add_action('admin_enqueue_scripts', 'add_description_validation_script');
    function add_description_validation_script($pagename) {
       if ($pagename == 'profile.php' || $pagename == 'user-edit.php') {
          wp_enqueue_script('description_validation', '/path/to/description_validation.js');
       }
    }
    

    For the PHP side, you need the pre_user_description filter. This gives you the current biographical text, and your function can change this and return something else.

    add_filter('pre_user_description', 'sanitize_description');
    function sanitize_description($description)
    {
       // Do stuff with the description
       return $description;
    }
    

    If, instead of silently changing the description, you want to show an error, you should look into the user_profile_update_errors hook. There you can validate the given data and return error messages to the user.

    You probably want to wrap this all up in a plugin, so you can keep the code together and easily enable or disable it. A plugin is just a file in the /wp-content/plugins/ directory, most likely in a subdirectory named after your plugin.