您将要使用save_post
钩子,每次保存或更新帖子时都会触发。
回调应该(可选)检查是否设置了类别(忽略“未分类”),否则根据作者使用作者ID将类别设置为类别段塞数组。
以下内容未经测试
function wpse45398_save($post_id,$post) {
// verify this is not an auto save routine.
if ( defined(\'DOING_AUTOSAVE\') && DOING_AUTOSAVE ) return;
//You should check nonces and permissions here
//Get category slugs associated with post
$cats = wp_list_pluck(get_the_category($post_id),\'slug\');
$cats = array_values($cats);
//Remove \'uncategorised\' from array
unset($cats[\'uncategorised\']);
//If $cats array is empty
if(empty($cats)):
//Array of author ID to \'default category\'
$authorCat = array(
\'1\'=>\'mycatslug\',
\'2\'=>\'myothercat\',
\'3\'=>\'anothercat\'
);
$author_id=intval($post->post_author);
$defaultCat = isset($authorCat[$author_id]) ? $author_id : 0;
if(!empty($defaultCat))
wp_set_object_terms( $post_id, \'category\', $defaultCat, true )
endif;
return;
}
add_action(\'save_post\',\'wpse45398_save\',10,2);
如果你想“修复”已经存在的帖子,请参阅@Soulseekah的答案,尽管这种方法可以通过更新现有帖子来实现。
上述代码将确保未来的任何职位至少属于一个类别(根据作者)。或者,publish_post
仅当帖子保存且状态为“发布”时,才能使用该函数启动回调函数(因此对于草稿,不会发生“更正”)。