wordpress 文章的发布和修改时定制文章标题

我想在发表文章的时候对文章的标题统一加上分组的信息,比如:[foo] bar title

更新2(2018-09-03):

wp_posts表有几个类型(post_type)的数据:post、page、attachment、revision、nav_menu_item。我们是post类型。

post类型有几个状态(post_status):publish、future、draft、pending、private、trash、auto-draft、inherit。我们是在发布post的时候,也就是post状态是publish的时候才进行修改。

我还多做了一个处理,如果标题已经加过“[分类名]”,那就不再加了,因为wp好多情况都是publish,比如你编辑post更新后,也属于publish,所以得做个判断。

add_action("save_post","add_category_to_article_title",1,1);
function add_category_to_article_title($post_id){
        $post = get_post($post_id);
        $title = get_the_title($post_id);
        $status = get_post_status($post_id);
        $type = get_post_type($post_id);
        if ("post" == $type && "publish" == $status && false === strpos($title,"[")){
            $cats = get_the_category();
            $content = array(
                        'ID' => $post_id,
                        'post_title' => '[ '.$cats[0]->cat_name.' ] ' . $title,
                        );
            remove_action('save_post', 'add_category_to_article_title',1,1);
            wp_update_post($content);
            add_action('save_post', 'add_category_to_article_title',1,1);
        }
}

更新1,不过还是有个小问题,如果是更新文章的话还是会有小影响:

add_action("save_post","add_category_to_article_title",1,1);
function add_category_to_article_title($post_id){
        $post = get_post($post_id);
        $title = get_the_title($post_id);
        $status = get_post_status($post_id);
        $type = get_post_type($post_id);
        if (!($type == "revision" && $status == "inherit") && !($type == "post" && ($status == "draft" || $status == "auto-draft"))){
        $cats = get_the_category();
        $content = array(
                        'ID' => $post_id,
                        'post_title' => '[ '.$cats[0]->cat_name.' ] ' . $title,
                        );
        remove_action('save_post', 'add_category_to_article_title',1,1);
        wp_update_post($content);
        add_action('save_post', 'add_category_to_article_title',1,1);
        }
}

把这段代码加载主题的functions.php里:

下面这段下次太大,可以不参考。

// 当新建文章或保存的时候,会在标题前面把分类名称以[名称]的形式加上
add_filter( 'wp_insert_post_data' , 'modify_post_title' , '99', 1 );
function modify_post_title( $data )
{
  $cats = get_the_category();
  $data['post_title'] = '[ '.$cats[0]->cat_name.' ] ' . $data['post_title'] ;
  return $data; 
}

可以搜一下wp_insert_post_data这个钩子。

你可能感兴趣的:(wordpress)