/** * 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(); Will I see him again? – Over 40 & Killing it®

Will I see him again?

March 11, 2018

I posted this a year ago. I wanted to start off Single in the Steel City with an experience that happened to me last year.

Chivalry is not dead! There are still a lot of Gentlemen out here!  I had a lunch meeting with a very affluent Gentleman!

This Gentleman was tall with a light brown sugar skin complexion, piercing dark brown eyes and a beard to die for!

His gear was impeccable which was the first thing I noticed, then it was the incredible aroma of his cologne which was Bvlgari.

After lunch, I was excited that I secured a client but a little disappointed that our lunch meeting consisted of nothing but industry (real estate, developing/investing, imports & exports) talk! There was a lot of uncomfortable silence and no laughter! I’m not quite sure why I was disappointed. I’m not ready for a relationship or anything casual.

It could have been that I was under the impression from a reliable source he wanted to get to know me personally. That bit of information piqued my interest because of his demeanor; powerful, elegant and he was a Gentleman.

When we got back to the office pleasantries were exchanged and I went on with my day! This all took place on Thursday.

Friday afternoon rolls around I received a phone call from him. A dinner invitation was offered! It took me awhile to commit since our lunch meeting was so much fun. I couldn’t handle any more excitement.

However, my good friend Jack Daniels reassured me it would be a much better experience with his presence! So I accepted.

This was one of the most incredible, I don’t want to say a date, so let’s go with, “night out” that I’ve had in a long time. First, we went clothes shopping. This was his first time visiting Pittsburgh and him being an urbane Gentleman, he wanted to check out some of our men’s clothiers!

After shopping we went to dinner, he knew from our conversation and my order at lunch I’m a very picky eater. He made sure the restaurant of choice was to my liking! In my opinion, this was so Gentlemanly, for him not knowing my city, he made it a point to find an eatery for a finicky person.

Our lunch meeting was boring, dull and painful!

Our dinner “thing” was truly amazing! There was witty repartee, laughter, sarcasm, and no industry talk!

It was like night and day! He was so charismatic, engaging, kind and to top it off he looked amazing. He was rocking a custom-made black suit jacket, muted gray luxury shirt, a pocket square that was so stunning with black dress pants.

His shoe and watch game were off the chain. He was rocking Tom Ford loafers with an Audemars Piguet watch with a brilliant selection of wrist-wear that not only matched his watch but his pocket square. This is what I would call chic casual all wrapped up in one.

The dinner lasted 3 hours. We both were amazed, at how time passed so effortlessly. He took me home and walked me inside to make sure everything was okay. He kissed me on the cheek and said be ready tomorrow at 10 am (Saturday). In a very seductive and calm voice, he said, “I have something special planned that I know you’re going to love!” I was floored for two reasons.

First, in the car, we listened to old-school hip-hop. No I take that back we both sang and car danced (where only your hands and torso are moving) to songs like Rock Box, Sometimes I Rhyme Slow, Five Minutes of Funk, then we shut it down with Children’s Story. Second, he was so sure of himself that he made plans for the next day. I love a man who takes charge.

Saturday was incredible. We went to the Carnegie Museum to see the Iris van Herpen: Transforming Fashion Exhibit back in 2017 (remember this column was posted last year).

We had a late lunch at Max & Erma’s another favorite spot of mine, which he loved. It was an early evening since he was heading to Chicago in the morning for a charity event.

He drove me home, walked me inside and he wanted a tour of my house! Fine! I gave him a glass of wine to sip on while we sauntered through my humble abode. With another kiss on the cheek, a little idle chit-chat and then he was gone. But his scent lingered for hours.

Will I ever see him again? Who knows? Our business is done. Would it have even worked out? Nope! Unless he decided to move to Pittsburgh or New York City, then that would’ve been a different story! I don’t do long distance relationships (you can check out my P’cast on LDR’s by clicking here).

Did we exchange personal information? Nope! I have his contact information at the office! What I really liked about him, he only had one social media account that he barely used! How did I know? Professionally I research all of my clients. I like to find out their interests so I can establish a common ground and generate conversations.

I never asked him about his social media accounts. He elaborated on how much he disliked social media. He said it was ruining our communication skills. He went on to say it has also disrupted the way we conduct business. This conversation was provoked after we witnessed a couple at lunch more engaged in their phones than with one another.

I will say this, those two days had me thinking. Am I ready for a relationship? Or was it nice just going out with someone new and having some good ole fashion fun?

I labeled this date in my diary as the Reserved who rattled the Recluse!

Lessons learned:

  1. Chivalry isn’t dead!
  2. Gentlemen Rock!
  3. Don’t confuse business with pleasure!
  4. Don’t rush or jump to conclusions too fast!
  5. Gentlemen have patience!
  6. Let the Man be a Man!
  7. Never rush a Gentleman!
  8. Let the Gentleman take charge!
  9. Just go with the flow without labels, whatever happens, happens!
  10. Real Gentlemen are just downright smooth and captivating without it being forced or phony.

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: