我想在发表文章的时候对文章的标题统一加上分组的信息,比如:[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这个钩子。