I am planning to create a code filter and set a minimum word count in saving/submitting the wordpress post. I tried this code.
function minWord($content)
{
global $post;
$content = $post->post_content;
if (str_word_count($content) < 300 ) //set this to the minimum number of words
wp_die( __('Error: your post is below the minimum word count. It needs to be longer than 300 words.') );
}
add_action('publish_post', 'minWord');
but the issue, when I input < 300
words the post
still saves it on the database. My question now is what should I do that if the content will have < 300
words it won't save to the database?
The wp_insert_post_data hook will be called before the post is saved to the database. We also check the status of the post so this function doesn't run on other admin pages.
function enforceMinWordCount( $data, $post )
{
if ($data['post_status'] === 'publish' &&
str_word_count($post['post_content']) < 300 ) {
wp_die( __('Error: your post is below the minimum word count. It needs to be longer than 300 words.') );
}
return $data;
}
add_action( 'wp_insert_post_data', 'enforceMinWordCount', 99, 2 );
This isn't very UX-friendly however, since a user will lose their post and get sent to an error screen. I'd recommended setting the status of the post to pending if it doesn't meet the minimum word count requirements, and notifying the user via the admin_notices hook that it cannot be published until the word count is reached.
use 'save_post' hook . Try below code.
function minWord( $post_id ) {
$content = get_the_content( $post_id )
if (str_word_count($content) < 300 ) //set this to the minimum number of words
wp_die( __('Error: your post is below the minimum word count. It needs to be longer than 300 words.') );
return;
}
add_action( 'save_post', 'minWord' );