'', // javascript function name in the windows scope | if empty, shows results
'search_values' => 0,
'limit' => 15,
'delimiter' => '!!!CFRES!!!',
'controls_position' => 'right',
'class' => '',
'usermeta' => 0,
'show_pods' => false
);
public static function registerAjax() {
if ( !has_action('wp_ajax_wd_search_cf') ) {
add_action('wp_ajax_wd_search_cf', array(get_called_class(), 'search'));
}
}
function render() {
?>
args['class'] : "";?>'
id='wd_cf_search-'>
args['controls_position'] == 'left') $this->printControls(); ?>
label; ?>
args['controls_position'] != 'left') $this->printControls(); ?>
usermeta;
else
$table = $wpdb->postmeta;
if ($data['search_values'] == 1) {
$cf_query = $wpdb->prepare(
"SELECT DISTINCT(meta_key) FROM $table WHERE meta_key LIKE '%s' OR meta_value LIKE '%s' ORDER BY meta_key ASC LIMIT %d",
$phrase, $phrase, $data['limit']);
} else {
$cf_query = $wpdb->prepare(
"SELECT DISTINCT(meta_key) FROM $table WHERE meta_key LIKE '%s' ORDER BY meta_key ASC LIMIT %d",
$phrase, $data['limit']);
}
$cf_results = $wpdb->get_results( $cf_query );
$remaining_limit = $data['limit'] - count($cf_results);
if ( $remaining_limit > 0 ) {
// Fuzzy matches
$not_in_query = '';
$not_in = array();
foreach ($cf_results as $r) {
$not_in[] = $r->meta_key;
}
if (count($not_in) > 0) {
$not_in_query = " AND meta_key NOT IN ('" . implode("','", $not_in) . "')";
}
$phrase = '%' . trim($_POST['wd_phrase']) . '%';
if ($data['search_values'] == 1) {
$cf_query = $wpdb->prepare(
"SELECT DISTINCT(meta_key) FROM $table WHERE (meta_key LIKE '%s' OR meta_value LIKE '%s') $not_in_query ORDER BY meta_key ASC LIMIT %d",
$phrase, $phrase, $remaining_limit);
} else {
$cf_query = $wpdb->prepare(
"SELECT DISTINCT(meta_key) FROM $table WHERE (meta_key LIKE '%s') $not_in_query ORDER BY meta_key ASC LIMIT %d",
$phrase, $remaining_limit);
}
$cf_results = array_merge($cf_results, $wpdb->get_results($cf_query));
}
if ( $data['show_pods'] )
$pods_fields = self::searchPods($_POST['wd_phrase']);
else
$pods_fields = array();
Ajax::prepareHeaders();
print_r($data['delimiter'] . json_encode(array_merge($pods_fields, $cf_results)) . $data['delimiter']);
die();
}
private static function searchPods($s): array {
$ret = array();
if ( function_exists('pods_api') ) {
// Filter table storage based fields only
$pods = get_posts(array(
'fields' => 'ids',
'posts_per_page' => -1,
'post_type' => '_pods_pod',
'meta_query' => array(
array(
'key' => 'storage',
'value' => 'table',
'compare' => 'LIKE'
)
)
));
if ( !is_wp_error($pods) && !empty($pods) ) {
$pods_fields = get_posts(array(
'fields' => 'post_name',
'posts_per_page' => -1,
's' => $s,
'post_type' => '_pods_field',
'post_parent__in' => $pods // Only filtered parents by table storage type
));
if ( !is_wp_error($pods_fields) && !empty($pods_fields) ) {
foreach ($pods_fields as $f) {
$ret[] = array('meta_key' => '__pods__' . $f->post_name);
}
}
}
}
return $ret;
}
}