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 'Error!!!!
- Bug: Post muss zweimal aktualisiert werden, wenn eine Aktion für save_post Hook hinzugefügt wird
- Metabox von einem Beitrag beeinflusst Einstellung auf anderen
- Der benutzerdefinierte wp_editor aktualisiert post_content nicht
- Vergleichen Sie benutzerdefinierte Taxonomien des aktualisierten Posts (oder neuen Posts)
- Seiteninhalt wird nicht gespeichert, Seiteninhalt kann nicht gespeichert werden
- Wie kann ich $ post-Objekt an 'save_post' add_action übergeben?
'; 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.
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.