function process_result($result, $parameters) { // If it's an array, make it a list if (is_array($result)) { $result = implode($parameters['glue'], $result); } // Support qTranslate Plus $result = self::check_translation($result); if ($parameters['slugify'] == 'true') { $result = sanitize_title($result); } /*--------------------------------------------- * * Time/date * */ // Format ACF date field if (!empty($parameters['acf_date'])) { if (function_exists('get_field')) { $result = get_field($parameters['field'], $post_id = false, $format_value = false); } } if (!empty($parameters['timestamp']) && $parameters['timestamp'] == 'ms') { $result = $result / 1000; } if (!empty($parameters['date_format']) && !empty($parameters['field']) && $parameters['field'] != 'date' && $parameters['field'] != 'modified') { // Date format for custom field if (!empty($parameters['in']) && $parameters['in'] == "timestamp" && is_numeric($result)) { $result = gmdate("Y-m-d H:i:s", $result); } if ($parameters['date_format'] == 'true') { $parameters['date_format'] = get_option('date_format'); } $result = mysql2date($parameters['date_format'], $result); } // ACF cropped image field if (!empty($parameters['cropped'])) { // Get attachment ID $result = json_decode($result, true); $result = $result['cropped_image']; // Attachment field $return = !empty($parameters['return']) ? $parameters['return'] : 'image'; $result = do_shortcode('[attached-field ' . $return . ' id=' . $result . ']'); } /*--------------------------------------------- * * Trim by words or characters * */ if ($parameters['dots'] == 'false') { $parameters['dots'] = false; } elseif ($parameters['dots'] == 'true') { $parameters['dots'] = '…'; } if (!empty($parameters['words'])) { $result = self::process_shortcodes($result, $parameters); $parameters['shortcode'] = 'false'; /* if ($parameters['html']=='true') { $result = CCS_Format::trim_with_tags( $result, $parameters['words'], $parameters['dots'], $words=true ); } else { // TODO: Combine with above */ if (intval($parameters['words']) < 0) { // Remove X words from beginning and return the rest // If format, do it before content gets trimmed if ($parameters['format'] == 'true' || $parameters['html'] == 'true') { $whole_result = CCS_Format::trim_words_with_tags($result, 9999, ''); if ($parameters['format'] == 'true') { $result = wpautop($result); } $result = CCS_Format::trim_words_with_tags($result, 0 - $parameters['words'], $parameters['dots']); } else { $whole_result = wp_trim_words($result, 9999, ''); $result = wp_trim_words($result, 0 - $parameters['words'], ''); } // Offset and get the rest $result = substr($whole_result, strlen($result)); } else { // If format, do it before content gets trimmed if ($parameters['format'] == 'true' || $parameters['html'] == 'true') { if ($parameters['format'] == 'true') { $result = wpautop($result); } $result = CCS_Format::trim_words_with_tags($result, $parameters['words'], $parameters['dots']); } else { $result = wp_trim_words($result, $parameters['words'], $parameters['dots']); } } // } } // Trim by length if (!empty($parameters['length'])) { $result = self::process_shortcodes($result, $parameters); $parameters['shortcode'] = 'false'; if ($parameters['html'] == 'true') { $result = CCS_Format::trim_with_tags($result, $parameters['length'], $parameters['dots']); } else { $result = strip_tags($result); $add_dots = strlen($result) > intval($parameters['length']); // Support multi-byte character code $result = mb_substr($result, 0, $parameters['length'], 'UTF-8'); if ($add_dots) { $result .= $parameters['dots']; } } } // Trim to last sentence or word if ($parameters['sentence'] == 'true' || $parameters['word'] == 'true') { $len = strlen($result); $ends = array('.', '?', '!'); if ($parameters['word'] == 'true') { $ends = array_merge($ends, array(' ', ',')); } for ($i = $len - 1; $i >= 0; $i--) { if (in_array($result[$i], $ends)) { break; // Found the end } else { // Trim each character $result = substr($result, 0, -1); } } } /*--------------------------------------------- * * Escape/unescape HTML and shortcodes * */ if ($parameters['escape'] == 'true') { $result = str_replace(array('[', ']'), array('[', ']'), esc_html($result)); if (empty($parameters['shortcode'])) { $parameters['shortcode'] = 'false'; } } if ($parameters['unescape'] == 'true') { $result = str_replace(array('[', ']'), array('[', ']'), htmlspecialchars_decode($result)); } /*--------------------------------------------- * * Wrap in link * */ if ($parameters['custom'] == 'true') { // Skip predefined fields $field = $parameters['field']; $parameters['field'] = 'custom'; } $post_id = !empty(self::$state['current_post_id']) ? self::$state['current_post_id'] : get_the_ID(); $link_text_fields = array('link', 'edit-link', 'edit-link-self', 'title-link', 'title-link-out'); if (in_array($parameters['field'], $link_text_fields)) { if (!empty($parameters['link_text'])) { $result = $parameters['link_text']; } } $att = ''; if (!empty($parameters['link_id'])) { $att .= ' id="' . $parameters['link_id'] . '"'; } if (!empty($parameters['link_class'])) { $parameters['class'] = $parameters['link_class']; } if (!empty($parameters['class'])) { $att .= ' class="' . $parameters['class'] . '"'; } switch ($parameters['field']) { case "edit-link": $url = isset(self::$state['current_link_url']) ? self::$state['current_link_url'] : get_edit_post_link($post_id); $result = '<a ' . $att . ' target="_blank" href="' . $url . '">' . $result . '</a>'; break; case "edit-link-self": $url = isset(self::$state['current_link_url']) ? self::$state['current_link_url'] : get_edit_post_link($post_id); $result = '<a ' . $att . ' href="' . $url . '">' . $result . '</a>'; break; case "image-link": // Link image to post // Link image to post case "thumbnail-link": // Link thumbnail to post // Link thumbnail to post case "title-link": // Link title to post // Link title to post case "link": // Link to post // Menu items are already links if (!CCS_Menu::$state['is_menu_loop']) { $url = isset(self::$state['current_link_url']) ? self::$state['current_link_url'] : get_permalink($post_id); $label = $result; if (!empty($parameters['title'])) { $url .= '" title="' . esc_html($parameters['title'] == 'true' ? get_the_title($post_id) : $parameters['title']); } $result = '<a ' . $att . ' href="' . $url . '">' . $label . '</a>'; } break; case "image-post-link-out": // Link image to post // Link image to post case "thumbnail-post-link-out": // Link thumbnail to post // Link thumbnail to post case "title-link-out": // Open link in new tab $url = isset(self::$state['current_link_url']) ? self::$state['current_link_url'] : get_permalink($post_id); $result = '<a ' . $att . ' target="_blank" href="' . $url . '">' . $result . '</a>'; break; case "image-link-self": case "thumbnail-link-self": // Link to image attachment page $url = isset(self::$state['current_link_url']) ? self::$state['current_link_url'] : get_attachment_link(get_post_thumbnail_id($post_id)); $result = '<a ' . $att . ' href="' . $url . '">' . $result . '</a>'; break; // Not a link // Not a link default: if (!empty($parameters['class'])) { $result = '<div class="' . $parameters['class'] . '">' . $result . '</div>'; } if ($parameters['http'] == 'true') { if (!empty($result) && substr($result, 0, 4) !== 'http') { $result = 'http://' . $result; } } break; } if ($parameters['custom'] == 'true') { // Restore original $parameters['field'] = $field; } // Auto-embed if ($parameters['embed'] == 'true') { if (isset($GLOBALS['wp_embed'])) { $wp_embed = $GLOBALS['wp_embed']; $result = $wp_embed->autoembed($result); // Run [audio], [video] in embed $result = do_shortcode($result); } } // Do shortcode before formatting if ($parameters['shortcode'] == 'true') { $result = self::process_shortcodes($result, $parameters); } else { // Gets passed to global do_shortcode.. // TODO: How to protect field value? // This won't work if it's inside HTML attribute.. // $result = '[direct]'.$result.'[/direct]'; } // Then the_content filter or format if ($parameters['filter'] == 'true') { // Attempt to support SiteOrigin Page Builder add_filter('siteorigin_panels_filter_content_enabled', array($this, 'siteorigin_support')); $result = apply_filters('the_content', $result); // And clean up remove_filter('siteorigin_panels_filter_content_enabled', array($this, 'siteorigin_support')); } else { if ($parameters['format'] == 'true' && empty($parameters['words'])) { if (function_exists('ccs_raw_format')) { $result = ccs_raw_format($result, false); } else { $result = wpautop($result); } } $result = str_replace(array('[raw]', '[/raw]'), '', $result); } if ($parameters['texturize'] == 'true') { $result = wptexturize($result); } if ($parameters['nl'] == 'true') { $result = trim(preg_replace('/\\s+/', ' ', $result)); } /*--------------------------------------------- * * Read more tag * */ if (!empty($parameters['more'])) { $until_pos = strpos($result, '<!--more-->'); if ($until_pos !== false) { $result = substr($result, 0, $until_pos); // Get content until tag } elseif (empty($parameters['field'])) { // If post content has no read-more tag, trim it if (empty($parameters['words']) && empty($parameters['length'])) { // It hasn't been trimmed yet if (!empty($parameters['dots'])) { if ($parameters['dots'] == 'false') { $parameters['dots'] = false; } elseif ($parameters['dots'] == 'true') { $parameters['dots'] = '…'; } // default $result = wp_trim_words($result, 25, $parameters['dots']); } else { $result = wp_trim_words($result, 25); } } } if ($parameters['more'] == 'true') { $more = 'Read more'; } else { $more = $parameters['more']; } if ($more != 'none') { if ($parameters['link'] == 'false') { $result .= $more; } else { if (empty($parameters['between'])) { $result .= '<br>'; } elseif ($parameters['between'] != 'false') { $result .= $parameters['between']; } $result .= '<a class="more-tag" href="' . get_permalink($post_id) . '">' . $more . '</a>'; } } } // End return $result; }