示例#1
0
 /**
  * Generate HTML structure content
  *
  * @global type $wpdb
  * @param type $configs
  * @param type $atts
  * @param type $content
  * @param type $post_contents: if true, it will return array of post objects. otherwise, it will return content, which is wrapped in li, ul
  * @return string
  */
 public function element_shortcode_($configs, $atts = null, $content = null, $contentclips = false)
 {
     global $wpdb;
     $html_element = $item_filter = '';
     $data = $arr_ids = $source = array();
     if ($atts == null) {
         $shortcode_params = shortcode_atts($configs, $atts);
     } else {
         $shortcode_params = $atts;
     }
     extract($shortcode_params);
     if (intval($cl_depth_level) == 0 or empty($ig_cl_source)) {
         return '';
     }
     $arr_post_types = array();
     foreach (IG_Pb_Helper_Type::get_post_types() as $slug => $name) {
         $arr_post_types[] = $slug;
     }
     $arr_taxonomies = array();
     foreach (IG_Pb_Helper_Type::get_term_taxonomies() as $slug => $name) {
         $arr_taxonomies[] = $slug;
     }
     // progress order by
     $orderby = $order = $offset = null;
     if (isset($ig_cl_orderby) and isset($ig_cl_order) and $ig_cl_orderby != 'no_order') {
         $orderby = $ig_cl_orderby;
         $order = $ig_cl_order == 'desc' ? 'desc' : 'asc';
     }
     $limit = isset($total_items) ? intval($total_items) : null;
     $items_per_page = isset($items_per_page) ? intval($items_per_page) : null;
     if (isset($items_per_page) && isset($limit) && $items_per_page < $limit) {
         $limit = $items_per_page;
         $offset = 0;
     }
     if (isset($contentclips_page)) {
         $offset = $items_per_page * ($contentclips_page - 1);
         $limit = intval($total_items) - $items_per_page * ($contentclips_page - 1);
         if ($limit > $items_per_page) {
             $limit = $items_per_page;
         }
     }
     $arr_has_parent = IG_Pb_Helper_Type::_get_exclude_taxonomies();
     $is_parent = in_array($ig_cl_source, $arr_has_parent);
     // source is not a parent item
     if (!$is_parent) {
         // source = single entries
         if (in_array($ig_cl_source, $arr_post_types)) {
             // with filter value
             if (!empty($item_filter)) {
                 IG_Pb_Helper_Type::post_by_termid($item_filter, $arr_ids, $source);
             }
             if (!empty($item_filter) && !count($arr_ids)) {
                 return null;
             }
             // query post entry
             $data = $this->querypost($ig_cl_source, $arr_ids, $limit, $offset, $orderby, $order);
             if (count($data)) {
                 $html_element = '<ul>';
                 foreach ($data as $i => $item) {
                     $html_element = self::output_post($item, $html_element);
                 }
                 $html_element .= '</ul>';
             }
         } elseif (in_array($ig_cl_source, $arr_taxonomies)) {
             // has filter items
             if ($item_filter) {
                 $arr_filters = explode(',', $item_filter);
                 // query post entry
                 $data = get_terms($ig_cl_source, array('hide_empty' => false, 'orderby' => 'name'));
                 if (count($data)) {
                     $html_element = '<ul>';
                     if ($item_filter == 'root') {
                         foreach ($data as $i => $item) {
                             $html_element = self::output_taxonomy($item, $ig_cl_source, $html_element);
                         }
                     } else {
                         foreach ($data as $i => $item) {
                             if (in_array($item->term_id, $arr_filters)) {
                                 $html_element = self::output_taxonomy($item, $ig_cl_source, $html_element);
                             }
                         }
                     }
                     $html_element .= '</ul>';
                 }
             } else {
                 $args = array('hide_empty' => false);
                 if ($orderby and $order) {
                     $args['orderby'] = $orderby;
                     $args['order'] = $order;
                 } else {
                     $args['orderby'] = 'name';
                 }
                 if (isset($limit)) {
                     $args['number'] = $limit;
                 }
                 $data = get_terms($ig_cl_source, $args);
                 if (count($data)) {
                     $html_element = '<ul>';
                     foreach ($data as $i => $item) {
                         $html_element = self::output_taxonomy($item, $ig_cl_source, $html_element);
                     }
                     $html_element .= '</ul>';
                 }
             }
         }
     } else {
         // source = single entries
         if (in_array($ig_cl_source, $arr_post_types)) {
             $data = $data_post = $this->querypost($ig_cl_source, $arr_ids, $limit, $offset, $orderby, $order);
             $level = $index = 0;
             if (count($data)) {
                 $html_element = '<ul>';
                 if ($limit) {
                     foreach ($data as $i => $item) {
                         $html_element = self::output_post($item, $html_element);
                     }
                 } else {
                     foreach ($data as $i => $item) {
                         if ($item->ID == $item_filter or $item_filter == 'root' and $item->post_parent == 0) {
                             unset($data[$i]);
                             if (!isset($data_content)) {
                                 $data_content = array();
                             }
                             $data_content[] = $item;
                             $html_element = self::output_post($item, $html_element, false);
                             $index = '';
                             self::_recur_tree($html_element, $data, $item->ID, $level, $cl_depth_level, '1', '', $index, '', $data_content);
                             $html_element .= '</li>';
                         }
                     }
                 }
                 $html_element .= '</ul>';
             }
         } else {
             if (in_array($ig_cl_source, $arr_taxonomies)) {
                 if ($limit) {
                     $args = array('hide_empty' => false);
                     if ($orderby and $order) {
                         $args['orderby'] = $orderby;
                         $args['order'] = $order;
                     } else {
                         $args['orderby'] = 'name';
                     }
                     $args['number'] = $limit;
                     $data = get_terms($ig_cl_source, $args);
                     $html_element = '<ul>';
                     foreach ($data as $i => $item) {
                         unset($data[$i]);
                         $html_element = self::output_taxonomy($item, $ig_cl_source, $html_element);
                     }
                     $html_element .= '</ul>';
                 } else {
                     $data = get_terms($ig_cl_source, array('hide_empty' => false, 'orderby' => 'name'));
                     $item_filter = isset($item_filter) ? $item_filter : 'root';
                     $level = 0;
                     $html_element = '<ul>';
                     foreach ($data as $i => $item) {
                         if ($item->term_id == $item_filter or $item_filter == 'root' and $item->parent == 0) {
                             unset($data[$i]);
                             $html_element = self::output_taxonomy($item, $ig_cl_source, $html_element, false);
                             self::_recur_tree($html_element, $data, $item->term_id, $level, $cl_depth_level, '-1', $ig_cl_source);
                             $html_element .= '</li>';
                         }
                     }
                     $html_element .= '</ul>';
                 }
             } else {
                 if ($ig_cl_source == 'nav_menu_item') {
                     if (isset($item_filter)) {
                         // process for menu case
                         $menu_start_from = isset($ig_cl_menu_start_from) ? $ig_cl_menu_start_from : '';
                         if ($menu_start_from != 'root') {
                             $menu_start_from = intval($menu_start_from);
                         } else {
                             $menu_start_from = '0';
                         }
                         $level = 0;
                         $data = wp_get_nav_menu_items($item_filter, array('update_post_term_cache' => false));
                         $html_element = '<ul>';
                         if ($data) {
                             foreach ($data as $i => $item) {
                                 unset($data[$i]);
                                 if ($menu_start_from == 0 and $item->menu_item_parent == $menu_start_from or $menu_start_from != 0 and $item->ID == $menu_start_from) {
                                     $html_element = self::output_post($item, $html_element, false, '', 'title');
                                     self::_recur_tree($html_element, $data, $item->ID, $level, $cl_depth_level, '0', '', $index, '');
                                     $html_element .= '</li>';
                                 }
                             }
                         }
                         $html_element .= '</ul>';
                     }
                 }
             }
         }
     }
     if ($contentclips) {
         return array('data' => isset($data_content) ? $data_content : $data, 'source' => $source);
     }
     return $html_element;
 }