<?php namespace BdevsElement; defined( 'ABSPATH' ) || die(); class BDevs_El_Select2_Handler { public static function init () { add_action( 'wp_ajax_bdevs_element_post_list_query', [ __CLASS__, 'bdevs_element_post_list_query' ] ); add_action( 'wp_ajax_bdevs_element_post_tab_select_query', [ __CLASS__, 'post_tab_query' ] ); } /** * Return Post list based on post type */ public static function bdevs_element_post_list_query () { $security = check_ajax_referer( 'bdevs_element_Select2_Secret', 'security' ); if ( ! $security ) return; $post_type = isset( $_POST['post_type'] ) ? sanitize_text_field( $_POST['post_type'] ) : ''; if ( ! $post_type ) return; $select_type = isset( $_POST['select_type'] ) ? $_POST['select_type'] : false; $search_string = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : ''; $ids = isset( $_POST['id'] ) ? $_POST['id'] : array(); $data = []; $arg = [ 'post_status' => 'publish', 'post_type' => $post_type, 'posts_per_page' => -1, ]; $arg['s'] = $search_string; $arg['post__in'] = $ids; $query = new \WP_Query( $arg ); if ( $select_type === 'choose' && $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $data[] = [ 'id' => get_the_id(), 'text' => get_the_title(), ]; } wp_reset_postdata(); } if ( $select_type === 'selected' && $query->have_posts() ) { while ( $query->have_posts() ) { $query->the_post(); $data[get_the_id()] = get_the_title(); } wp_reset_postdata(); } // return the results in json. wp_send_json( $data ); } /** * Return Post tab query value */ public static function post_tab_query () { $security = check_ajax_referer( 'bdevs_element_Select2_Secret', 'security' ); if ( ! $security ) return; $tax_id = isset( $_POST['tax_id'] ) ? sanitize_text_field( $_POST['tax_id'] ) : ''; if ( ! $tax_id ) return; $select_type = isset( $_POST['select_type'] ) ? $_POST['select_type'] : false; $search = isset( $_POST['q'] ) ? sanitize_text_field( $_POST['q'] ) : ''; $ids = isset( $_POST['id'] ) ? $_POST['id'] : array(); $arg = [ 'taxonomy' => $tax_id, 'hide_empty' => true, 'include' => $ids, ]; if($search) $arg['search'] = $search; $terms = get_terms( $arg ); $data = []; if ( $select_type === 'choose' ) { foreach ($terms as $value){ $data[] = [ 'id' => $value->term_id, 'text' => $value->name . ' ('. $value->count.')', ]; } } if ( $select_type === 'selected' ) { foreach ($terms as $value){ $data[ $value->term_id ] = $value->name; } } // return the results in json. wp_send_json( $data ); } }