static function get_the_field($parameters, $id = null) { $result = ''; $field = $parameters['field']; if (!empty($parameters['id'])) { $id = $parameters['id']; } /*--------------------------------------------- * * Option field * */ if (!empty($parameters['option'])) { return self::get_option_field($field, $parameters['option']); } /*--------------------------------------------- * * Attachment field * */ if (!empty($parameters['type']) && $parameters['type'] == 'attachment' || CCS_Loop::$state['is_attachment_loop'] || CCS_Attached::$state['is_attachment_loop']) { return self::get_the_attachment_field($parameters); /*--------------------------------------------- * * Array field * */ } elseif (self::$state['is_array_field']) { $array = self::$state['current_field_value']; if (isset($array[$field])) { return $array[$field]; } elseif ($field == 'value') { if (is_array($array)) { $array = implode('', $array); } return $array; } // ACF gallery loop } elseif (class_exists('CCS_To_ACF') && CCS_To_ACF::$state['is_gallery_loop']) { return CCS_To_ACF::get_image_details_from_acf_gallery($parameters); /*--------------------------------------------- * * Repeater or flexible content loop * */ } elseif (empty($parameters['id']) && empty($parameters['name']) && class_exists('CCS_To_ACF') && CCS_To_ACF::$state['is_repeater_or_flex_loop']) { // If not inside relationship loop if (!CCS_To_ACF::$state['is_relationship_loop']) { // Get sub field if (function_exists('get_sub_field')) { return get_sub_field($field); } else { return null; } } /*--------------------------------------------- * * Menu loop * */ } elseif (CCS_Menu::$state['is_menu_loop']) { if (isset(CCS_Menu::$state['current_menu_object'][$field])) { return CCS_Menu::$state['current_menu_object'][$field]; } else { if (!isset(CCS_Menu::$state['current_menu_object']['id'])) { return; } // Get it from the post $id = CCS_Menu::$state['current_menu_object']['id']; CCS_Menu::$state['is_menu_loop'] = false; $result = do_shortcode('[field ' . $field . ' id=' . $id . ']'); CCS_Menu::$state['is_menu_loop'] = true; return $result; } } if (!empty($id)) { $post_id = $id; } else { // Default $post_id = get_the_ID(); /* global $post; if (!empty($post)) { $post_id = $post->ID; } */ } if (empty($post_id)) { return null; } // No post ID $post = get_post($post_id); if (empty($post)) { return null; } // No post /*--------------------------------------------- * * Prepare image attributes * */ $image_fields = array('image', 'image-full', 'image-link', 'image-link-self', 'thumbnail', 'thumbnail-link', 'thumbnail-link-self', 'gallery'); if ($field == 'thumbnail' && empty($parameters['size'])) { $parameters['size'] = 'thumbnail'; // Default thumbnail } $attr = array(); if (in_array($field, $image_fields)) { if (!empty($parameters['width']) || !empty($parameters['height'])) { $parameters['size'] = array((int) $parameters['width'], (int) $parameters['height']); } if (!empty($parameters['image_class'])) { $attr['class'] = $parameters['image_class']; } if (!empty($parameters['nopin'])) { $attr['nopin'] = $parameters['nopin']; } if (!empty($parameters['alt'])) { $attr['alt'] = $parameters['alt']; } // if (!empty($parameters['title'])) // $attr['title'] = $parameters['title']; } // Custom field only? if (!empty($parameters['custom']) && $parameters['custom'] == 'true') { $custom = $field; $field = 'custom'; // Skip predefined fields } /*--------------------------------------------- * * Pre-defined fields * */ switch ($field) { case 'id': $result = $post_id; break; case 'url': $result = get_permalink($post_id); break; case 'edit-url': $result = get_edit_post_link($post_id); break; case 'edit-link': $result = $post->post_title; break; case 'edit-link-self': $result = $post->post_title; break; case 'slug': $result = $post->post_name; break; case 'post-type': $result = $post->post_type; break; case 'post-type-name': $post_type = $post->post_type; $obj = get_post_type_object($post_type); $result = $obj->labels->singular_name; break; case 'post-type-plural': $post_type = $post->post_type; $obj = get_post_type_object($post_type); $result = $obj->labels->name; break; case 'post-status': $result = $post->post_status; if ($parameters['out'] !== 'slug') { $result = ucwords($result); } break; case 'post-format': if (function_exists('get_post_format')) { $result = get_post_format($post_id); } break; case 'post-format-name': if (function_exists('get_post_format')) { $result = get_post_format($post_id); $result = ucwords($result); } break; case 'post-format-link': if (function_exists('get_post_format')) { $result = get_post_format($post_id); $result = '<a href="' . get_post_format_link($result) . '">' . ucwords($result) . '</a>'; } break; case 'post-format-url': if (function_exists('get_post_format')) { $result = get_post_format_link(get_post_format($post_id)); } break; case 'parent-id': $parent_id = isset($post->post_parent) ? $post->post_parent : 0; if (!empty($parent_id)) { $result = $parent_id; } break; case 'parent-slug': $parent_id = isset($post->post_parent) ? $post->post_parent : 0; if (!empty($parent_id)) { $post_data = get_post($parent_id); if (!empty($post_data)) { $result = isset($post_data->post_name) ? $post_data->post_name : ''; } } break; case 'link': case 'title-link': case 'title-link-out': case 'title': $result = $post->post_title; break; case 'author': $author_id = $post->post_author; $user = get_user_by('id', $author_id); if (!empty($parameters['meta'])) { $result = get_the_author_meta($parameters['meta'], $author_id); } elseif (!empty($user)) { $result = $user->display_name; } break; case 'author-id': $result = $post->post_author; break; case 'author-url': $result = get_author_posts_url($post->post_author); break; case 'author-login': $author_id = $post->post_author; $result = do_shortcode('[users id=' . $author_id . '][user name][/users]'); break; case 'avatar': if (!empty($parameters['size'])) { $result = get_avatar($post->post_author, $parameters['size']); } else { $result = get_avatar($post->post_author); } break; case 'date': if (!empty($parameters['date_format'])) { if ($parameters['date_format'] == 'relative') { $result = CCS_Format::get_relative_date($post->post_date); } else { $result = mysql2date($parameters['date_format'], $post->post_date); } } else { // Default date format under Settings -> General $result = mysql2date(get_option('date_format'), $post->post_date); } break; case 'modified': if (!empty($parameters['date_format'])) { $result = get_post_modified_time($parameters['date_format'], $gmt = false, $post_id, $translate = true); } else { // Default date format under Settings -> General $result = get_post_modified_time(get_option('date_format'), $gmt = false, $post_id, $translate = true); } break; case 'image-full': $parameters['size'] = 'full'; case 'image': // image // image case 'image-link': // image with link to post // image with link to post case 'image-link-self': // image with link to attachment page $parameters['size'] = isset($parameters['size']) && !empty($parameters['size']) ? $parameters['size'] : 'full'; if (empty($attr['alt'])) { $attr['alt'] = self::wp_get_featured_image_field($post_id, 'alt'); } $result = get_the_post_thumbnail($post_id, $parameters['size'], $attr); break; case 'image-url': $parameters['size'] = isset($parameters['size']) && !empty($parameters['size']) ? $parameters['size'] : 'full'; $src = wp_get_attachment_image_src(get_post_thumbnail_id($post_id), $parameters['size']); $result = $src['0']; // $result = wp_get_attachment_url(get_post_thumbnail_id($post_id)); break; case 'image-title': case 'image-caption': case 'image-alt': case 'image-description': $image_field_name = substr($field, 6); // Remove "image-" $result = self::wp_get_featured_image_field($post_id, $image_field_name); break; case 'thumbnail': // thumbnail // thumbnail case 'thumbnail-link': // thumbnail with link to post // thumbnail with link to post case 'thumbnail-link-self': // thumbnail with link to attachment page $parameters['size'] = isset($parameters['size']) && !empty($parameters['size']) ? $parameters['size'] : 'thumbnail'; if (empty($attr['alt'])) { $attr['alt'] = self::wp_get_featured_image_field($post_id, 'alt'); } $result = get_the_post_thumbnail($post_id, $parameters['size'], $attr); break; case 'thumbnail-url': $src = wp_get_attachment_image_src(get_post_thumbnail_id($post_id), 'thumbnail'); $result = $src['0']; break; case 'tags': $result = implode(' ', wp_get_post_tags($post_id, array('fields' => 'names'))); break; case 'gallery': // Get specific image from gallery field if (class_exists('CCS_Gallery_Field')) { // Check if gallery field is enabled $attachment_ids = CCS_Gallery_Field::get_image_ids($post_id); if (empty($parameters['num'])) { $parameters['num'] = 1; } if (empty($parameters['size'])) { $parameters['size'] = 'full'; } $result = wp_get_attachment_image($attachment_ids[$parameters['num'] - 1], $parameters['size'], $icon = false, $attr); } break; case 'excerpt': // Get excerpt // $result = get_the_excerpt(); $result = $post->post_excerpt; if (empty($result)) { // If empty, get it from post content $result = $post->post_content; if (empty($parameters['words']) && empty($parameters['length'])) { self::$parameters['words'] = 25; } } break; case 'debug': ob_start(); echo '<pre>'; print_r(get_post_custom($post_id)); echo '</pre>'; if (function_exists('acf_get_fields_by_id')) { echo '<pre>'; print_r(acf_get_fields_by_id($post_id)); echo '</pre>'; } $result = ob_get_clean(); break; case 'loop-count': $result = CCS_Loop::$state['loop_count']; break; default: /*--------------------------------------------- * * Custom field * */ if (!empty($parameters['custom']) && $parameters['custom'] == 'true') { $field = $custom; } $result = get_post_meta($post_id, $field, true); if (is_numeric($result) && !empty($parameters['return'])) { if ($parameters['return'] == 'page-link') { // ACF page link: get URL from post ID $result = get_permalink($result); } else { // Get attachment field $parameters['id'] = $result; $parameters['field'] = $parameters['return']; $result = self::get_the_attachment_field($parameters); } } elseif (!empty($parameters['property']) && is_object($result)) { $result = self::get_object_property($result, $parameters['property']); } elseif (!empty($parameters['currency']) || !empty($parameters['decimals']) || !empty($parameters['point']) || !empty($parameters['thousands'])) { $currency = !empty($parameters['currency']) ? $parameters['currency'] : ''; $decimals = !empty($parameters['decimals']) ? $parameters['decimals'] : 2; $point = !empty($parameters['point']) ? $parameters['point'] : '.'; $thousands = !empty($parameters['thousands']) ? $parameters['thousands'] : ','; $result = CCS_Format::getCurrency($result, $currency, $decimals, $point, $thousands); } break; } return $result; }
function loop_related_posts($atts, $content) { global $post; $outputs = array(); $current_count = 0; if (CCS_Loop::$state['is_loop']) { $post_id = CCS_Loop::$state['current_post_id']; $post_type = do_ccs_shortcode('[field post-type]', false); } elseif (!empty($post)) { $post_id = $post->ID; $post_type = $post->post_type; } else { $post_id = 0; $post_type = 'any'; } extract(shortcode_atts(array('type' => '', 'taxonomy' => 'category', 'field' => '', 'taxonomy_field' => '', 'value' => '', 'subfield' => '', 'count' => '', 'children' => '', 'order' => 'DESC', 'orderby' => 'date', 'relation' => 'or', 'operator' => 'in', 'trim' => ''), $atts)); if (!empty($type)) { $post_type = CCS_Loop::explode_list($type); } if (empty($field) && isset($atts[0])) { $field = $atts[0]; } if (!empty($taxonomy_field)) { $terms = do_ccs_shortcode('[field ' . $taxonomy_field . ']', false); $terms = CCS_Loop::explode_list($terms); if (empty($terms) || count($terms) == 0) { return; } $taxonomies = array(); $term_objects = array(); foreach ($terms as $term) { $term = self::get_term_by_id($term); $tax = $term->taxonomy; if (!in_array($tax, $taxonomies)) { $taxonomies[] = $term->taxonomy; } $term_objects[] = $term; } $taxonomy = implode(',', $taxonomies); $terms = $term_objects; } /*--------------------------------------------- * * ACF relationship field * */ if ((!empty($field) || !empty($subfield)) && empty($value)) { if (class_exists('CCS_To_ACF') && CCS_To_ACF::is_acf_active()) { return CCS_To_ACF::loop_relationship_field($atts, $content); } } /*--------------------------------------------- * * Related posts by taxonomy * */ if (empty($count)) { $count = 99999; } // Hypothetical maximum number of posts if (!empty($taxonomy)) { self::$state['is_related_posts_loop'] = true; // Support multiple taxonomies $taxonomies = CCS_Loop::explode_list($taxonomy); $relation = strtoupper($relation); $tax_count = 0; $query = array('post_type' => $post_type, 'posts_per_page' => -1, 'order' => $order, 'orderby' => $orderby, 'tax_query' => array()); $target_terms = array(); foreach ($taxonomies as $current_taxonomy) { if ($current_taxonomy == 'tag') { $current_taxonomy = 'post_tag'; } // Get current post's taxonomy terms - unless given if (!isset($terms)) { $term_objects = CCS_Content::get_the_terms_silently($post_id, $current_taxonomy); } else { $term_objects = $terms; } if (!is_array($term_objects) || empty($term_objects)) { continue; } foreach ($term_objects as $term) { $target_terms[$current_taxonomy][] = $term->term_id; } if (empty($target_terms[$current_taxonomy])) { continue; } if ($tax_count == 1) { $query['tax_query']['relation'] = $relation; } $query['tax_query'][] = array('taxonomy' => $current_taxonomy, 'field' => 'id', 'terms' => $target_terms[$current_taxonomy], 'operator' => strtoupper($operator), 'include_children' => $children == 'true'); $tax_count++; } $terms = $target_terms; // print_r($query); echo '<br><br>'; $posts = new WP_Query($query); if ($posts->have_posts()) { while ($posts->have_posts()) { // Set up post data $posts->the_post(); // Skip current post if ($post->ID != $post_id) { // Manually filter out terms.. // For some reason, WP_Query is returning more than we need $condition = false; $tax_count = 0; foreach ($taxonomies as $current_taxonomy) { if ($current_taxonomy == 'tag') { $current_taxonomy = 'post_tag'; } // Include child terms if ($children == 'true' && isset($terms[$current_taxonomy])) { foreach ($terms[$current_taxonomy] as $this_term) { $child_terms = get_term_children($this_term, $current_taxonomy); if (!empty($child_terms)) { foreach ($child_terms as $child_term) { if (!in_array($child_term, $terms[$current_taxonomy])) { $terms[$current_taxonomy][] = $child_term; } } } } } if (isset($terms[$current_taxonomy])) { $tax_count++; if ($relation == 'AND') { if (has_term($terms[$current_taxonomy], $current_taxonomy)) { if ($condition || $tax_count == 1) { $condition = true; } } } else { if (has_term($terms[$current_taxonomy], $current_taxonomy)) { $condition = true; } } } } if ($condition) { // OK, post fits the criteria self::$state['current_related_post_id'] = $post->ID; $current_count++; if ($current_count <= $count) { $outputs[] = do_ccs_shortcode($content); } } } } } wp_reset_postdata(); self::$state['is_related_posts_loop'] = false; } $out = implode('', $outputs); if (!empty($trim)) { $out = CCS_Format::trim($out, $trim); } return $out; }
function general_repeater_shortcode($atts, $content) { if (isset($atts['meta']) && !empty($atts['meta']) || isset($atts['metabox']) && !empty($atts['metabox'])) { return self::wck_repeater_shortcode($atts, $content); } else { if (class_exists('CCS_To_ACF')) { return CCS_To_ACF::loop_through_acf_field($atts, $content); } } }
public static function loop_through_acf_field($atts, $content) { /* For repeater and flexible content fields */ extract(shortcode_atts(array('field' => '', 'count' => '', 'start' => '', 'num' => '', 'row' => '', 'sub' => '', 'sub_image' => '', 'size' => '', 'format' => '', 'trim' => '', 'columns' => '', 'pad' => '', 'between' => '', 'option' => ''), $atts)); if (!empty($row)) { $num = $row; } // Alias if (!empty($num) && $num != 'rand') { $start = $num; $count = 1; } if (empty($field) && isset($atts[0])) { $field = $atts[0]; } if (empty($content) && (!empty($sub) || !empty($sub_image))) { if (!empty($sub_image)) { $content = '[acf_sub image="' . $sub_image . '"'; } else { $content = '[acf_sub field="' . $sub . '"'; } // Display sub field if (!empty($size)) { $content .= ' size= "' . $size . '"'; } if (!empty($format)) { $content .= ' format= "' . $format . '"'; } $content .= ']'; } // Support getting field from option page $option = $option == 'true' ? 'option' : false; if (have_rows($field, $option)) { $index_now = 0; self::$state['repeater_index'] = 0; $outputs = array(); if ($start == '') { $start = '1'; } while (have_rows($field, $option)) { // Keep true for each row in case nested self::$state['is_repeater_or_flex_loop'] = true; the_row(); // Move index forward $index_now++; self::$state['repeater_index']++; if ($index_now >= $start) { /* Start loop */ if (!empty($count) && $index_now >= $start + $count) { // If over count, continue empty looping for has_sub_field } else { $prev_state = self::$state; // Store current state $outputs[] = str_replace('{COUNT}', $index_now, do_ccs_shortcode($content)); self::$state = $prev_state; // Restore current state } } } self::$state['is_repeater_or_flex_loop'] = false; self::$state['repeater_index'] = 0; } else { return null; } if ($num == 'rand') { shuffle($outputs); $item = array_pop($outputs); $outputs = array($item); } $output = ''; if (!empty($outputs) && is_array($outputs)) { if (!empty($columns)) { $output = CCS_Loop::render_columns($outputs, $columns, $pad, $between); } else { $output = implode('', $outputs); if (!empty($trim)) { $output = CCS_Format::trim($output, $trim); } } } return $output; }