xprofile_update_clones_on_template_update( BP_XProfile_Field $field )

Update repeater/clone fields when the main/template field is updated.

Description

Parameters

$field

(BP_XProfile_Field) (Required) Description

Source

File: bp-xprofile/bp-xprofile-repeaters.php

function xprofile_update_clones_on_template_update ( $field ) {
    global $wpdb;
    $bp = buddypress();
    
    //get all clone field ids
    $clone_ids = $wpdb->get_col( $wpdb->prepare(
        "SELECT f.id FROM {$bp->profile->table_name_fields} AS f JOIN {$bp->profile->table_name_meta} AS fm ON f.id = fm.object_id "
        . " WHERE f.parent_id = 0 AND fm.meta_key = '_cloned_from' AND fm.meta_value = %d ",
        $field->id
    ) );
        
    if ( empty( $clone_ids ) || is_wp_error( $clone_ids ) ) {
        return;
    }
    
    $db_row = $wpdb->get_row( $wpdb->prepare( "SELECT * FROM {$bp->profile->table_name_fields} WHERE id = %d", $field->id ), ARRAY_A );
    
    if ( !empty( $db_row ) && !is_wp_error( $db_row ) ) {
        $sql = $wpdb->prepare(
            "UPDATE {$bp->profile->table_name_fields} SET "
            . " group_id = %d, parent_id = %d, type = %s, name = %s, description = %s, is_required = %d, "
            . " is_default_option = %d, option_order = %d, order_by = %d, can_delete = %d "
            . " WHERE id IN ( ". implode( ',', $clone_ids ) ." )",
            $db_row[ 'group_id' ], $db_row[ 'parent_id' ], $db_row[ 'type' ], $db_row[ 'name' ], $db_row[ 'description' ], $db_row[ 'is_required' ],
            $db_row[ 'is_default_option' ], $db_row[ 'option_order' ], $db_row[ 'order_by' ], $db_row[ 'can_delete' ]
        );
            
        $wpdb->query( $sql );
        
        $metas = $wpdb->get_results( "SELECT * FROM {$bp->profile->table_name_meta} WHERE object_id = {$field->id} AND object_type = 'field'", ARRAY_A );
        
        if ( !empty( $metas ) && !is_wp_error( $metas ) ) {
            foreach ( $clone_ids as $clone_id ) {
                foreach ( $metas as $meta ) {
                    bp_xprofile_update_meta( $clone_id, 'field', $meta['meta_key'], $meta['meta_value'] );
                }
            }
        }
    }
}

Questions?

We're always happy to help with code or other questions you might have! Search our developer docs, contact support, or connect with our sales team.