acf_field_clone::ajax_query │ public │ ACF 5.3.8
AJAX handler for getting potential fields to clone.
Метод класса: acf_field_clone{}
Хуков нет.
Возвращает
null. Ничего (null).
Использование
$acf_field_clone = new acf_field_clone(); $acf_field_clone->ajax_query();
Список изменений
| С версии 5.3.8 | Введена. |
Код acf_field_clone::ajax_query() acf field clone::ajax query ACF 6.4.2
public function ajax_query() {
$nonce = acf_request_arg( 'nonce', '' );
if ( ! acf_verify_ajax( $nonce, 'acf/fields/clone/query' ) ) {
die();
}
// disable field to allow clone fields to appear selectable
acf_disable_filter( 'clone' );
// options
$options = acf_parse_args(
$_POST,
array(
'post_id' => 0,
'paged' => 0,
's' => '',
'title' => '',
'fields' => array(),
)
);
// vars
$results = array();
$s = false;
$i = -1;
$limit = 20;
$range_start = $limit * ( $options['paged'] - 1 ); // 0, 20, 40
$range_end = $range_start + ( $limit - 1 ); // 19, 39, 59
// search
if ( $options['s'] !== '' ) {
// strip slashes (search may be integer)
$s = wp_unslash( strval( $options['s'] ) );
}
// load groups
$field_groups = acf_get_field_groups();
$field_group = false;
// bail early if no field groups
if ( empty( $field_groups ) ) {
die();
}
// move current field group to start
foreach ( array_keys( $field_groups ) as $j ) {
// check ID
if ( $field_groups[ $j ]['ID'] !== $options['post_id'] ) {
continue;
}
// extract field group and move to start
$field_group = acf_extract_var( $field_groups, $j );
// field group found, stop looking
break;
}
// if field group was not found, this is a new field group (not yet saved)
if ( ! $field_group ) {
$field_group = array(
'ID' => $options['post_id'],
'title' => $options['title'],
'key' => '',
);
}
// move current field group to start of list
array_unshift( $field_groups, $field_group );
// loop
foreach ( $field_groups as $field_group ) {
// vars
$fields = false;
$ignore_s = false;
$data = array(
'text' => $field_group['title'],
'children' => array(),
);
// get fields
if ( $field_group['ID'] == $options['post_id'] ) {
$fields = $options['fields'];
} else {
$fields = acf_get_fields( $field_group );
$fields = acf_prepare_fields_for_import( $fields );
}
// bail early if no fields
if ( ! $fields ) {
continue;
}
// show all children for field group search match
if ( $s !== false && stripos( $data['text'], $s ) !== false ) {
$ignore_s = true;
}
// populate children
$children = array();
$children[] = $field_group['key'];
foreach ( $fields as $field ) {
$children[] = $field['key']; }
// loop
foreach ( $children as $child ) {
// bail early if no key (fake field group or corrupt field)
if ( ! $child ) {
continue;
}
// vars
$text = false;
// bail early if is search, and $text does not contain $s
if ( $s !== false && ! $ignore_s ) {
// get early
$text = $this->get_clone_setting_choice( $child );
// search
if ( stripos( $text, $s ) === false ) {
continue;
}
}
// $i
++$i;
// bail early if $i is out of bounds
if ( $i < $range_start || $i > $range_end ) {
continue;
}
// load text
if ( $text === false ) {
$text = $this->get_clone_setting_choice( $child );
}
// append
$data['children'][] = array(
'id' => $child,
'text' => $text,
);
}
// bail early if no children
// - this group contained fields, but none shown on this page
if ( empty( $data['children'] ) ) {
continue;
}
// append
$results[] = $data;
// end loop if $i is out of bounds
// - no need to look further
if ( $i > $range_end ) {
break;
}
}
// return
acf_send_ajax_results(
array(
'results' => $results,
'limit' => $limit,
)
);
}