WordPress子比主题功能增强之一键发布更新及撤回草稿代码

AI 智能摘要
WordPress站长福音来了!面对子比主题资源站里堆积如山的草稿和繁琐的发布时间更新,手动操作太费时。本文分享一段高效代码,直接插入functions.php,即可一键发布所有草稿、批量更新文章发布时间或撤回为草稿。这些数据库底层操作能极大提升你的内容管理效率,尤其适合需要批量SEO优化和内容翻新的站长,但务必记得操作前备份,以防数据丢失。

做站长最头疼的事,大概就是面对满屏幕的草稿却得一个个手动点发布。尤其是用WordPress子比主题搭建大型资源站或社区的朋友,平时批量导入或者采集的内容多了,光是点鼠标都能点到手发软。说白了,这种低效率的操作完全是在浪费生命。

其实吧,想要实现批量化管理并不难,咱们没必要专门去装个笨重的插件。据主题铺观察,很多站长需要的无非就是一键发布草稿一键刷新发布时间或者批量撤回成草稿这三个刚需功能。

这套方案设计的逻辑非常精简,你只需要把代码丢进WordPress子比主题functions.php文件末尾或者func.php,保存后就能在后台文章列表顶部看到亮眼的辅助按钮。第一个功能能帮你把库里所有积压的草稿文章瞬间转正。第二个功能则是为了SEO优化准备的,它能把已发布文章的时间瞬间更新为当前时刻。虽然这个动作不可逆,但对于那些需要定期翻新内容、让老文章重回首页的站点来说,效果非常直接。最后一个则是撤回功能,能让所有已发布文章瞬间重回草稿箱

图片[1]-WordPress子比主题功能增强之一键发布更新及撤回草稿代码-主题铺

这套代码走的是数据库底层操作,执行效率极高。主题铺认为,虽然操作极其方便,但这种全站级别的改动务必在执行前先备份数据库,以防手滑造成不可挽回的损失。尤其是更新发布时间的功能,一旦点下去,老文章的原始发布日期就彻底抹除了,这对搜索引擎抓取频率有一定影响,操作时倒是要多加留心。

实现这套功能不需要复杂的配置,你只需复制下面的核心代码。直接粘贴到你当前WordPress子比主题目录下的那个functions.php文件或者func.php中,在最后一行回车后放进去保存。

// 在管理员后台添加一个一键发布所有草稿的按钮
//主题铺分享www.zhutipu.com
function admin_post_publish_all_drafts_button() {
    global $current_screen;
    // 仅在文章列表页面显示
    if ( 'edit-post' == $current_screen->id ) {
        echo '<a href="?publish_all_drafts=1" class="page-title-action" onclick="return confirm(\'确定要发布所有草稿吗?此操作不可逆。\');">一键发布所有草稿</a>';
    }
}
add_action( 'admin_notices', 'admin_post_publish_all_drafts_button' );

// 处理发布请求
function handle_publish_all_drafts() {
    if ( isset( $_GET['publish_all_drafts'] ) && $_GET['publish_all_drafts'] == '1' ) {
        // 权限检查
        if ( !current_user_can( 'publish_posts' ) ) {
            wp_die('你没有权限执行此操作。');
        }

        global $wpdb;
        // 更新所有草稿状态为发布
        $result = $wpdb->query( "UPDATE {$wpdb->posts} SET post_status = 'publish' WHERE post_status = 'draft' AND post_type = 'post'" );

        if ( $result !== false ) {
            // 添加管理员通知
            add_action( 'admin_notices', function() use ($result) {
                echo '<div class="notice notice-success is-dismissible"><p>已成功发布 ' . $result . ' 篇草稿文章。</p></div>';
            });
        } else {
            add_action( 'admin_notices', function() {
                echo '<div class="notice notice-error is-dismissible"><p>发布过程中出现错误,请检查数据库。</p></div>';
            });
        }
    }
}
add_action( 'admin_init', 'handle_publish_all_drafts' );

/**
 * 一键更新发布所有文章(将发布时间改为当前时间)
 * 一键移动到草稿箱(将已发布文章改为草稿)
 */

// 在文章列表页添加按钮
function admin_post_bulk_actions_buttons() {
    global $current_screen;

    // 仅在文章列表页面显示
    if ( 'edit-post' == $current_screen->id ) {
        ?>
        <div style="margin: 8px 0; display: flex; gap: 10px;">
            <a href="?republish_all=1" class="button button-primary" 
               onclick="return confirm('确定要更新所有已发布文章的发布时间吗?此操作不可逆。\n将处理 <?php echo get_posts_count('publish'); ?> 篇文章。');">
                ⏰ 一键更新发布时间
            </a>

            <a href="?move_to_draft=1" class="button" 
               onclick="return confirm('确定要将所有已发布文章移动到草稿箱吗?此操作不可逆。\n将处理 <?php echo get_posts_count('publish'); ?> 篇文章。');">
                📥 一键移动到草稿箱
            </a>
        </div>
        <?php
    }
}
add_action( 'admin_notices', 'admin_post_bulk_actions_buttons' );

// 获取文章数量
function get_posts_count($status) {
    global $wpdb;
    return $wpdb->get_var($wpdb->prepare(
        "SELECT COUNT(*) FROM {$wpdb->posts} WHERE post_status = %s AND post_type = 'post'",
        $status
    ));
}

// 处理一键更新发布时间
function handle_republish_all() {
    if ( isset( $_GET['republish_all'] ) && $_GET['republish_all'] == '1' ) {
        // 权限检查
        if ( !current_user_can( 'publish_posts' ) ) {
            wp_die('你没有权限执行此操作。');
        }

        global $wpdb;
        $current_time = current_time('mysql');
        $current_time_gmt = get_gmt_from_date($current_time);

        // 更新所有已发布文章的发布时间
        $result = $wpdb->query(
            "UPDATE {$wpdb->posts} 
             SET post_date = '{$current_time}', 
                 post_date_gmt = '{$current_time_gmt}',
                 post_modified = '{$current_time}',
                 post_modified_gmt = '{$current_time_gmt}'
             WHERE post_status = 'publish' 
             AND post_type = 'post'"
        );

        if ( $result !== false ) {
            add_action( 'admin_notices', function() use ($result) {
                echo '<div class="notice notice-success is-dismissible"><p>✅ 已成功更新 ' . $result . ' 篇文章的发布时间。</p></div>';
            });
        } else {
            add_action( 'admin_notices', function() {
                echo '<div class="notice notice-error is-dismissible"><p>❌ 更新过程中出现错误,请检查数据库。</p></div>';
            });
        }
    }
}
add_action( 'admin_init', 'handle_republish_all' );

// 处理一键移动到草稿箱
function handle_move_to_draft() {
    if ( isset( $_GET['move_to_draft'] ) && $_GET['move_to_draft'] == '1' ) {
        // 权限检查
        if ( !current_user_can( 'publish_posts' ) ) {
            wp_die('你没有权限执行此操作。');
        }

        global $wpdb;

        // 将所有已发布文章改为草稿
        $result = $wpdb->query(
            "UPDATE {$wpdb->posts} 
             SET post_status = 'draft' 
             WHERE post_status = 'publish' 
             AND post_type = 'post'"
        );

        if ( $result !== false ) {
            add_action( 'admin_notices', function() use ($result) {
                echo '<div class="notice notice-warning is-dismissible"><p>📥 已成功将 ' . $result . ' 篇文章移动到草稿箱。</p></div>';
            });
        } else {
            add_action( 'admin_notices', function() {
                echo '<div class="notice notice-error is-dismissible"><p>❌ 移动过程中出现错误,请检查数据库。</p></div>';
            });
        }
    }
}
add_action( 'admin_init', 'handle_move_to_draft' );

主题铺提醒大家,这套代码已经内置了权限验证机制。说白了,只有具备文章发布权的管理员才能在后台看到这几个操作按钮,不用担心普通编辑或投稿者误操作。如果你在执行后发现没有效果,记得去文章管理页面刷新一下。这种轻量级的代码分享方案比起安装臃肿的第三方后台管理插件,对服务器的负担几乎为零,非常适合追求极致效率的WordPress子比用户。

© 版权声明
THE END
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容