代码介绍
平时大量发布文章时,总有一个非常麻烦的问题,就是标签的重复选择。通常在大批量手动发布文章的时候,都是同分类,同标签的状态进行发布的。
之前分享了写新文章时,自动勾选上次已选择的分类,文章如下:
[b2_insert_post id=”95″]
那么本次就分享自动添加上次文章添加的标签
[content_hide]
/**
* 1. 记忆功能:当文章保存或发布时,记录当前使用的标签
*/
function smart_tags_save_last_used($post_id) {
// 如果是自动保存、修订版本或没有权限,则跳过
if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return;
if (wp_is_post_revision($post_id)) return;
// 获取当前文章的标签(只获取名称)
$tags = wp_get_post_tags($post_id, array('fields' => 'names'));
// 如果有标签,则保存到当前用户的个人元数据中
// 使用逗号连接,方便后续 JS 直接使用
if (!empty($tags)) {
update_user_meta(get_current_user_id(), 'last_used_post_tags', implode(',', $tags));
}
}
add_action('save_post', 'smart_tags_save_last_used');
/**
* 2. 自动添加功能:在后台编辑器加载时,通过 JS 自动填充
*/
function smart_tags_auto_fill_script() {
// 仅在文章编辑页面或新建文章页面加载
$screen = get_current_screen();
if (!$screen || 'post' !== $screen->base || 'post' !== $screen->post_type) {
return;
}
// 获取当前用户最后一次使用的标签
$last_tags = get_user_meta(get_current_user_id(), 'last_used_post_tags', true);
// 如果没有历史标签,直接返回
if (empty($last_tags)) return;
?>
<script type="text/javascript">
jQuery(document).ready(function($) {
// 定义检查和执行函数
function tryAddSmartTags() {
// 目标容器:标签列表
var $checklist = $('#post_tag .tagchecklist');
// 目标输入框
var $input = $('#new-tag-post_tag');
// 目标按钮
var $btn = $('#post_tag .tagadd');
// 确保这些元素都存在
if ($checklist.length && $input.length && $btn.length) {
// 逻辑判断:检查标签列表是否为空
// 只有当列表里没有标签时(即 children 数量为 0),才自动添加
if ($checklist.children().length === 0) {
// 将保存的标签填入输入框
$input.val('<?php echo esc_js($last_tags); ?>');
// 模拟点击“添加”按钮
$btn.click();
console.log('历史标签已自动添加');
} else {
console.log('当前文章已有标签,跳过自动添加');
}
}
}
// 稍微延迟执行,确保 WP 的原有 JS 已加载完毕
setTimeout(tryAddSmartTags, 500);
});
</script>
<?php
}
add_action('admin_footer', 'smart_tags_auto_fill_script');[/content_hide]
