advanced-custom-fields-pro/includes/ajax/class-acf-ajax-query-terms.php

141 lines
2.4 KiB
PHP

<?php
if( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
if( ! class_exists('ACF_Ajax_Query_Terms') ) :
class ACF_Ajax_Query_Terms extends ACF_Ajax_Query {
/** @var string The AJAX action name */
var $action = 'acf/ajax/query_terms';
/**
* get_args
*
* description
*
* @date 31/7/18
* @since 5.7.2
*
* @param type $var Description. Default.
* @return type Description.
*/
function get_args() {
// defaults
$args = wp_parse_args($this->get('query'), array(
'taxonomy' => 'category',
'search' => $this->search,
'number' => $this->per_page,
));
// pagination
if( $this->page > 0 ) {
$args['offset'] = $this->per_page * ($this->page - 1);
}
// return
return $args;
}
/**
* get_results
*
* description
*
* @date 31/7/18
* @since 5.7.2
*
* @param type $var Description. Default.
* @return type Description.
*/
function get_results( $args ) {
// vars
$results = array();
// get terms
$groups = acf_get_grouped_terms( $args );
// loop
if( $groups ) {
foreach( $groups as $label => $terms ) {
// data
$data = array(
'text' => $label,
'children' => array()
);
// convert object to string
foreach( $terms as $id => $term ) {
$terms[ $id ] = $this->get_result( $term );
}
// order posts by search
if( $this->search && !isset($args['orderby']) ) {
$terms = acf_order_by_search( $terms, $this->search );
}
// append to $data
foreach( $terms as $id => $text ) {
$this->count++;
$data['children'][] = array(
'id' => $id,
'text' => $text
);
}
// append to $results
$results[] = $data;
}}
// extract group children for a single taxonomy
$taxonomies = acf_get_array($args['taxonomy']);
if( count($taxonomies) == 1 ) {
$results = $results[0]['children'];
}
// return
return $results;
}
/**
* get_result
*
* description
*
* @date 31/7/18
* @since 5.7.2
*
* @param type $var Description. Default.
* @return type Description.
*/
function get_result( $term ) {
// vars
$title = $term->name;
// ancestors
$ancestors = get_ancestors( $term->term_id, $term->taxonomy );
if( $ancestors ) {
$prepend = str_repeat('- ', count($ancestors));
return $prepend . $title;
}
// return
return $title;
}
}
acf_new_instance('ACF_AJAX_Query_Terms');
endif; // class_exists check
?>