【问题标题】:JetEngine Form - User DropdownJetEngine 表单 - 用户下拉列表
【发布时间】:2022-10-07 17:11:34
【问题描述】:

我正在使用 JetEngine 表单,我需要添加一个用户下拉列表以从其中一个表单中进行选择。

有什么办法吗?我没有看到任何用户字段类型,也没有看到选择选项。如果我选择动态填充,我有一些预构建函数来获取数据,但对于用户没有?

如何设置此下拉列表或构建一个函数以显示为动态生成的选项之一?

我在搜索这个问题上并没有在他们的文档中找到太多

    标签: wordpress jet-engine


    【解决方案1】:

    由于我在网上没有找到太多信息,并且没有关于 JetEngine 插件的真正好的文档,我开始挖掘插件的代码。 我发现对我来说最好的解决方案是创建我自己的表单生成器——当在表单构建器中创建一个新的选择字段时,它会给我一个自定义函数来选择。

    这是我用于创建自定义生成器的代码:

    add_filter( 'jet-form-builder/forms/options-generators', 'my_jet_form_custom_option_generator' ,10, 1);
    add_filter( 'jet-engine/forms/options-generators', 'my_jet_form_custom_option_generator' ,10, 1);
    
    function my_jet_form_custom_option_generator($instances) {
        require(plugin_dir_path(__FILE__). '/jetBuilder/generators/get-users.php');
        $instances[] = new Jet_Form_Builder\Generators\Get_Users();
        return $instances;
    }
    

    这是实际的 get-users 生成器的基本结构:

    namespace Jet_Form_Builder\Generators;
    
    require_once(WP_PLUGIN_DIR.'/jetformbuilder/includes/generators/base.php'); 
    
    
    class Get_Users extends Base {
    
        /**
         * Returns generator ID
         *
         * @return string
         */
        public function get_id() {
            return 'my_generator;
        }
    
        /**
         * Returns generator name
         *
         * @return string
         */
        public function get_name() {
            return __( 'My Cool Custom Generator', '' );
        }
    
        /**
         * Returns generated options list
         *
         * @param $args
         *
         * @return array
         */
        public function generate( $args ) {
    
            global $wpdb;
                    
            // this is a dummy SQL....
            $sql = "SELECT {$wpdb->users}.user_email, {$wpdb->users}.display_name, {$wpdb->users}.ID, {$wpdb->usermeta}.meta_value
                FROM {$wpdb->users} INNER JOIN {$wpdb->usermeta} ON ({$wpdb->users}.ID = {$wpdb->usermeta}.user_id)
                WHERE 1=1 "; // CHANGE QUERY FOR YOUR NEEDS....
    
            $result = array();
            
            $table  = $wpdb->users;
            $rows   = $wpdb->get_results(
                                
                $wpdb->prepare( $sql , $field),
                ARRAY_A
            );
    
            if ( empty( $rows ) ) {
                return $result;
            }
            
            $result[] = array(
                    'value' => 0,
                    'label' => '-----------',
                );
    
            foreach ( $rows as $row ) {
                $result[] = array(
                    'value' => $row['ID'],
                    'label' => $row['display_name'],
                );
            }
    
            return $result;
    
        }
    
    }
    

    希望这可以帮助...

    【讨论】:

      【解决方案2】:

      还有一种无需代码的替代方法,因为他们引入了一个动态函数来通过查询生成器拉取用户列表。

      详细解释这里https://youtu.be/v3QR3824F4Y?t=420

      【讨论】:

        猜你喜欢
        • 2017-04-23
        • 2019-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-12
        • 1970-01-01
        相关资源
        最近更新 更多