Much like the username is locked down and cannot be changed once it has been registered, I would like to lock down additional fields I have created with Advanced Custom Fields like the person's cellphone number which is vital for us to have because it is linked to a security gate entrance and should not be changed

What I need to be able to have happen is that once someone completes a field and submits their new information, that field needs to be locked down when the page reloads and only an administrator can change it.

I know this can be done with javascript but I want to be sure that someone who knows how to use the Developer Toolbar is not able to change the field attribute and submit or delete content. Or if someone just happens to have JS switched off, they would be able to change this.

Is there a WordPress hook that exists to do something like this please? Here's what I have found, none of which supports my solution.

  1. http://wordpress.org/support/topic/how-to-disable-profile-fields
  2. http://adambrown.info/p/wp_hooks/version/3.6 (to see if a hook like this exists)


I am already making use of the jQuery to check the fields that need to stay locked and disabling them but what I prefer to know is if there are any hooks one could use to do this in WP due to the fact that someone might be know how to bypass this with enough knowledge of Dev Toolbar? I have also done a ton of searches and nothing as specific as what I am trying to do here.

Many thanks

  • This looks like a plugin specific question so you better ask the author. Commented Nov 7, 2013 at 8:43
  • I've already checked the plugin's site as well as asked the question there but had no responses yet. Commented Nov 7, 2013 at 13:12

1 Answer 1


I think this can handle, what you want:

Here is the filter documentation http://www.advancedcustomfields.com/resources/filters/acf_update_value/

You can choose whatever filter option you want, but if you use onw of the first two

add_filter('acf/update_value', 'mr_acf_prevent_update', 10, 3);
add_filter('acf/update_value/type=text', 'mr_acf_prevent_update', 10, 3);

You'll have to write more conditionals on the callback function.

If you use one of these two, you don't need

// example with the field name
add_filter('acf/update_value/name=cell-phone', 'mr_acf_prevent_update', 10, 3);
// example with the field key
add_filter('acf/update_value/key=field_527bb4af7edde', 'my_acf_load_field', 10, 3);

and the callback that does the job

function mr_acf_prevent_update( $value, $post_id, $field ) {

    if ( current_user_can( 'manage_options' ) || get_field( $field['name'], $post_id ) == ''  ) {

        return $value;

    } else {
        return get_field( $field['name'], $post_id );


It can be improved, it's ugly, but it works!

  • Thanks Marcos, I will give this a spin and see what I can come up with ;) Commented Nov 7, 2013 at 20:00

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.