/** * 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(); 7 Steps to owning your life after 40 – Over 40 & Killing it®

7 Steps to owning your life after 40

July 29, 2017
TTwo years ago I was fortunate enough to be interviewed by Lulu, creator of Designing 40. We met on Instagram. Lulu is an amazing, strong woman from Copenhagen, Denmark. I’ve only had the pleasure of speaking with her through WhatsApp and Skype. I hope I have the pleasure of meeting this amazing woman in the near future.

The Interview.

If the things we had to do were aligned to the things we want to do, then the concept of self-discovery would be redundant. As children, we succumb to parental pressure, to become what they aspire for our lives. In the worst of cases, we live out their failed dreams. Then as parents, we make cautious decisions and do what is best for our children. Being an adult binds us to dutifully embark on the expected 9 – 5 rat race. When our children leave home, we again entertain those long forgotten dreams. But then we realise that although we are all grown up, we are still afraid of disappointing our parents. I know this too well as I curb some of my desires despite the support I get from my family. Because they on occasion, still attempt to steer me onto their own paths, or the path they hoped for me.

When I met Kimberly (Founder of The Gentlemen’s Style Files and Over 40 & Killing it®), I was in a conundrum. I was trying to make something out of the situation I had found myself in after everything had fallen apart. I wasn’t interested in hearing another success story about how someone had been lucky enough to make their passion their life’s work. But Kimberly’s story spoke to me because she is an ordinary person like me. And like the rest of us, she is still on the path to self-discovery. But in a moment of desperation, she had unlocked a part of herself that was foreign to her, and taken advantage of it in order to do what she had to do.

By the age of 40, there is the pressure of unspoken expectations to have come, “so far in life”. At 42, Kimberly was at the top of her game. She was working as a Project Manager for an Architect Firm. Having recently become an empty nester (yeah you’re all secretly envying her), she was diving into her midlife crisis – first stop buying a Honda CBR 600RR that she named Esther, and joining a motorcycle club…I want that!

Then the worst happened, Kimberly was laid off and had to start working as a bartender. Her new motorcycle-bartending lifestyle triggered a pattern of going out 5 nights a week and daily doses of Jack Daniels. Attempts to maintain the lifestyle of a Project Manager, at a margin of the income, was not sustainable. She lost everything after failing to keep up her payments on the storage space she was renting. Being faced by the reality of a dwindled support system, like most of us at this age, she was forced to move in with her mother…ouch!!! 40 and living at home with the parents, that’s a major hit to the ego.

A depressing disposition, especially when you’re sending out your resume and not getting any callbacks. Kimberly finding herself in a slump, did what most of us do when life kicks us down, she became a recluse. So with $200 in her pocket, here is how she climbed out of her gorge of despair.

  1. Take stock

Being accountable and taking responsibility for your actions.  Kimberly’s mantra was:

Reflect. Redirect. Reconnect

She took a look back to ascertain where it had all gone wrong and redirected her energy to setting new goals. Only after accepting her role in her “downfall” and acknowledging that the climb out of her hole would be faced with many obstacles, she was ready to reconnect with the world.

  1. Define your own support system

Find your own form of therapy and way of healing.

Kimberly created a support system in the form of a Facebook page, Over 40 & Killing It® where she posted daily inspirational quotes, places to visit and fashion ideas. She also created an online vision board on Tumblr, Live the Lifestyle YOU deserve, featuring the life she wanted to work towards.

  1. Take advantage of unexpected opportunities

We often get blinded by the destination and ignore what is in front of us.

When Kimberly realised that there was a surprised growing interest in her posts on gentlemen’s ensembles on Over 40 & Killing It®, she took advantage of it. The number of followers was ample to form The Gentlemen’s Style Files Page (GSF), which focuses on styling men.

Sometimes opportunities are hidden but come to fruition at the right time! The time when you’re about to give up! -Kimberly Ann Hawes

  1. Every little bit counts towards the bigger picture

I am often guilty of being discouraged my small progress, and in some cases throwing in the towel too early in the game.

By setting up affiliate programs and using Amazon and Share A Sale, Kimberly was able to make small amounts of money that helped her to sustain herself in the interim.

  1. Take a chance

Taking the time to research possibilities that come our way, instead of our first instinct being to listen to that, “it’s too good to be true” voice.

An apparel company in Dallas, TX contacted Kimberly on LinkedIn with a proposal for her to sell their clothing. Initially skeptical, she only responded after almost a year from the initial contact. And this is what put her on the path to finally earning real money!

  1. You’re never too old to reinvent yourself

Each one of us has undiscovered talents waiting to be unearthed, but only if we allow it. The challenge is in transforming those talents into something workable.

She has embraced her newfound gift of fashion and styling, which has been extended to creating looks for private individuals. Gentlemen’s Style File Page (GSF) has now opened its doors to companies that want to promote themselves on GSF. A magazine will be launched, just not including menswear but some not-to-be-missed events.

  1. Be thankful

Often when we have worked our way out of a pitfall, we forget from where we have come.

Kimberly has developed a habit of taking a daily thank you walk, where with each step she celebrates gratitude and recognises the events that have led her from poverty to posh.

At with that, I am thrilled to have met Kimberly and thankful for the interview. This interview has not only shed light on owning your life after 40 but has helped me out of my conundrum.

Let Over 40 & Killing it® be your go-to resource in obtaining the lifestyle you deserve; building confidence, over 40 dating tips, how to remain ageless, how to start over when you’ve hit rock bottom and more.

I also invite you to share your story, send an email to kimberly@over40andkillingit.com. In the subject line add, “My Story,” “Advice,” or “My Question.” Your story or advice needs to be heard. We can learn from each other.

Coming to a city near you my confidence building workshops. So make sure you’re on the email list you can receive dates and discounts on the events and any of my clothing and digital products.

Now, grab a cocktail or coffee, sit back, relax and listen to the P’cast on how you can start living the Over 40 & Killing it® Lifestyle TODAY!

Sign-up for Over 40 & Killing it® Gazette and to receive some really cool information on what’s happening in the over 40 community.

Ready to have some fun? Join my Facebook group. Then connect with me on Instagram, and  Twitter then, you will be hooked up to the hottest Over 40 Community; food, fashion, fun, how to leave Singlesville, trendy hotspots and more.

So until next time my Dear Friends, Stay Cool, Classy and Keep on Killing It. And remember NEVER, give up! NEVER be denied! You’re NEVER too old! NEVER look back! Peace!


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: