Support

Account

Home Forums Feature Requests Restrict Relationship Fields Choices to Current User

Solved

Restrict Relationship Fields Choices to Current User

  • To build multi-user webapps with acf_form() there is a need of an option to restrict the relationship fields posts/choices to the current logged-in user.

  • This solves it.
    http://www.advancedcustomfields.com/resources/acf-fields-relationship-query/

    function my_relationship_query( $args, $field, $post ) {
        // get posts for current logged in user
        $args['author'] = get_current_user_id();
    
        return $args;
    }
    add_filter('acf/fields/relationship/query/key=<field_key>', 'my_relationship_query', 10, 3);
  • should this go in functions.php? I add the field_key and could not get it to work (shows all posts, or CPT)

    I also tried name with similar results.

    I hate writing this because I know this isn’t a lot to go on. Any idea of what I could look at?

    After attempting to use more basic functions, I can’t seem to use any of them. if I use the_field the page crashes immediately as it’s called. I’m sure I’m missing something very basic.

  • Hi folk,
    I had the quite similar issue. I needed also to grant a full access to “editor” & “administrator”.
    Here is the code inserted in the functions.php file

    function modify_field( $args, $field,$post) {
    	if( !check_user_role(array('editor','administrator')) ){
    		$args['author'] = get_current_user_id();
    	}
        return $args;
    }
    
    	add_filter( 'acf/fields/post_object/query/key=field_XXX..XXX', 'modify_field', 10, 3 );
    
    /* @src & @credits https://wp-mix.com/wordpress-check-user-roles/ */
    function check_user_role($roles, $user_id = null) {
    	if ($user_id) $user = get_userdata($user_id);
    	else $user = wp_get_current_user();
    	if (empty($user)) return false;
    	
    	foreach ($user->roles as $role) {
    		if (in_array($role, $roles)) {
    			return true;
    		}
    	}
    	return false;
    }
  • use “name” instead of “key” like this
    add_filter(‘acf/fields/relationship/query/name=<field_key>’, ‘my_relationship_query’, 10, 3);

  • @johann @mica

    Thank you i searched a lot finally found how to do it!

    Is there a chance to additionally modify the function to only return the posts which are publish? So a combination of only posts of current author id and only published posts of that author?

    thanks

Viewing 6 posts - 1 through 6 (of 6 total)

You must be logged in to reply to this topic.