Hide benutzerdefinierte Post-Typ-Feld von Autor?

Für eine Business-Association-Website habe ich eine Mitgliedschaftsdatenbank mit einem benutzerdefinierten Post-Typ erstellt. Unternehmen melden sich mit einem Online-Formular an, das einen benutzerdefinierten Post für dieses Unternehmen erstellt, und wenn der Administrator die Gebühren des neuen Mitglieds erhält, erstellt sie einen WordPress-Benutzer für dieses Geschäft und macht diesen Benutzer zum Autor des Posts. Auf diese Weise kann das Unternehmen die Geschäftsinformationen bei Bedarf aktualisieren.

Das Problem besteht darin, dass dieses System es dem Unternehmen ermöglicht, auch einige Felder zu aktualisieren, die nicht wirklich aktualisiert werden können, beispielsweise das Ablaufdatum. Also, was ich tun möchte, ist entweder diese Felder zu verbergen oder sie unecht zu machen, wenn der Autor die Beiträge bearbeitet, aber bearbeitbar, wenn ein WP-Administrator den Beitrag bearbeitet.

Kennt jemand einen Weg, dies zu tun?

Solutions Collecting From Web of "Hide benutzerdefinierte Post-Typ-Feld von Autor?"

Der einfachste Weg, dies zu tun, wäre, die Fähigkeiten mit current_user_can zu überprüfen, bevor das Feld current_user_can wird.

Zum Beispiel hat die Administratorrolle die Fähigkeit manage_options die Ihre neu erstellten Benutzer nicht haben. So können Sie so etwas tun:

 < ?php // wherever your fields are... if(current_user_can('manage_options')) { // display your fields here. } 

Oder wenn Sie auf der Seite des benutzerdefinierten Post-Typs, die Sie nicht anzeigen möchten, eine vollständige Metabox haben, können Sie die functionen überprüfen, bevor Sie sie hinzufügen.

 < ?php add_action('add_meta_boxes_{YOUR_POST_TYPE}', 'wpse72883_add_box'); function wpse72883_add_box() { if(!current_user_can('manage_options')) return; // current user isn't an admin, bail // add the meta box here } 

Es könnte auch nützlich sein, eine eigene Fähigkeit hinzuzufügen, um eine eingebaute zu überprüfen und nicht zu verwenden. Um Ihrem Administrator die Rolle edit_business_details ...

 < ?php $role = get_role('administrator'); if($role) $role->add_cap('edit_business_details'); 

Das muss nur einmal passieren - zum Beispiel bei der Plugin-Aktivierung.

 < ?php // some plugin file. register_activation_hook(__FILE__, 'wpse72883_activate'); function wpse72883_activate() { $role = get_role('administrator'); if($role) $role->add_cap('edit_business_details'); } 

Sie können dann genau wie manage_options nach dieser function manage_options .

 < ?php // wherever your fields are... if(current_user_can('edit_business_details')) { // display your fields here. }