为自定义发布类型自动生成辅助信息

时间:2017-01-08 作者:Kevin S

有没有办法按照字母顺序为自定义帖子类型生成slug,或者使用帖子内容的前几个单词?

这是因为我创建了一个没有任何标题的自定义帖子类型。仅内容、类别等。

1 个回复
最合适的回答,由SO网友:Tunji 整理而成

您可以使用save_post 钩例如,如果您有自定义的帖子类型stack, 挂钩可以更改为save_post_stack.

要将post slug设置为内容的前几个字,请执行以下操作:

add_action( \'save_post_stack\', \'wpse251743_set_title\', 10, 3 );
function wpse251743_set_title ( $post_id ){
    //This temporarily removes action to prevent infinite loops
    remove_action( \'save_post_stack\', \'wpse251743_set_title\' );

    $post = get_post( $post_id );

    $post_content = $post->post_content;

    //GET THE FIRST THREE WORDS
    $words = array_slice(str_word_count( $post_content, 2), 0, 5);

    $post_name = implode(\' \', $words );

    //update title
    wp_update_post( array(
        \'ID\'        => $post_id,
        \'post_name\' =>  $post_name, //Wordpress would generate the slug based on the post name
    ));

    //redo action
    add_action( \'save_post_stack\', \'wpse251743_set_title\', 10, 3 );
}
Avoiding infinite loops:

如果要调用函数,如wp_update_post 其中包括save_post 钩子,钩子函数将创建一个无限循环。为了避免这种情况,请在调用所需函数之前先取消钩住函数,然后再重新钩住它。

相关推荐

如何将Page-{slug}.php这样的页面模板文件移到子目录中?

我想移动页面模板文件,如page-{slug}.php 到我的主题中的子目录,WordPress将自动识别它们。如果所述表单的页面模板在子目录中不存在,那么WordPress应该回到默认的模板加载规则。我如何才能做到这一点?Note-1: This 对于页面模板和this 链接提及template-parts/page, 这不是一回事。Note-2: 我有多个page-{slug}.php 像页面模板文件一样,我想将它们移动到子目录中,以获得更整洁的文件组织。