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

为Elementor提交页面添加用户筛选列的技术求助

Elementor提交页面用户筛选修复方案

代码崩溃原因分析

  1. get_current_screen()调用时机错误:在pre_get_posts钩子中调用该函数时,当前屏幕对象尚未初始化,直接访问$screen->id会触发致命错误。
  2. 未做安全校验:直接使用$_GET['user_filter'],未进行数据验证与 sanitize,存在安全风险且可能引发非法数据错误。
  3. 筛选逻辑不匹配Elementor机制:Elementor表单提交的用户关联并非存储在标准author字段,且提交列表使用自定义查询,pre_get_posts钩子无法生效。

修复后的完整代码

function add_user_filter_to_submissions_page() {
    // 确保当前屏幕对象已初始化
    if ( ! function_exists( 'get_current_screen' ) ) {
        return;
    }

    $screen = get_current_screen();
    if ( $screen && $screen->id === 'elementor-pro_page_e-form-submissions' ) {
        $users = get_users();
        ?>
        <label for="user_filter"><?php _e( 'Filter by User:', 'elementor-pro' ); ?></label>
        <select name="user_filter" id="user_filter">
            <option value=""><?php _e( 'All Users', 'elementor-pro' ); ?></option>
            <?php foreach ( $users as $user ) : ?>
                <option value="<?php echo esc_attr( $user->ID ); ?>" <?php selected( isset( $_GET['user_filter'] ) && $_GET['user_filter'] === (string) $user->ID ); ?>>
                    <?php echo esc_html( $user->display_name ); ?>
                </option>
            <?php endforeach; ?>
        </select>
        <?php
    }
}
add_action( 'restrict_manage_posts', 'add_user_filter_to_submissions_page' );

function modify_submissions_query( $query_args, $request ) {
    // 验证筛选参数并 sanitize
    if ( isset( $_GET['user_filter'] ) && is_numeric( $_GET['user_filter'] ) ) {
        $user_id = absint( $_GET['user_filter'] );
        // Elementor 表单提交的用户ID存储在元数据 '_user_id' 中
        $query_args['meta_query'][] = [
            'key' => '_user_id',
            'value' => $user_id,
            'compare' => '=',
        ];
    }

    return $query_args;
}
add_filter( 'elementor_pro/forms/submissions/query', 'modify_submissions_query', 10, 2 );

关键修复点说明

  • 安全校验:添加function_exists检查确保get_current_screen可用,对$_GET['user_filter']做is_numeric和absint验证,使用esc_attr输出用户ID避免XSS。
  • 钩子替换:改用Elementor Pro专属的elementor_pro/forms/submissions/query钩子,该钩子专门用于修改提交列表的查询参数。
  • 筛选逻辑修正:Elementor表单提交的用户ID存储在自定义元字段_user_id中,通过meta_query实现正确筛选。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 01:47:38