Wp benutzerdefinierte benutzerdefinierte Post-function funktioniert nicht zu sammeln

Ich versuche, einen benutzerdefinierten Beitragstyp von einer Gruppe von Personen (dh der Benutzerabteilung) bearbeitbar zu machen, anstatt nur den Autor. Ich möchte nicht zulassen, dass sie Beiträge bearbeiten, die von Personen anderer Gruppen (Abteilungen) erstellt wurden. Um dieses Problem zu map_meta_cap , verwende ich den map_meta_cap Filter, um die benutzerdefinierten functionen zuzuordnen. Was eigentlich gut funktioniert. Wenn ich es wie user_can( $user_id_of_who_is_editing, 'edit_post', $post_id ) überprüfe: user_can( $user_id_of_who_is_editing, 'edit_post', $post_id ) für Benutzer derselben Abteilung true zurück.

Nun, wenn der Nicht-Besitzer-Benutzer, der zu derselben Abteilung gehört, dieser Fehler angezeigt wird:

Sie dürfen diesen Beitrag nicht bearbeiten.

Wenn wordpress current_user_can( 'edit_post', $post_id ) nicht überprüft current_user_can( 'edit_post', $post_id ) , wie überprüft es und wie kann ich es umgehen?

Map-Metacap-Filter:

 add_filter( 'map_meta_cap', function( $caps, $cap, $user_id, $args ) { global $dept_based_cap_post_types; if( isset( $args[0] ) ){ $post = get_post( $args[0] ); if( isset( $post->post_type ) && in_array( $post->post_type, $dept_based_cap_post_types ) ){ $edit = "edit_$post->post_type"; $delete = "delete_$post->post_type"; $read = "read_$post->post_type"; $post_belongs_to_users_department = lu_post_under_users_dept( $user_id, $post->ID ); } else { return $caps; } } else { return $caps; } /* If editing, deleting, or reading a post, get the post and post type object. */ if ( $edit == $cap || $delete == $cap || $read == $cap ) { $post_type = get_post_type_object( $post->post_type ); /* Set an empty array for the caps. */ $caps = array(); } /* If editing a post, assign the required capability. */ if ( $edit == $cap ) { if ( $post_belongs_to_users_department || ( $user_id == $post->post_author && 'draft' == $post->post_status ) ) $caps[] = $post_type->cap->edit_posts; else $caps[] = $post_type->cap->edit_others_posts; } /* If deleting a post, assign the required capability. */ elseif ( $delete == $cap ) { if ( $post_belongs_to_users_department || ( $user_id == $post->post_author && 'draft' == $post->post_status ) ) $caps[] = $post_type->cap->delete_posts; else $caps[] = $post_type->cap->delete_others_posts; } /* If reading a private post, assign the required capability. */ elseif ( $read == $cap ) { if ( 'private' != $post->post_status ) $caps[] = 'read'; elseif ( $post_belongs_to_users_department || ( $user_id == $post->post_author && 'draft' == $post->post_status ) ) $caps[] = 'read'; else $caps[] = $post_type->cap->read_private_posts; } return $caps; }, 10, 4 ); 

Code für benutzerdefinierte Post-Typ-Registrierung:

 $capabilities = array( 'edit_post' => 'edit_registration', 'read_post' => 'read_registration', 'delete_post' => 'delete_registration', 'delete_posts' => 'delete_registrations', 'delete_others_posts' => 'delete_others_registrations', 'edit_posts' => 'edit_registrations', 'edit_others_posts' => 'edit_others_registrations', 'publish_posts' => 'publish_registrations', 'read_private_posts' => 'read_private_registrations' ); $args = array( 'labels' => $labels, 'public' => false, 'publicly_queryable' => false, 'show_ui' => current_user_can( 'edit_programs' ) ? 'edit.php?post_type=program' : true, 'query_var' => false, 'capabilities' => $capabilities, 'has_archive' => false, 'hierarchical' => false, 'menu_icon' => 'dashicons-clipboard', 'supports' => array( null ) // Array must contain a value to remove the default fields ); register_post_type( 'registration', $args ); 

Solutions Collecting From Web of "Wp benutzerdefinierte benutzerdefinierte Post-function funktioniert nicht zu sammeln"

Es scheint, dass wordpress die Fähigkeit edit_post beim Speichern nicht überprüft. Stattdessen wird nach dem Autor gesucht. Also benutzte ich einen Hack, um die Autor-ID zu überschreiben. Also denkt WordPress, dass Sie den Autor ändern und arbeiten, indem Sie zuerst den Autor zu Ihrer eigenen ID ändern. Sie können diesen Code in Ihrer functions.php hinzufügen, um dieses Problem zu beheben.

 function your_function() { echo ' '; } add_action( 'wp_footer', 'your_function' );