如何在wordpress帖子中设置最小字数

时间:2017-04-18 08:40:44

标签: php wordpress

我打算创建一个代码过滤器,并在保存/提交wordpress帖子时设置最小字数。我试过这段代码。

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');

但问题是,当我输入< 300字时,post仍将其保存在数据库中。我现在的问题是,如果内容中有< 300个单词无法保存到数据库中,我应该怎么做?

2 个答案:

答案 0 :(得分:1)

在将帖子保存到数据库之前,将调用 wp_insert_post_data 挂钩。我们还会检查帖子的状态,以便此功能不会在其他管理页面上运行。

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 );

然而,这不是非常友好的用户体验,因为用户将失去他们的帖子并被发送到错误屏幕。我建议将帖子的状态设置为待处理,如果它不符合最低字数要求,并通过 admin_notices 挂钩通知用户它不能发布直到达到字数。

答案 1 :(得分:0)

使用'save_post'钩子。请尝试以下代码。

 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' );