Einem Benutzer das Posten in bestimmten Kategorien verbieten

Ich schreibe ein Plugin, das es dem Benutzer verbietet, in bestimmten Kategorien zu posten. Ich versuche, dem Benutzer eine Fehlermeldung anzuzeigen, wenn er versucht, in der eingeschränkten Kategorie zu posten, und möchte auch, dass WP das nicht in der database veröffentlichen soll. Ich versuche dies mit dem save_post-Hook zu machen. Wie auch immer, ich stehe fest, wie ich WordPress sagen soll, diesen Beitrag nicht zu speichern.

function buc_validatePostUpdate($post_id) { global $wpdb, $user_ID; $buc_values = get_user_meta($user_ID,'buc_user_cat'); $buc_final = explode(',', $buc_values[0]); $post_cat = get_the_category($post_id); foreach($post_cat as $cat) { if(in_array( $cat->term_id, $buc_final ) !== FALSE) { } else { //At this place, I need to tell WordPress not to update the post and return back. add_action( 'admin_notices', 'custom_error_notice' ); return false; } } } add_action( 'save_post', 'buc_validatePostUpdate' ); function custom_error_notice(){ echo ''; remove_action( 'admin_notices', 'custom_error_notice' ); } 

BEARBEITEN 1

Während ich weiter suchte, bekam ich diesen Link bei WA . Ich bin mir nicht sicher, ob ich etwas Ähnliches wie in dieser Frage erwähnt umsetzen muss.

Jeder Rat würde sehr geschätzt werden. Danke im Voraus.

Solutions Collecting From Web of "Einem Benutzer das Posten in bestimmten Kategorien verbieten"

save_post ist zu spät. Sehen Sie sich die Quelle an und Sie können sehen, dass der Post bereits gespeichert wurde, als dieser Hook ausgetriggers wurde. Sie müssen den process weit vor diesem Haken unterbrechen, wenn Sie das Speichern verhindern wollen.

Ich denke, ich würde mich auf so etwas stützen:

 add_filter( 'post_updated_messages', function($messages) { $messages['post'][11] = 'This is my new message'; return $messages; } ); add_action( 'load-post.php', function () { // summarily kill submission // and redirect back to edit page // purely to demonstrate the process $redir = admin_url('post.php?action=edit&message=11'); if ( isset($_POST['post_ID']) && ctype_digit($_POST['post_ID']) ) { $redir .= '&post='.(int)$_POST['post_ID']; // var_dump($redir); die; wp_redirect($redir); die(); } } ); 

Ihr buc_validatePostUpdate Code würde in der anonymen function mit dem // summarily kill submission buc_validatePostUpdate und innerhalb der if Bedingung ausgeführt.

Vorsicht: Dieser Code ist sehr grob. Ich bin 100% sicher, dass es Dinge tun wird, die nicht beabsichtigt sind. Verwenden Sie es nur als Sprungbrett. Es ist kein endgültiger Produktionscode.