习惯设置wordpress固定链接格式为“/%postid%.html”的用户都会碰到链接数字不连续的问题,这是因为wordpress中添加文章、媒体,用户等等各种操作都会占用id,这时有些强迫症用户就会很不爽,想要给文章链接的数字搞连续起来,这时就可以用奇怪的方法完成。
新站的话设置文章格式为“/%postname%.html”
然后把下面的加入主题functions.php中,其实就是自定义文章别名为数字自增。
function auto_generate_numeric_slug($post_id) {
// 检查是否是自动保存,避免无限循环
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) {
return;
}
// 检查当前用户是否有权限编辑文章
if (!current_user_can('edit_post', $post_id)) {
return;
}
// 检查文章是否已经有别名(slug),避免重复更新
$post = get_post($post_id);
if ($post->post_name) {
return;
}
// 获取文章类型,只为普通文章生成别名
if (get_post_type($post_id) != 'post') {
return;
}
// 获取最后一篇文章的 ID
$args = array(
'post_type' => 'post',
'posts_per_page' => 1, // 只获取最后一篇文章
'post_status' => 'publish', // 只获取已发布的文章
'orderby' => 'ID',
'order' => 'DESC',
'post__not_in' => array($post_id) // 排除当前文章,防止冲突
);
$last_post = get_posts($args);
// 如果存在文章
if ($last_post) {
$last_post_id = $last_post[0]->ID;
$last_slug = get_post_field('post_name', $last_post_id);
// 提取数字部分
if (is_numeric($last_slug)) {
$last_number = (int)$last_slug;
} else {
$last_number = 0;
}
} else {
// 如果没有找到任何文章,起始数字设为 0
$last_number = 0;
}
// 自增数字
$new_number = $last_number + 1;
// 更新当前文章的 slug 为自增的数字
wp_update_post(array(
'ID' => $post_id,
'post_name' => $new_number
));
}
add_action('save_post', 'auto_generate_numeric_slug');