暂无菜单项

新文章使用上次文章所选的标签

发布于
14

代码介绍

平时大量发布文章时,总有一个非常麻烦的问题,就是标签的重复选择。通常在大批量手动发布文章的时候,都是同分类,同标签的状态进行发布的。

之前分享了写新文章时,自动勾选上次已选择的分类,文章如下:

[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]

 

0 讨论
热门最新
总结
暂无总结
0 / 600