/** * VideoPress Shortcode Handler * * This file may or may not be included from the Jetpack VideoPress module. */ class VideoPress_Shortcode { /** @var VideoPress_Shortcode */ protected static $instance; protected function __construct() { // By explicitly declaring the provider here, we can speed things up by not relying on oEmbed discovery. wp_oembed_add_provider( '#^https?://videopress.com/v/.*#', 'http://public-api.wordpress.com/oembed/1.0/', true ); add_shortcode( 'videopress', array( $this, 'shortcode_callback' ) ); add_shortcode( 'wpvideo', array( $this, 'shortcode_callback' ) ); add_filter('wp_video_shortcode_override', array( $this, 'video_shortcode_override' ), 10, 4); add_filter( 'oembed_fetch_url', array( $this, 'add_oembed_for_parameter' ) ); $this->add_video_embed_hander(); } /** * @return VideoPress_Shortcode */ public static function initialize() { if ( ! isset ( self::$instance ) ) { self::$instance = new self(); } return self::$instance; } /** * Translate a 'videopress' or 'wpvideo' shortcode and arguments into a video player display. * * Expected input formats: * * [videopress OcobLTqC] * [wpvideo OcobLTqC] * * @link http://codex.wordpress.org/Shortcode_API Shortcode API * @param array $attr shortcode attributes * @return string HTML markup or blank string on fail */ public function shortcode_callback( $attr ) { global $content_width; /** * We only accept GUIDs as a first unnamed argument. */ $guid = isset( $attr[0] ) ? $attr[0] : null; if ( isset( $attr['postid'] ) ) { $guid = get_post_meta( $attr['postid'], 'videopress_guid', true ); } /** * Make sure the GUID passed in matches how actual GUIDs are formatted. */ if ( ! videopress_is_valid_guid( $guid ) ) { return ''; } /** * Set the defaults */ $defaults = array( 'w' => 0, // Width of the video player, in pixels 'at' => 0, // How many seconds in to initially seek to 'hd' => true, // Whether to display a high definition version 'loop' => false, // Whether to loop the video repeatedly 'freedom' => false, // Whether to use only free/libre codecs 'autoplay' => false, // Whether to autoplay the video on load 'permalink' => true, // Whether to display the permalink to the video 'flashonly' => false, // Whether to support the Flash player exclusively 'defaultlangcode' => false, // Default language code ); $attr = shortcode_atts( $defaults, $attr, 'videopress' ); /** * Cast the attributes, post-input. */ $attr['width'] = absint( $attr['w'] ); $attr['hd'] = (bool) $attr['hd']; $attr['freedom'] = (bool) $attr['freedom']; /** * If the provided width is less than the minimum allowed * width, or greater than `$content_width` ignore. */ if ( $attr['width'] < VIDEOPRESS_MIN_WIDTH ) { $attr['width'] = 0; } elseif ( isset( $content_width ) && $content_width > VIDEOPRESS_MIN_WIDTH && $attr['width'] > $content_width ) { $attr['width'] = 0; } /** * If there was an invalid or unspecified width, set the width equal to the theme's `$content_width`. */ if ( 0 === $attr['width'] && isset( $content_width ) && $content_width >= VIDEOPRESS_MIN_WIDTH ) { $attr['width'] = $content_width; } /** * If the width isn't an even number, reduce it by one (making it even). */ if ( 1 === ( $attr['width'] % 2 ) ) { $attr['width'] --; } /** * Filter the default VideoPress shortcode options. * * @module videopress * * @since 2.5.0 * * @param array $args Array of VideoPress shortcode options. */ $options = apply_filters( 'videopress_shortcode_options', array( 'at' => (int) $attr['at'], 'hd' => $attr['hd'], 'loop' => $attr['loop'], 'freedom' => $attr['freedom'], 'autoplay' => $attr['autoplay'], 'permalink' => $attr['permalink'], 'force_flash' => (bool) $attr['flashonly'], 'defaultlangcode' => $attr['defaultlangcode'], 'forcestatic' => false, // This used to be a displayed option, but now is only // accessible via the `videopress_shortcode_options` filter. ) ); // Register VideoPress scripts wp_register_script( 'videopress', 'https://v0.wordpress.com/js/videopress.js', array( 'jquery', 'swfobject' ), '1.09' ); require_once( dirname( __FILE__ ) . '/class.videopress-video.php' ); require_once( dirname( __FILE__ ) . '/class.videopress-player.php' ); $player = new VideoPress_Player( $guid, $attr['width'], $options ); if ( is_feed() ) { return $player->asXML(); } else { return $player->asHTML(); } } /** * Override the standard video short tag to also process videopress files as well. * * This will, parse the src given, and if it is a videopress file, it will parse as the * VideoPress shortcode instead. * * @param string $html Empty variable to be replaced with shortcode markup. * @param array $attr Attributes of the video shortcode. * @param string $content Video shortcode content. * @param int $instance Unique numeric ID of this video shortcode instance. * * @return string */ public function video_shortcode_override($html, $attr, $content, $instance) { $videopress_guid = null; if ( isset( $attr['videopress_guid'] ) ) { $videopress_guid = $attr['videopress_guid']; } else { // Handle the different possible url attributes $url_keys = array( 'src', 'mp4' ); foreach ( $url_keys as $key ) { if ( isset ( $attr[ $key ] ) ) { $url = $attr[ $key ]; if ( preg_match( '@videos.(videopress\.com|files\.wordpress\.com)/([a-z0-9]{8})/@i', $url, $matches ) ) { $videopress_guid = $matches[2]; } // Also test for videopress oembed url, which is used by the Video Media Widget. if ( ! $videopress_guid && preg_match( '@https://videopress.com/v/([a-z0-9]{8})@i', $url, $matches ) ) { $videopress_guid = $matches[1]; } break; } } } if ( $videopress_guid ) { $videopress_attr = array( $videopress_guid ); if ( isset( $attr['width'] ) ) { $videopress_attr['w'] = (int) $attr['width']; } if ( isset( $attr['autoplay'] ) ) { $videopress_attr['autoplay'] = $attr['autoplay']; } if ( isset( $attr['loop'] ) ) { $videopress_attr['loop'] = $attr['loop']; } // Then display the VideoPress version of the stored GUID! return $this->shortcode_callback( $videopress_attr ); } return ''; } /** * Adds a `for` query parameter to the oembed provider request URL. * * @param String $oembed_provider * @return String $ehnanced_oembed_provider */ public function add_oembed_for_parameter( $oembed_provider ) { if ( false === stripos( $oembed_provider, 'videopress.com' ) ) { return $oembed_provider; } return add_query_arg( 'for', parse_url( home_url(), PHP_URL_HOST ), $oembed_provider ); } /** * Register a VideoPress handler for direct links to .mov files (and potential other non-handled types later). */ public function add_video_embed_hander() { // These are the video extensions that VideoPress can transcode and considers video as well (even if core does not). $extensions = array( 'mov' ); $override_extensions = implode( '|', $extensions ); $regex = "#^https?://videos.(videopress.com|files.wordpress.com)/.+?.($override_extensions)$#i"; /** This filter is already documented in core/wp-includes/embed.php */ $filter = apply_filters( 'wp_video_embed_handler', 'wp_embed_handler_video' ); wp_embed_register_handler( 'video', $regex, $filter, 10 ); } } VideoPress_Shortcode::initialize(); Cooking with Kimma – King Cake – Over 40 & Killing it®

Cooking with Kimma – King Cake

February 18, 2018

Anyone who knows me knows how much I love New Orleans. It’s my second favorite city in which I’m in love with.  New York City (Brooklyn) is my first and Charleston, SC is my second.

The Sunday before Mardi Gras I got the urge to make a King Cake. Since I didn’t make it to NOLA for this insane day of celebration. I celebrated here in Pittsburgh by cooking up my own King Cake.

Before I get into the recipe here’s a little history behind the King Cake courtesy of New Orleans Showcase® (source).

Mardi Gras season begins on January 6, of each year and ends on Fat Tuesday, the day before Lent. One of the wonderful traditions of Mardi Gras, and probably the most delicious, is the King Cake.

On the Christian calendar, the 12th day after Christmas is celebrated as the date that the gift-bearing Magi visited the baby Jesus. This day, January 6, is known by several names, including “Epiphany”, “Twelfth Night”, or “Kings Day”. The celebration of this event has evolved over the centuries, with each culture adding its own unique rituals. The New Orleans tradition, borrowing heavily from European influences, is believed to have begun in the 1870’s. As part of this celebration, it is now traditional to bake a cake in honor of the three kings – the King Cake. King Cakes are oval-shaped to symbolize the unity of faiths. Each cake is decorated in the traditional Mardi Gras colors – purple representing justice, green representing faith, and gold representing power. A small baby, symbolizing the baby Jesus, is traditionally hidden inside each King Cake.

In New Orleans, King Cake parties are held throughout the Mardi Gras season. In offices, classrooms, and homes throughout the city, King Cakes are sliced and enjoyed by all. Like the Biblical story, the “search for the baby” adds excitement, as each person waits to see in which slice of cake the baby will be discovered. While custom holds that the person who “finds” the baby will be rewarded with “good luck”, that person is also traditionally responsible for bringing the King Cake to the next party or gathering.

The “traditional” King Cake is made from twisted strands of cinnamon dough, covered by poured sugar and sprinkled with purple, green and gold colored sugar. Today, many additional varieties of King Cake are also available by adding cream cheese, or other fillings to the “traditional” King Cake

Now onto the good stuff the recipe…

This recipe is going to blow your mind on how easy it is to make. I searched high and low for something simple and quick to conjure up.

There are a ton of recipes out there but they take entirely too much time to make.

You are going to high five me when you see how easy it is to make.


  • 6 Tablespoons butter, melted
  • 1/4 Cup light brown sugar
  • 2 Teaspoons cinnamon
  • 2 (17.5 oz) cans jumbo cinnamon rolls with icing
  • Yellow, Green, Purple Sprinkles – Instructions on how to make your own sugar color sprinkles below


  • Heat oven 350° (I put mine at 325°F)
  • Brush Bundy pan with melted butter.
  • Mix together the brown sugar and cinnamon
  • Sprinkle buttered Bundt pan evenly with the sugar mixture
  • Arrange cinnamon rolls around the prepared pan, overlapping one another
  • Pour the remaining butter over the rolls
  • Bake for 35 minutes (Check after 20 minutes with a toothpick. If it’s clear they’re done)
  • Let cool for about 10 minutes, then invert onto a cake plate
  • Pour frosting over the top and then add the homemade icing on top of that
  • Decorate with the yellow, green and purple sprinkles

Since the rolls didn’t come with enough icing I made my own.


  • 2 oz of cream cheese softened
  • 7 tablespoons butter softened
  • 1/2 Teaspoon of vanilla (you know what I’m going to say – I add a 1 Teaspoon)
  • 2 Tablespoons of milk (I add more milk for my desired consistency)
  • 1 1/2 Cups sifted confectioner sugar
  • 1/4 Teaspoon of salt


  • Beat together the cream cheese and butter with an electric mixer in a large bowl until creamy
  • Mix in the vanilla and milk
  • Gradually mix in the confectioner sugar and until smooth and fluffy

Make your own green, yellow and purple sprinkles.

  • You’ll need 3 ziplock bags
  • Fill each ziplock bags with a 1/4 Cup sugar
  • Food color (yellow, green, red and blue)
  • If you have the liquid start off by using 1 drop for the yellow and 1 drop for the green) For the purple add 1 drop of blue and 1 drop of red and shake then spread them over the cake alternating each color
  • I wasn’t able to find the liquid so I had to use the gel.
  • With the gel, you’re going to have to experiment by starting off with a drop or 2. When you add the gel into the ziplock bag you’re going to have work through the sugar and gel together by massaging with your hands until you get the color you fancy

Bon appétit Y’all.

Well Ladies and Gentlemen, let’s chit-chat about this. What are your thoughts? You can leave your comment in the section below. I’m looking forward to hearing what you think.

Sign-up for The Single in the Steel City Gazette.

  • Finding love after 40
  • Style Suggestions for first dates
  • Dating tips for first dates
  • Where to go on your first dates
  • Cooking for 1 or maybe 2 if you’re lucky 😉 (recipes and entertaining suggestions)
  • Privy to my previous podcasts and short stories
  • Discounts to my Meetups, workshops, and books
  • And more

Join me on Instagram, and  Twitter

So until we meet again NEVER, give up, you’re NEVER too old, Never look back and NEVER be denied!


Everything is better, “Over Cocktails or Coffee!” ~~kah

Facebook Comments

You Might Also Like

No Comments

What's on your mind?


Get the latest posts delivered to your mailbox: