You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

WordPress打开post/page编辑器时是否存在可用hook?

WordPress 编辑器场景可用Hook及自动插入代码片段实现

打开WordPress的post/page编辑器时,有对应可用的Hook实现内容抓取、自动插入指定片段的需求,注意古腾堡块编辑器(5.0+默认)和经典编辑器的Hook逻辑不通用,按你实际启用的编辑器选择即可:

分编辑器可用Hook及适用场景

古腾堡(块编辑器)

  • 新建文章/页面场景:直接用后端过滤器default_content即可,打开新建编辑页时会自动把你指定的片段预填充到编辑器中
  • 编辑已有文章/页面场景:块编辑器是前端React渲染,无法直接用PHP过滤器修改输出的编辑内容,需要通过JS侧编辑器API实现,配合enqueue_block_editor_assets加载自定义脚本即可操作编辑器内容、插入指定片段

经典编辑器(TinyMCE旧版编辑器)

  • 新建文章/页面场景:和古腾堡通用default_content过滤器
  • 编辑已有文章/页面场景:可以直接用PHP过滤器the_editor_content,在编辑器内容输出到页面前完成内容抓取、片段追加逻辑,不需要额外写JS

可直接复用的代码示例

1. 新建文章自动预填充片段(两类编辑器通用)

add_filter( 'default_content', 'auto_insert_custom_snippet_for_new_post', 10, 2 );
function auto_insert_custom_snippet_for_new_post( $content, $post ) {
    // 仅在post、page类型的新建页生效
    if ( in_array( $post->post_type, ['post', 'page'] ) ) {
        // 替换为你需要插入的自定义代码片段
        $snippet = '<!-- 自定义埋点代码 --><div class="custom-block">自定义通用模块</div>';
        $content .= $snippet;
    }
    return $content;
}

2. 经典编辑器打开已有文章自动追加片段

add_filter( 'the_editor_content', 'auto_insert_snippet_for_existing_post_classic', 10, 1 );
function auto_insert_snippet_for_existing_post_classic( $content ) {
    $screen = get_current_screen();
    // 排除非post/page编辑页
    if ( !$screen || !in_array( $screen->post_type, ['post', 'page'] ) || $screen->base !== 'post' ) {
        return $content;
    }
    $snippet = '<!-- 自定义埋点代码 --><div class="custom-block">自定义通用模块</div>';
    // 做重复判断,避免每次打开编辑都重复插入片段
    if ( strpos( $content, $snippet ) === false ) {
        $content .= $snippet;
    }
    return $content;
}

3. 古腾堡编辑器打开已有文章自动追加片段

首先通过PHP钩子加载自定义编辑器脚本:

add_action( 'enqueue_block_editor_assets', 'load_custom_gutenberg_editor_script' );
function load_custom_gutenberg_editor_script() {
    $screen = get_current_screen();
    if ( !$screen || !in_array( $screen->post_type, ['post', 'page'] ) ) {
        return;
    }
    // 替换为你自定义JS文件的路径,依赖wp-blocks、wp-data、wp-dom-ready核心依赖
    wp_enqueue_script(
        'custom-gutenberg-script',
        get_template_directory_uri() . '/assets/js/custom-editor.js',
        ['wp-blocks', 'wp-data', 'wp-dom-ready'],
        '1.0.0',
        true
    );
}

在对应自定义JS文件中写入内容插入逻辑:

wp.domReady(() => {
    let hasInserted = false;
    wp.data.subscribe(() => {
        // 等待编辑器初始化完成
        const isReady = wp.data.select('core/editor').isReady();
        if (!isReady || hasInserted) return;

        const snippet = '<!-- 自定义埋点代码 --><div class="custom-block">自定义通用模块</div>';
        const currentContent = wp.data.select('core/editor').getEditedPostContent();
        // 不存在目标片段则插入自定义HTML块
        if (currentContent.indexOf(snippet) === -1) {
            const newBlock = wp.blocks.createBlock('core/html', {content: snippet});
            wp.data.dispatch('core/block-editor').insertBlocks(newBlock);
            hasInserted = true;
        }
    })
})

注意事项

  • 所有逻辑都要加页面判断,不要在后台非编辑页加载相关代码,避免干扰其他后台功能
  • 必须加重复插入判断逻辑,否则每次打开编辑器都会重复追加相同片段
  • 如果插入的是可执行代码(比如JS统计代码),注意做好用户权限校验,避免低权限用户编辑时被恶意篡改内容

内容的提问来源于stack exchange,提问作者Aftermaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 07:45:31