如何设置自定义帖子类型的帖子字数限制

时间:2014-12-17 作者:Andy

我并没有试图为自定义帖子类型设置exerpt,而是在我的自定义帖子类型的管理员中设置一个单词限制。

我刚刚设置了一个自定义帖子类型:

add_action( \'init\', \'test_post_type\' ); 
function create_post_type() 
    register_post_type( 
       \'test_post_type\',
        array(
            \'labels\' => array(
                \'name\' => __( \'test\' ),
                \'singular_name\' => __( \'test\' )
            ),
            \'public\' => true,
            \'has_archive\' => true,
        )
    );
}
我想了解如何设置此自定义帖子类型的字数限制,以便在单击“发布”按钮时,它将显示由于字数超过字数限制而导致的错误。

我只知道如何设置所有帖子标题的字数限制:

function maxWord($title){
global $post;
$title = $post->post_title;
if (str_word_count($title) >= 15 ) // maximum of 15 words
    wp_die( __(\'Your post title is over the maximum word count.\') );
} 
add_action(\'publish_post\', \'maxWord\');
我希望它与上面一样,但在我的自定义帖子类型中,tinymce帖子的字数限制。

非常感谢您的帮助。

2 个回复
SO网友:kaiser

过滤器和操作

您可以选择运行限制帖子内容长度的挂钩save_post, save_post_{post_type}edit_post (或两者兼有)(以下操作在内部执行wp_publish_post()

/** This action is documented in wp-includes/post.php */
do_action( \'edit_post\', $post->ID, $post );
do_action( "save_post_{$post->post_type}", $post->ID, $post, true );
do_action( \'save_post\', $post->ID, $post, true );
do_action( \'wp_insert_post\', $post->ID, $post, true );
或在内部执行的一个转换后挂钩wp_transition_post_status(). 即:

do_action( \'transition_post_status\', $new_status, $old_status, $post );
do_action( "{$old_status}_to_{$new_status}", $post );
do_action( "{$new_status}_{$post->post_type}", $post_id, $post );
要在回调中检查筛选器或操作,如果您使用的是正确的筛选器,可以使用current_filter()current_action() (其中later只是current_filter()), 它返回一个字符串,其中包含当前正在运行的筛选器或操作的名称。

限制

到限制您可能要使用的字数

wp_trim_words( $content, 300 );
将内容限制为300字。

当内容已经存在时,还有更多内容。要绕过这个,你可以leverage the plugins in this answer 我写信是为了限制摘录的长度。如果您只想在内容上运行它,只需更改它即可。

总体思路(在伪代码中)始终是:

Explode the string of words in an array on empty space
Count the number of array items
If they exceed $limit, loop through them or slice the array
Return everything below and equal to the threshold
核心APIwp_trim_words() 与简单的循环不同的是,它从一个字符串中剥离所有HTML标记(这样它们就不会添加到计数中),并且有一个过滤器在返回结果之前运行回调,允许使用非常细粒度和有针对性的方法

apply_filters( \'wp_trim_words\', $text, $num_words, $more, $original_text );
把一个插件放在一起,只需填写你想做的任何事情。请确保使用以下方法正确通知用户post_updated_messages 告诉用户为什么你删掉了文字,拒绝保存内容或任何你想要提供的用户体验

<?php 
/** Plugin Name: WPSE (#172544) Limit Content by Word Count */

add_action( \'save_post_test_post_type\', function( $id, \\WP_Post $post, $updated ) 
{
    # debug:
    # var_dump( $post, $_POST );
    // Here you can do whatever you want to do to limit the 
}, 10, 3 );

SO网友:IntricatePixels

就我个人而言,我不建议对Wordpress编辑器的默认工作方式进行任何此类更改,因为这可能会在将来带来问题。

然而,我认为您可以通过一些Javascript/jQuery来实现这一点。

Take a look at this example. 确保彻底测试建议的实现,我还没有测试它。

结束

相关推荐