3

私は2つのポッドを持っています:courseteacher

それぞれcourseにがありteacherます。

newを定義するフォームを作成するためにショートコードを使用しますcourse

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

新しいを定義するときcourse、ユーザーはこれにを選択できteacherますcourse

デフォルトでは、nameteacherはドロップダウンリストに表示されます。teachersドロップダウンリストのの出力を変更できるかどうか疑問に思います。

たとえば、ドロップダウンリストのなどname、特定のフィールドを表示したいのですが。locationteacher

これは、ポッド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 に答える