3

我有两个豆荚:courseteacher.

每个course都有一个teacher

我使用简码来构建一个表单来定义新的course

[pods name='course' form='1' fields='name, teacher' ]

定义新course的时,用户可以teacher为此选择course

默认情况下, 的name显示teacher在下拉列表中。我想知道是否可以更改teachers下拉列表中的输出。

比如除了name我要显示的某个字段,比如下拉列表中的locationteacher

这可以使用 Pods 2 的内置短代码吗?


更新:

按照斯科特的指示,我解决了这个问题。我将解决方案写入评论部分,但格式丢失。下面,我再次放上代码:

function pods_teacher_pick_data($data, $name, $value, $options, $pod, $id){
    if ($name == "pods_field_teachers") {
        foreach ($data as $id => &$value) {
            $p = pods('teacher', $id);
            $name = $p->display('name');
            $city = $p->display('profile.city.name');
            $value = $name . ' - ' . $city;
        }
    }
    return $data;
}

add_filter('pods_field_pick_data', 'pods_teacher_pick_data', 1, 6);
4

2 回答 2

5

尚未内置,但您可以使用过滤器接管数据输出:pods_field_pick_data

$data = apply_filters( 'pods_field_pick_data', $data, $name, $value, $options, $pod, $id );

向该过滤器添加过滤器应该使您能够更改下拉列表中显示的内容或其他关系输入类型。

编辑:我刚刚添加了一个类似的过滤器来过滤自动完成数据。

$pick_data = apply_filters( 'pods_field_pick_data_ajax', array(), $field[ 'name' ], null, $field, $pod, 0, $data );

这个数组中的 $data 实际上是完整设置的 PodsData 对象

编辑(2013 年 2 月 7 日):

在 Pods 2.3 中,我添加了一个快速函数,可以简化添加自定义关系对象。这是覆盖现有关系或动态使用自定义简单定义的首选。非常易于使用,请访问https://github.com/pods-framework/pods/issues/1033查看

$options = array(
    'group' => 'Special Relationships', // Whatever you want the selection group to be, defaults to label
    'simple' => false, // Whether this field is related by strings or integer IDs, integer IDs get stored in wp_podsrel, strings are stored in the field itself either serialized (meta-based) or json encoded (table-based)
    'data' => array( // Custom define the items to select from manually
        1 => 'Gravity Form 1',
        2 => 'Gravity Form 2'
    ),
    'data_callback' => 'get_custom_gravity_forms_list', // Provide a callback function to call to define the data (instead of setting 'data' above)
    'value_to_label_callback' => 'get_custom_gravity_forms_list', // Provide a callback function to define the data when called through PodsField_Pick::value_to_label
    'simple_value_callback' => 'get_custom_gravity_forms_list' // Provide a callback function to define the data when called through PodsField_Pick::simple_value
);

pods_register_related_object( 'gravity-form', 'Gravity Forms', $options );
于 2013-01-10T14:35:44.077 回答
0

对于 ajax,似乎需要使用一些不同的过滤器 pods_field_pick_data_ajax_items,如下所示:

function pods_teacher_pick_data_ajax_items($items, $name, $null, $field, $pod, $id){
    if ($name == "pods_meta_categorie" || $name == 'categorie') {
        foreach ($items as &$item) {
            $id = $item['id'];
            $value = $item['text'];
            $p = pods('dvd_categories', $id);
            $code = $p->display('code');
            $item['text'] .= ' - ' . $code;
        }
    }
    return $items;
}

add_filter('pods_field_pick_data_ajax_items', 'pods_teacher_pick_data_ajax_items', 1, 6);

注意数组 $data 和 $items 的不同结构。过滤器 pods_teacher_pick_data_ajax 对我来说看起来很奇怪而且没用,因为它不接受 $data 数组。

于 2017-02-12T15:59:58.313 回答