From 7d1223cad9accbac86c3e512bd6b6fe4dcda2ab0 Mon Sep 17 00:00:00 2001 From: Gabriele Diener Date: Wed, 31 Aug 2016 10:38:55 +0200 Subject: [PATCH] Added relation fields with taxonomy in AeriaMetabox --- classes/AeriaMetabox.php | 3 +- classes/AeriaUtils.php | 157 +++++++++++++++++++++++----------- resources/js/select2-aeria.js | 10 ++- 3 files changed, 115 insertions(+), 55 deletions(-) diff --git a/classes/AeriaMetabox.php b/classes/AeriaMetabox.php index 33c0b80..274669b 100755 --- a/classes/AeriaMetabox.php +++ b/classes/AeriaMetabox.php @@ -558,8 +558,9 @@ function show_field_select($field, $meta) { function show_field_select_ajax($field, $meta) { if (!is_array($meta)) $meta = (array) $meta; $meta_value = html_addslashes(empty($meta)?'':$meta[0]); + $field['with'] = !empty($field['with']) && in_array($field['with'], ["post_type", "taxonomy"]) ? $field['with'] : "post_type"; $this->show_field_begin($field, $meta); - echo " "; + echo " "; $this->show_field_end($field, $meta); } diff --git a/classes/AeriaUtils.php b/classes/AeriaUtils.php index 8e4628b..b708303 100755 --- a/classes/AeriaUtils.php +++ b/classes/AeriaUtils.php @@ -11,47 +11,80 @@ public static function search($q=null,$page=1,$posts_per_page=10,$post_type='pos $page = isset($_REQUEST['page'])?$_REQUEST['page']:$page; $posts_per_page = isset($_REQUEST['posts_per_page'])?$_REQUEST['posts_per_page']:$posts_per_page; $post_type = isset($_REQUEST['post_type'])?$_REQUEST['post_type']:$post_type; + $type = !empty($_REQUEST['type']) && in_array($_REQUEST['type'], ["post_type", "taxonomy"]) ? $_REQUEST['type'] : "post_type" ; if(is_numeric($page) && is_numeric($posts_per_page)) { - - if(strlen($q)>0) { - $results = get_posts([ - 'posts_per_page' => $posts_per_page, - 'offset' => ($page-1)*$posts_per_page, - 'post_type' => $post_type, - 'orderby' => 'title', - 'order' => 'ASC', - 'post_title_like' => $q, - 'suppress_filters' => false - - ]); - }else{ - $results = get_posts([ - 'posts_per_page' => $posts_per_page, - 'offset' => ($page-1)*$posts_per_page, - 'post_type' => $post_type, - 'orderby' => 'title', - 'order' => 'ASC', - 'suppress_filters' => false - ]); - } - - - $number_results = wp_count_posts($post_type); - - $posts_result = []; - foreach ($results as $key => $result) { - $posts_result[] = [ - 'id' => $result->ID, - 'text' => $result->post_title + if ($type == "post_type") { + if(strlen($q)>0) { + $results = get_posts([ + 'posts_per_page' => $posts_per_page, + 'offset' => ($page-1)*$posts_per_page, + 'post_type' => $post_type, + 'orderby' => 'title', + 'order' => 'ASC', + 'post_title_like' => $q, + 'suppress_filters' => false + + ]); + }else{ + $results = get_posts([ + 'posts_per_page' => $posts_per_page, + 'offset' => ($page-1)*$posts_per_page, + 'post_type' => $post_type, + 'orderby' => 'title', + 'order' => 'ASC', + 'suppress_filters' => false + ]); + } + + + $number_results = wp_count_posts($post_type); + $posts_result = []; + foreach ($results as $key => $result) { + $posts_result[] = [ + 'id' => $result->ID, + 'text' => $result->post_title + ]; + } + + $posts = [ + 'total' => $number_results->publish, + 'result' => $posts_result + ]; + } else { + if(strlen($q)>0) { + $results = get_terms( $post_type, [ + 'hide_empty' => false, + 'offset' => ($page-1)*$posts_per_page, + 'name__like' => $q, + 'orderby' => 'name', + 'order' => 'ASC', + 'number' => $posts_per_page, + ]); + } else { + $results = get_terms( $post_type, [ + 'hide_empty' => false, + 'offset' => ($page-1)*$posts_per_page, + 'orderby' => 'name', + 'order' => 'ASC', + 'number' => $posts_per_page, + ]); + } + $number_results = wp_count_terms($post_type); + $posts_result = []; + foreach ($results as $key => $result) { + $posts_result[] = [ + 'id' => $result->term_id, + 'text' => $result->name + ]; + } + + $posts = [ + 'total' => $number_results, + 'result' => $posts_result ]; } - $posts = [ - 'total' => $number_results->publish, - 'result' => $posts_result - ]; - } header("Content-Type: application/json",true); @@ -60,30 +93,52 @@ public static function search($q=null,$page=1,$posts_per_page=10,$post_type='pos } - public static function search_init($id=null,$multiple=false){ - + public static function search_init($id=null,$multiple=false,$post_type='post'){ + $id = isset($_REQUEST['id'])?$_REQUEST['id']:$id; $multiple = isset($_REQUEST['multiple'])?$_REQUEST['multiple']:$multiple; + $type = !empty($_REQUEST['type']) && in_array($_REQUEST['type'], ["post_type", "taxonomy"]) ? $_REQUEST['type'] : "post_type" ; + $post_type = isset($_REQUEST['post_type'])?$_REQUEST['post_type']:$post_type; + + if ($type == "post_type") { + if($multiple=="true") { + $result = []; + $posts = explode(',',$id); + foreach ($posts as $key => $post_id) { + $post = new AeriaPost($post_id); + $result[] = [ + 'id' => $post->id, + 'text' => $post->title + ]; + } + }else{ + $post = new AeriaPost($id); - if($multiple=="true") { - $result = []; - $posts = explode(',',$id); - foreach ($posts as $key => $post_id) { - $post = new AeriaPost($post_id); - $result[] = [ + $result = [ 'id' => $post->id, 'text' => $post->title ]; } - }else{ - $post = new AeriaPost($id); + } else { + if($multiple=="true") { + $result = []; + $posts = explode(',',$id); + foreach ($posts as $key => $post_id) { + $post = get_term_by('id', $post_id, $post_type); + $result[] = [ + 'id' => $post->term_id, + 'text' => $post->name + ]; + } + }else{ + $post = get_term_by('id', $id, $post_type); - $result = [ - 'id' => $post->id, - 'text' => $post->title - ]; + $result = [ + 'id' => $post->term_id, + 'text' => $post->name + ]; + } } - header("Content-Type: application/json",true); echo json_encode($result); exit; diff --git a/resources/js/select2-aeria.js b/resources/js/select2-aeria.js index 0c7bc6a..fa716e0 100755 --- a/resources/js/select2-aeria.js +++ b/resources/js/select2-aeria.js @@ -54,7 +54,8 @@ window.aeria_init_select2_ajax = function(){ }else{ multiple = false; } - var relation = $this.attr('data-relation'); + var relation = $this.attr('data-relation'), + type = $this.attr('data-with'); if( ! $this.data("select2")){ $this.select2({ minimumInputLength: 0, @@ -72,7 +73,8 @@ window.aeria_init_select2_ajax = function(){ page: page, posts_per_page : posts_per_page, action: 'aeria_search', - post_type: relation + post_type: relation, + type: type }; }, results: function (data, page) { @@ -89,7 +91,9 @@ window.aeria_init_select2_ajax = function(){ data: { id : id, action : 'aeria_search_init', - multiple : multiple + multiple : multiple, + type: type, + post_type: relation, }, dataType: "json" }).done(function(data) {