/**
  * Expand known postmeta macros in the content
  *
  * Very literal, it will treat all the macros as postmeta macros.
  *
  * @param  string $content Content to expand macros in
  * @param  mixed $post Post to fetch metas for
  * @return string Expanded content
  */
 public function expand_all($content, $post)
 {
     if (empty($content)) {
         return $content;
     }
     if (empty($post)) {
         return $content;
     }
     $tags = $this->get_tags($content);
     if (empty($tags)) {
         return $content;
     }
     $post_id = false;
     if (!is_object($post) && is_numeric($post)) {
         $post_id = $post;
         $post = get_post($post_id);
     } else {
         $post_id = !empty($post->ID) ? $post->ID : false;
     }
     $metadata = Upfront_PostmetaModel::get_post_meta_fields($post_id, $tags);
     foreach ($metadata as $item) {
         if (empty($item['meta_key'])) {
             continue;
         }
         $key = $item['meta_key'];
         $value = $this->get_extracted_value($item, $post_id);
         $content = $this->expand($content, $key, $value);
     }
     // Re-iterate through tags and null out empty replacement macros.
     foreach ($tags as $tag) {
         $content = $this->expand($content, $tag, '');
     }
     return $content;
 }
 /**
  * Fetch a list of available meta fields
  * Will delegate to post list fetching, which is then inspected for common meta fields.
  * @param  array $data Raw data (element properties)
  * @return array List of meta fields
  */
 public static function get_meta_fields($data)
 {
     $posts = self::get_posts($data);
     return Upfront_PostmetaModel::get_meta_fields($posts);
 }
Example #3
0
 public static function get_post_part($type, $options = array(), $tpl = false, $properties = array())
 {
     $options = is_array($options) ? $options : array();
     global $post;
     $parts = array_values(apply_filters('upfront_post_parts', self::$PARTNAMES));
     if (array_search($type, $parts) === FALSE) {
         $unknown = array();
         $unknown[$type] = 'Unknown part';
         return $unknown;
     }
     $part = array('replacements' => array());
     $replacements = array();
     $tpls = array();
     $classes = array();
     if (!sizeof(self::$partTemplates)) {
         self::$partTemplates = self::get_templates();
     }
     if (!$tpl) {
         $tpl = self::$partTemplates[$type];
     }
     switch ($type) {
         case self::$PARTNAMES['AUTHOR']:
             $replacements['%author%'] = get_the_author();
             $replacements['%author_url%'] = get_author_posts_url($post->post_author);
             $meta = self::get_tpl_parameter('author_meta', $tpl);
             foreach ($meta as $key) {
                 $replacements['%author_meta_' . $key . '%'] = get_the_author_meta($key);
             }
             $avatar = self::get_tpl_parameter('avatar', $tpl);
             foreach ($avatar as $size) {
                 $replacements['%avatar_' . $size . '%'] = get_avatar($post->post_author, $size);
             }
             break;
             break;
         case self::$PARTNAMES['CATEGORIES']:
             $replacements['%categories%'] = get_the_category_list();
             break;
         case self::$PARTNAMES['COMMENTS']:
             $replacements['%comments_count%'] = get_comments_number();
             break;
         case self::$PARTNAMES['CONTENTS']:
             $limit = isset($options['limit']) ? $options['limit'] : 1000;
             if (!empty($post->ID) && is_numeric($post->ID)) {
                 ob_start();
                 the_content();
                 $replacements['%contents%'] = ob_get_clean();
                 $replacements['%excerpt%'] = self::excerpt($limit);
             } else {
                 $post = apply_filters('upfront-this_post-unknown_post', $post, $options);
                 $replacements['%contents%'] = apply_filters('the_content', $post->post_content);
                 $replacements['%excerpt%'] = self::excerpt($limit);
             }
             if (!empty($options['excerpt'])) {
                 $replacements['%contents%'] = $replacements['%excerpt%'];
             }
             $offset = isset($options['content_offset']) ? $options['content_offset'] : '';
             $replacements['%offset%'] = $offset;
             break;
         case self::$PARTNAMES['EXCERPT']:
             $limit = isset($options['limit']) ? $options['limit'] : 1000;
             $replacements['%excerpt%'] = self::excerpt($limit);
             //$replacements['%excerpt%'] = $limit; // Why???
             break;
         case self::$PARTNAMES['DATE']:
             $format = isset($options['format']) ? $options['format'] : 'd M Y';
             $replacements['%date%'] = self::_format_post_date($format);
             $replacements['%date_iso%'] = get_the_date('c');
             break;
         case self::$PARTNAMES['UPDATE']:
             $format = isset($options['format']) ? $options['format'] : 'd M Y';
             $replacements['%update%'] = self::_format_post_date($format, "update");
             $replacements['%date_iso%'] = get_the_modified_date('c');
             break;
         case self::$PARTNAMES['IMAGE']:
             if (isset($properties['hide_featured_image']) && $properties['hide_featured_image'] == 1) {
                 $classes[] = 'hide-featured_image';
                 $tpl = '';
                 // empty $tpl so it doesn't output anything
             }
             if (isset($properties['full_featured_image']) && $properties['full_featured_image'] == 1) {
                 $classes[] = 'full-featured_image';
                 $replacements['%image%'] = get_the_post_thumbnail(null, 'full');
             } else {
                 $replacements['%image%'] = upfront_get_edited_post_thumbnail();
             }
             $replacements['%permalink%'] = get_permalink();
             break;
         case self::$PARTNAMES['TAGS']:
             $sep = isset($options['tag_separator']) ? $options['tag_separator'] : ', ';
             $tags = get_the_tag_list('', $sep);
             $replacements['%tags%'] = !empty($tags) ? $tags : '';
             break;
         case self::$PARTNAMES['TITLE']:
             $replacements['%title%'] = get_the_title();
             $replacements['%permalink%'] = get_permalink();
             break;
         case self::$PARTNAMES['AUTHOR_GRAVATAR']:
             $avatar = self::get_tpl_parameter('avatar', $tpl);
             foreach ($avatar as $size) {
                 $_size = str_replace(array("{", "}"), "", $size);
                 $replacements['%avatar_' . $size . '%'] = get_avatar($post->post_author, $_size);
             }
             break;
         case self::$PARTNAMES['META']:
             $metas = Upfront_PostmetaModel::get_all_post_meta_fields(get_the_ID());
             foreach ($metas as $meta) {
                 if (empty($meta['meta_key'])) {
                     continue;
                 }
                 $rpl = Upfront_Codec::get('postmeta')->get_clean_macro($meta['meta_key']);
                 $value = Upfront_Codec::get('postmeta')->get_extracted_value($meta, get_the_ID());
                 $replacements[$rpl] = $value;
             }
             break;
     }
     $replacements = apply_filters('upfront_post_part_replacements', $replacements, $type, $options, $tpl);
     $out = array('replacements' => $replacements, 'tpl' => self::replace($tpl, $replacements), 'classes' => $classes);
     // Cleanup unused meta
     if ($type === self::$PARTNAMES['META'] && !empty($out['tpl'])) {
         $out['tpl'] = Upfront_Codec::get('postmeta')->clear_all($out['tpl']);
     }
     return $out;
 }