/**
  * If a slideshow is embedded within a post, then parse out the images involved and return them
  */
 static function from_slideshow($post_id, $width = 200, $height = 200)
 {
     $images = array();
     $post = get_post($post_id);
     if (!$post) {
         return $images;
     }
     if (!empty($post->post_password)) {
         return $images;
     }
     if (false === has_shortcode($post->post_content, 'slideshow')) {
         return $images;
         // no slideshow - bail
     }
     $permalink = get_permalink($post->ID);
     // Mechanic: Somebody set us up the bomb
     $old_post = $GLOBALS['post'];
     $GLOBALS['post'] = $post;
     $old_shortcodes = $GLOBALS['shortcode_tags'];
     $GLOBALS['shortcode_tags'] = array('slideshow' => $old_shortcodes['slideshow']);
     // Find all the slideshows
     preg_match_all('/' . get_shortcode_regex() . '/sx', $post->post_content, $slideshow_matches, PREG_SET_ORDER);
     ob_start();
     // The slideshow shortcode handler calls wp_print_scripts and wp_print_styles... not too happy about that
     foreach ($slideshow_matches as $slideshow_match) {
         $slideshow = do_shortcode_tag($slideshow_match);
         if (false === ($pos = stripos($slideshow, 'jetpack-slideshow'))) {
             // must be something wrong - or we changed the output format in which case none of the following will work
             continue;
         }
         $start = strpos($slideshow, '[', $pos);
         $end = strpos($slideshow, ']', $start);
         $post_images = json_decode(wp_specialchars_decode(str_replace("'", '"', substr($slideshow, $start, $end - $start + 1)), ENT_QUOTES));
         // parse via JSON
         foreach ($post_images as $post_image) {
             if (!($post_image_id = absint($post_image->id))) {
                 continue;
             }
             $meta = wp_get_attachment_metadata($post_image_id);
             // Must be larger than 200x200 (or user-specified)
             if (!isset($meta['width']) || $meta['width'] < $width) {
                 continue;
             }
             if (!isset($meta['height']) || $meta['height'] < $height) {
                 continue;
             }
             $url = wp_get_attachment_url($post_image_id);
             $images[] = array('type' => 'image', 'from' => 'slideshow', 'src' => $url, 'src_width' => $meta['width'], 'src_height' => $meta['height'], 'href' => $permalink);
         }
     }
     ob_end_clean();
     // Operator: Main screen turn on
     $GLOBALS['shortcode_tags'] = $old_shortcodes;
     $GLOBALS['post'] = $old_post;
     return $images;
 }
 public static function getFeaturedAudio()
 {
     $featured_audio = null;
     if (preg_match_all('/' . get_shortcode_regex() . '/s', get_the_content(), $matches, PREG_SET_ORDER)) {
         foreach ($matches as $shortcode) {
             if ('audio' === $shortcode[2] or 'playlist' === $shortcode[2]) {
                 $featured_audio = trim(do_shortcode_tag($shortcode));
                 if ($featured_audio) {
                     break;
                 }
             }
         }
     }
     return $featured_audio;
 }
Example #3
0
/**
 * Retrieves galleries from the passed post's content.
 *
 * @since 3.6.0
 *
 * @param int|WP_Post $post Post ID or object.
 * @param bool        $html Optional. Whether to return HTML or data in the array. Default true.
 * @return array A list of arrays, each containing gallery data and srcs parsed
 *               from the expanded shortcode.
 */
