コード例 #1
0
ファイル: content.php プロジェクト: surreal8/wptheme
 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('&#91;', '&#93;'), esc_html($result));
         if (empty($parameters['shortcode'])) {
             $parameters['shortcode'] = 'false';
         }
     }
     if ($parameters['unescape'] == 'true') {
         $result = str_replace(array('&#91;', '&#93;'), 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'] = '&hellip;';
                     }
                     // 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;
 }