【发布时间】:2022-10-07 17:11:34
【问题描述】:
我正在使用 JetEngine 表单,我需要添加一个用户下拉列表以从其中一个表单中进行选择。
有什么办法吗?我没有看到任何用户字段类型,也没有看到选择选项。如果我选择动态填充,我有一些预构建函数来获取数据,但对于用户没有?
如何设置此下拉列表或构建一个函数以显示为动态生成的选项之一?
我在搜索这个问题上并没有在他们的文档中找到太多
标签: wordpress jet-engine
我正在使用 JetEngine 表单,我需要添加一个用户下拉列表以从其中一个表单中进行选择。
有什么办法吗?我没有看到任何用户字段类型,也没有看到选择选项。如果我选择动态填充,我有一些预构建函数来获取数据,但对于用户没有?
如何设置此下拉列表或构建一个函数以显示为动态生成的选项之一?
我在搜索这个问题上并没有在他们的文档中找到太多
标签: wordpress jet-engine
由于我在网上没有找到太多信息,并且没有关于 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;
}
}
希望这可以帮助...
【讨论】:
还有一种无需代码的替代方法,因为他们引入了一个动态函数来通过查询生成器拉取用户列表。
【讨论】: