wordpress 文章的釋出和修改時定製文章標題
阿新 • • 發佈:2018-12-22
我想在發表文章的時候對文章的標題統一加上分組的資訊,比如:[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這個鉤子。