wordpress 文章的釋出和修改時定製文章標題

地球沒有花發表於2018-08-17

我想在發表文章的時候對文章的標題統一加上分組的資訊,比如:[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這個鉤子。

相關文章