/** * 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; }