function get_post_galleries($post, $html = true)
{
    if (!($post = get_post($post))) {
        return array();
    }
    if (!has_shortcode($post->post_content, 'gallery')) {
        return array();
    }
    $galleries = array();
    if (preg_match_all('/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER)) {
        foreach ($matches as $shortcode) {
            if ('gallery' === $shortcode[2]) {
                $srcs = array();
                $gallery = do_shortcode_tag($shortcode);
                if ($html) {
                    $galleries[] = $gallery;
                } else {
                    preg_match_all('#src=([\'"])(.+?)\\1#is', $gallery, $src, PREG_SET_ORDER);
                    if (!empty($src)) {
                        foreach ($src as $s) {
                            $srcs[] = $s[2];
                        }
                    }
                    $data = shortcode_parse_atts($shortcode[3]);
                    $data['src'] = array_values(array_unique($srcs));
                    $galleries[] = $data;
                }
            }
        }
    }
    /**
     * Filter the list of all found galleries in the given post.
     *
     * @since 3.6.0
     *
     * @param array   $galleries Associative array of all found post galleries.
     * @param WP_Post $post      Post object.
     */
    return apply_filters('get_post_galleries', $galleries, $post);
}
 /**
  * If a gallery is detected, then get all the images from it.
  */
 static function from_gallery($post_id)
 {
     $images = array();
     $post = get_post($post_id);
     if (!empty($post->post_password)) {
         return $images;
     }
     if (false === strpos($post->post_content, '[gallery')) {
         return false;
     }
     // no gallery - bail
     $permalink = get_permalink($post->ID);
     // CATS: All your base are belong to us
     $old_post = $GLOBALS['post'];
     $GLOBALS['post'] = $post;
     $old_shortcodes = $GLOBALS['shortcode_tags'];
     $GLOBALS['shortcode_tags'] = array('gallery' => $old_shortcodes['gallery']);
     // Find all the galleries
     preg_match_all('/' . get_shortcode_regex() . '/s', $post->post_content, $gallery_matches, PREG_SET_ORDER);
     foreach ($gallery_matches as $gallery_match) {
         $gallery = do_shortcode_tag($gallery_match);
         // Um... no images in the gallery - bail
         if (false === ($pos = stripos($gallery, '<img'))) {
             continue;
         }
         preg_match_all('/<img\\s+[^>]*src=([\'"])([^\'"]*)\\1/', $gallery, $image_match, PREG_PATTERN_ORDER | PREG_OFFSET_CAPTURE);
         $a_pos = 0;
         foreach ($image_match[2] as $src) {
             list($raw_src) = explode('?', $src[0]);
             // pull off any Query string (?w=250)
             $raw_src = wp_specialchars_decode($raw_src);
             // rawify it
             $raw_src = esc_url_raw($raw_src);
             // clean it
             $a_pos = strrpos(substr($gallery, 0, $src[1]), '<a', $a_pos);
             // is there surrounding <a>?
             if (false !== $a_pos && preg_match('/<a\\s+[^>]*href=([\'"])([^\'"]*)\\1/', $gallery, $href_match, 0, $a_pos)) {
                 $href = wp_specialchars_decode($href_match[2]);
                 $href = esc_url_raw($href);
             } else {
                 // CATS: You have no chance to survive make your time
                 $href = $raw_src;
             }
             $a_pos = $src[1];
             $images[] = array('type' => 'image', 'from' => 'gallery', 'src' => $raw_src, 'href' => $permalink);
         }
     }
     // Captain: For great justice
     $GLOBALS['shortcode_tags'] = $old_shortcodes;
     $GLOBALS['post'] = $old_post;
     return $images;
 }
 /**
  * Recursively search for gallery shortcodes in given content.
  *
  * @since 1.0.0
  *
  * @param  string  $content   Target content
  * @param  boolean $html      If true - return array of galleries html
  * @param  integer $num       Number of galleries to search
  * @param  array   $galleries Base galleries array
  * @return array              Found galleries array
  */
 function presscore_search_post_galleries($content = '', $html = true, $num = 0, $galleries = array())
 {
     if (preg_match_all('/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER)) {
         foreach ($matches as $shortcode) {
             if ('gallery' === $shortcode[2]) {
                 $srcs = array();
                 $gallery = do_shortcode_tag($shortcode);
                 if ($html) {
                     $galleries[] = $gallery;
                 } else {
                     preg_match_all('#src=([\'"])(.+?)\\1#is', $gallery, $src, PREG_SET_ORDER);
                     if (!empty($src)) {
                         foreach ($src as $s) {
                             $srcs[] = $s[2];
                         }
                     }
                     $data = shortcode_parse_atts($shortcode[3]);
                     $data['src'] = array_values(array_unique($srcs));
                     $galleries[] = $data;
                 }
             }
             if ($num && count($galleries) >= $num) {
                 break;
             }
             if (!empty($shortcode[5])) {
                 $galleries = presscore_search_post_galleries($shortcode[5], $html, $num, $galleries);
             }
         }
     }
     return $galleries;
 }
Example #6
0
/**
 * Retrieve galleries from the passed post's content
 *
 * @since 3.6.0
 *
 * @param mixed $post Optional. Post ID or object.
 * @param boolean $html Whether to return HTML or data in the array
 * @return array A list of arrays, each containing gallery data and srcs parsed
 *		from the expanded shortcode
 */
function get_post_galleries($post, $html = true)
{
    if (!($post = get_post($post))) {
        return array();
    }
    if (!has_shortcode($post->post_content, 'gallery')) {
        return array();
    }
    $galleries = array();
    if (preg_match_all('/' . get_shortcode_regex() . '/s', $post->post_content, $matches, PREG_SET_ORDER)) {
        foreach ($matches as $shortcode) {
            if ('gallery' === $shortcode[2]) {
                $srcs = array();
                $count = 1;
                $gallery = do_shortcode_tag($shortcode);
                if ($html) {
                    $galleries[] = $gallery;
                } else {
                    preg_match_all('#src=([\'"])(.+?)\\1#is', $gallery, $src, PREG_SET_ORDER);
                    if (!empty($src)) {
                        foreach ($src as $s) {
                            $srcs[] = $s[2];
                        }
                    }
                    $data = shortcode_parse_atts($shortcode[3]);
                    $data['src'] = array_values(array_unique($srcs));
                    $galleries[] = $data;
                }
            }
        }
    }
    return apply_filters('get_post_galleries', $galleries, $post);
}
 /**
  * Find gallery shortcodes in the post. Build Open Graph protocol image results.
  *
  * @since 1.1.9
  * @param stdClass $post current post object
  * @return array array of arrays containing Open Graph protocol image markup
  */
 public static function gallery_images($post)
 {
     global $shortcode_tags;
     $og_images = array();
     if (!(isset($shortcode_tags['gallery']) && isset($post->post_content) && $post->post_content)) {
         return $og_images;
     }
     $first_gallery = strpos($post->post_content, '[gallery');
     if ($first_gallery === false) {
         return $og_images;
     }
     // use regex finder with only the gallery shortcode
     $old_shortcodes = $shortcode_tags;
     $shortcode_tags = array('gallery' => $shortcode_tags['gallery']);
     // find all the gallery shortcodes in the post content
     preg_match_all('/' . get_shortcode_regex() . '/s', $post->post_content, $galleries, PREG_SET_ORDER, $first_gallery);
     // reset
     $shortcode_tags = $old_shortcodes;
     foreach ($galleries as $gallery_shortcode) {
         // request the full-sized image
         if (empty($gallery_shortcode[3])) {
             $gallery_shortcode[3] = ' size="full"';
         } else {
             // break it down
             $parsed_attributes = shortcode_parse_atts($gallery_shortcode[3]);
             // add new attribute or override existing
             $parsed_attributes['size'] = 'full';
             // build it up again
             $attr_str = '';
             foreach ($parsed_attributes as $attribute => $value) {
                 $attr_str .= ' ' . $attribute . '="' . $value . '"';
             }
             unset($parsed_attributes);
             if ($attr_str) {
                 $gallery_shortcode[3] = $attr_str;
             }
             unset($attr_str);
         }
         // pass the shortcode through all filters and actors
         $gallery_html = do_shortcode_tag($gallery_shortcode);
         if (!$gallery_html) {
             continue;
         }
         $gallery_html = strip_tags($gallery_html, '<img>');
         if (!$gallery_html) {
             continue;
         }
         $first_image = strpos($gallery_html, '<img');
         if ($first_image === false) {
             continue;
         }
         preg_match_all('/<img[^>]+>/i', $gallery_html, $images, PREG_PATTERN_ORDER, $first_image);
         unset($gallery_html);
         if (!(is_array($images) && is_array($images[0]))) {
             continue;
         }
         $images = $images[0];
         foreach ($images as $image) {
             preg_match_all('/(src|width|height)="([^"]*)"/i', $image, $image_attributes, PREG_SET_ORDER);
             $og_image = array();
             foreach ($image_attributes as $parsed_attributes) {
                 if ($parsed_attributes[1] === 'src') {
                     $url = esc_url_raw(wp_specialchars_decode($parsed_attributes[2]), array('http', 'https'));
                     if ($url) {
                         $og_image['url'] = $url;
                     }
                     unset($url);
                 } else {
                     if ($parsed_attributes[1] === 'width' || $parsed_attributes[1] === 'height') {
                         $pixels = absint($parsed_attributes[2]);
                         if ($pixels > 0) {
                             $og_image[$parsed_attributes[1]] = $pixels;
                         }
                         unset($pixels);
                     }
                 }
             }
             if (!isset($og_image['url']) || isset($og_image['width']) && $og_image['width'] < self::MIN_IMAGE_DIMENSION || isset($og_image['height']) && $og_image['height'] < self::MIN_IMAGE_DIMENSION) {
                 continue;
             }
             $og_images[] = $og_image;
             unset($og_image);
         }
     }
     return $og_images;
 }
/**
 * Check the content blob for galleries and return their image srcs
 *
 * @since 3.6.0
 *
 * @param string $content A string which might contain image data.
 * @param boolean $html Whether to return HTML or data
 * @param boolean $remove Optional. Whether to remove the found data from the passed content.
 * @param int $limit Optional. The number of galleries to return
 * @return array A list of galleries, which in turn are a list of their srcs in order
 */
function get_content_galleries(&$content, $html = true, $remove = false, $limit = 0)
{
    $galleries = array();
    if (preg_match_all('/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER) && !empty($matches)) {
        foreach ($matches as $shortcode) {
            if ('gallery' === $shortcode[2]) {
                $srcs = array();
                $count = 1;
                if ($remove) {
                    $content = str_replace($shortcode[0], '', $content, $count);
                }
                $data = shortcode_parse_atts($shortcode[3]);
                $gallery = do_shortcode_tag($shortcode);
                if ($html) {
                    $galleries[] = $gallery;
                } else {
                    preg_match_all('#src=([\'"])(.+?)\\1#is', $gallery, $src, PREG_SET_ORDER);
                    if (!empty($src)) {
                        foreach ($src as $s) {
                            $srcs[] = $s[2];
                        }
                    }
                    $data['src'] = array_values(array_unique($srcs));
                    $galleries[] = $data;
                }
                if ($limit > 0 && count($galleries) >= $limit) {
                    break;
                }
            }
        }
    }
    return apply_filters('content_galleries', $galleries, $content);
}
 protected function strip_first_button_shortcode(&$content = null)
 {
     $button = '';
     if (has_shortcode($content, 'dt_button') && '1' == $this->atts['style']) {
         // search button shortcode in content
         if (preg_match_all('/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER) && !empty($matches)) {
             foreach ($matches as $shortcode) {
                 if ('dt_button' === $shortcode[2]) {
                     $button = do_shortcode_tag($shortcode);
                     $button = '<div class="shortcode-action-container action-button">' . $button . '</div>';
                     $content = str_replace($shortcode[0], '', $content);
                     break;
                 }
             }
         }
     }
     return $button;
 }
Example #10
0
 function duena_featured_gallery()
 {
     $pattern = get_shortcode_regex();
     if (preg_match("/{$pattern}/s", get_the_content(), $match) && 'gallery' == $match[2]) {
         add_filter('shortcode_atts_gallery', 'duena_gallery_atts');
         echo do_shortcode_tag($match);
     }
 }
Example #11
0
 public function shortcode($atts, $content = null)
 {
     $default_atts = array('style' => '0', 'background' => 'plain', 'content_size' => 'normal', 'text_align' => 'left', 'animation' => 'none', 'line' => '1');
     $attributes = shortcode_atts($default_atts, $atts);
     $attributes['animation'] = in_array($attributes['animation'], array('none', 'scale', 'fade', 'left', 'right', 'bottom', 'top')) ? $attributes['animation'] : $default_atts['animation'];
     $attributes['style'] = in_array($attributes['style'], array('1', '0')) ? $attributes['style'] : $default_atts['style'];
     $attributes['background'] = in_array($attributes['background'], array('no', 'plain', 'fancy')) ? $attributes['background'] : $default_atts['background'];
     $attributes['content_size'] = in_array($attributes['content_size'], array('normal', 'small', 'big')) ? $attributes['content_size'] : $default_atts['content_size'];
     $attributes['text_align'] = in_array($attributes['text_align'], array('left', 'center', 'centre')) ? $attributes['text_align'] : $default_atts['text_align'];
     $attributes['line'] = apply_filters('dt_sanitize_flag', $attributes['line']);
     $container_classes = array('shortcode-action-box');
     $content_classes = array('shortcode-action-container');
     $media = '';
     // container classes
     switch ($attributes['style']) {
         case '1':
             $container_classes[] = 'box-style-table';
             break;
         default:
             $container_classes[] = 'table';
     }
     switch ($attributes['background']) {
         case 'fancy':
             $container_classes[] = 'shortcode-action-bg';
             $container_classes[] = 'block-style-widget';
             break;
         case 'plain':
             $container_classes[] = 'shortcode-action-bg';
             $container_classes[] = 'plain-bg';
     }
     if (in_array($attributes['text_align'], array('center', 'centre'))) {
         $container_classes[] = 'text-centered';
     }
     if (!$attributes['line']) {
         $container_classes[] = 'no-line';
     }
     if ('none' != $attributes['animation']) {
         switch ($attributes['animation']) {
             case 'scale':
                 $container_classes[] = 'scale-up';
                 break;
             case 'fade':
                 $container_classes[] = 'fade-in';
                 break;
             case 'left':
                 $container_classes[] = 'right-to-left';
                 break;
             case 'right':
                 $container_classes[] = 'left-to-right';
                 break;
             case 'bottom':
                 $container_classes[] = 'top-to-bottom';
                 break;
             case 'top':
                 $container_classes[] = 'bottom-to-top';
                 break;
         }
         $container_classes[] = 'animate-element';
     }
     // content classes
     switch ($attributes['content_size']) {
         case 'small':
             $content_classes[] = 'text-small';
             break;
         case 'big':
             $content_classes[] = 'text-big';
     }
     $button = '';
     if (has_shortcode($content, 'dt_button') && '1' == $attributes['style']) {
         // search button shortcode in content
         if (preg_match_all('/' . get_shortcode_regex() . '/s', $content, $matches, PREG_SET_ORDER) && !empty($matches)) {
             foreach ($matches as $shortcode) {
                 if ('dt_button' === $shortcode[2]) {
                     $button = do_shortcode_tag($shortcode);
                     $button = '<div class="shortcode-action-container action-button">' . $button . '</div>';
                     $content = str_replace($shortcode[0], '', $content);
                     break;
                 }
             }
         }
     }
     // $content = strip_shortcodes( $content );
     $output = sprintf('<section class="%s"><div class="%s">%s</div>%s</section>', esc_attr(implode(' ', $container_classes)), esc_attr(implode(' ', $content_classes)), do_shortcode(shortcode_unautop(wpautop($content))), $button);
     return $output;
 }
 /**
  * This is a combination of this class's shortcode_hack_extra_escape_escaped_shortcodes()
  * and do_shortcode_tag() for performance reasons so that we don't have to run some regex twice.
  *
  * @param array $match Regular expression match array.
  *
  * @return string|false False on failure, otherwise a parse shortcode tag.
  */
 function shortcode_hack_extra_escape_escaped_shortcodes_and_parse($match)
 {
     $match[0] = $this->shortcode_hack_extra_escape_escaped_shortcodes($match);
     return do_shortcode_tag($match);
 }
Example #13
0
 function manual_process($user_id, $content, $dataonly = false)
 {
     $user = get_userdata($user_id);
     if ($user->ID) {
         $GLOBALS['wlm_shortcode_user'] = $user;
         $pattern = get_shortcode_regex();
         preg_match_all('/' . $pattern . '/s', $content, $matches, PREG_SET_ORDER);
         if (is_array($matches) && count($matches)) {
             $data = array();
             foreach ($matches as $match) {
                 $scode = $match[2];
                 $code = $match[0];
                 if (isset($this->shortcode_functions[$scode])) {
                     if (!isset($data[$code])) {
                         $data[$code] = do_shortcode_tag($match);
                     }
                 }
             }
             if ($dataonly == false) {
                 $content = str_replace(array_keys($data), $data, $content);
             } else {
                 $content = $data;
             }
         }
     }
     return $content;
 }