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