Admin-Filter / Fehler, wenn der Beitragstitel zu lang ist

Gibt es einen Filter, der einen Fehler austriggers, wenn der Post-Ersteller einen zu langen Post-Titel eingibt?

Ich möchte einen Fehler wie den folgenden eingeben: “Der eingegebene Titel besteht aus mehr als 30 Zeichen. Bitte ändern Sie den Titel und versuchen Sie es erneut.” Vorzugsweise könnte dies eine Bannerwarnung wie Standarderrors oder zumindest etwas Auffälliges sein. Außerdem wird der Post nicht gespeichert, bis der Titel die richtige Länge hat.

Ich weiß, dass es den wp_insert_post_data Filter gibt, wo Sie den Titel ändern können, bevor er gespeichert wird, aber ich möchte etwas wie das Abschneiden nicht machen, da es für den Endbenutzer keinen Sinn ergibt. Dies ist etwas, was ich gerne den Post-Writer ändern würde.

Solutions Collecting From Web of "Admin-Filter / Fehler, wenn der Beitragstitel zu lang ist"

Der Schlüssel, den ich vermisse, ist, zu verstehen, dass WordPress keinen linearen Pfad zum Speichern von Posts verwendet. Da Posts automatisch gespeichert werden, sollten Sie dies so behandeln, dass es nach dem Veröffentlichungsstatus und nicht nach dem Speicherstatus definiert wird. Anstatt zu versuchen, den Titel zu wp_insert_post_data oder anzupassen, sollten Sie den wp_insert_post_data oder einen Post-Status-Übergang wp_insert_post_data und verhindern, dass der Post auf einen publish oder future Status gesetzt wird, bis alle Ihre Bedingungen erfüllt sind. Die Aktion für einen Admin-Hinweis lautet admin_notices .

Ich habe das mit dem transition_post_status getriggers.

 function check_post_title_length($new_status, $old_status, $post){ if($new_status == 'auto-draft' || $new_status == 'draft'){ return; } if(str_word_count($post->post_title, 0) > 12){ //update-nag is the term for a yellow warning box in admin_notices //notice here I use the WP_Error data field to choose the type of error box to show $admin_notices = new WP_Error('check_post_title_length','If possible, consider making the post title shorter.', 'update-nag'); //we could also if we needed, add more notices to the list such as //$admin_notices->add('some_other_check', 'Sorry you need to add an author'); add_user_meta(get_current_user_id(), 'admin_notices', $admin_notices, true); } } add_action('transition_post_status', 'check_post_title_length', 10, 3); function display_admin_notices(){ $user_id = get_current_user_id(); $admin_notices = get_user_meta($user_id, 'admin_notices', true); if(!empty($admin_notices)){ //make sure its a WP_Error object if(is_wp_error($admin_notices)){ //delete error from user meta so error is gone on page reload delete_user_meta($user_id, 'admin_notices'); $notices = $spm_admin_notices->get_error_messages(); if(!empty($notices)){ $notice_type = $admin_notices->get_error_data(); if(!empty($notice_type)){ ?> 
< ?php } else { ?>
< ?php } //here we loop through all notices we want to display //this is useful if the user needs to adjust more than one item foreach($notices AS $notice){ ?>

< ?php echo $notice; ?>

< ?php } ?>
< ?php } } } } add_action('admin_notices', 'display_admin_notices');