/wp-content/plugins/all-in-one-seo-pack/app/Common/Social/Twitter.php
https://gitlab.com/ebrjose/comcebu · PHP · 261 lines · 141 code · 40 blank · 80 comment · 35 complexity · cc1c6a1d86bec6f8b5eb9ce5093ce2fe MD5 · raw file
- <?php
- namespace AIOSEO\Plugin\Common\Social;
- // Exit if accessed directly.
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * Handles the Twitter meta.
- *
- * @since 4.0.0
- */
- class Twitter {
- /**
- * Returns the Twitter URL for the site.
- *
- * @since 4.0.0
- *
- * @return string The Twitter URL.
- */
- public function getTwitterUrl() {
- if ( ! aioseo()->options->social->profiles->sameUsername->enable ) {
- return aioseo()->options->social->profiles->urls->twitterUrl;
- }
- $userName = aioseo()->options->social->profiles->sameUsername->username;
- return ( $userName && in_array( 'twitterUrl', aioseo()->options->social->profiles->sameUsername->included, true ) )
- ? 'https://twitter.com/' . $userName
- : '';
- }
- /**
- * Returns the Twitter card type.
- *
- * @since 4.0.0
- *
- * @return string $card The card type.
- */
- public function getCardType() {
- if ( is_home() && 'posts' === get_option( 'show_on_front' ) ) {
- return aioseo()->options->social->twitter->homePage->cardType;
- }
- $metaData = aioseo()->meta->metaData->getMetaData();
- return ! empty( $metaData->twitter_card ) && 'default' !== $metaData->twitter_card ? $metaData->twitter_card : aioseo()->options->social->twitter->general->defaultCardType;
- }
- /**
- * Returns the Twitter creator.
- *
- * @since 4.0.0
- *
- * @return string The creator.
- */
- public function getCreator() {
- $author = '';
- $post = aioseo()->helpers->getPost();
- if ( $post && aioseo()->options->social->twitter->general->showAuthor ) {
- $twitterUser = get_the_author_meta( 'aioseo_twitter', $post->post_author );
- $author = $twitterUser ? $twitterUser : aioseo()->social->twitter->getTwitterUrl();
- $author = aioseo()->social->twitter->prepareUsername( $author );
- }
- return $author;
- }
- /**
- * Returns the Twitter image URL.
- *
- * @since 4.0.0
- *
- * @param int $postId The post ID (optional).
- * @return string The image URL.
- */
- public function getImage( $postId = null ) {
- $post = aioseo()->helpers->getPost( $postId );
- if ( is_home() && 'posts' === get_option( 'show_on_front' ) ) {
- $image = aioseo()->options->social->twitter->homePage->image;
- if ( empty( $image ) ) {
- $image = aioseo()->options->social->facebook->homePage->image;
- }
- if ( empty( $image ) ) {
- $image = aioseo()->social->image->getImage( 'twitter', aioseo()->options->social->twitter->general->defaultImageSourcePosts, $post );
- }
- return $image ? $image : aioseo()->social->facebook->getImage();
- }
- $metaData = aioseo()->meta->metaData->getMetaData( $post );
- if ( ! empty( $metaData->twitter_use_og ) ) {
- return aioseo()->social->facebook->getImage();
- }
- $image = '';
- if ( ! empty( $metaData ) ) {
- $imageSource = ! empty( $metaData->twitter_image_type ) && 'default' !== $metaData->twitter_image_type
- ? $metaData->twitter_image_type
- : aioseo()->options->social->twitter->general->defaultImageSourcePosts;
- $image = aioseo()->social->image->getImage( 'twitter', $imageSource, $post );
- }
- return $image ? $image : aioseo()->social->facebook->getImage();
- }
- /**
- * Returns the Twitter title for the current page.
- *
- * @since 4.0.0
- *
- * @param WP_Post|integer $post The post object or ID (optional).
- * @return string The Twitter title.
- */
- public function getTitle( $post = null ) {
- if ( is_home() && 'posts' === get_option( 'show_on_front' ) ) {
- $title = aioseo()->meta->title->helpers->prepare( aioseo()->options->social->twitter->homePage->title );
- return $title ? $title : aioseo()->social->facebook->getTitle( $post );
- }
- $post = aioseo()->helpers->getPost( $post );
- $metaData = aioseo()->meta->metaData->getMetaData( $post );
- if ( ! empty( $metaData->twitter_use_og ) ) {
- return aioseo()->social->facebook->getTitle( $post );
- }
- $title = '';
- if ( ! empty( $metaData->twitter_title ) ) {
- $title = aioseo()->meta->title->helpers->prepare( $metaData->twitter_title );
- }
- return $title ? $title : aioseo()->social->facebook->getTitle( $post );
- }
- /**
- * Returns the Twitter description for the current page.
- *
- * @since 4.0.0
- *
- * @param WP_Post|integer $post The post object or ID (optional).
- * @return string The Twitter description.
- */
- public function getDescription( $post = null ) {
- if ( is_home() && 'posts' === get_option( 'show_on_front' ) ) {
- $description = aioseo()->meta->description->helpers->prepare( aioseo()->options->social->twitter->homePage->description );
- return $description ? $description : aioseo()->social->facebook->getDescription( $post );
- }
- $post = aioseo()->helpers->getPost( $post );
- $metaData = aioseo()->meta->metaData->getMetaData( $post );
- if ( ! empty( $metaData->twitter_use_og ) ) {
- return aioseo()->social->facebook->getDescription( $post );
- }
- $description = '';
- if ( ! empty( $metaData->twitter_description ) ) {
- $description = aioseo()->meta->description->helpers->prepare( $metaData->twitter_description );
- }
- return $description ? $description : aioseo()->social->facebook->getDescription( $post );
- }
- /**
- * Prepare twitter username for public display.
- *
- * We do things like strip out the URL, etc and return just (at)username.
- * At the moment, we'll check for 1 of 3 things... (at)username, username, and https://twitter.com/username.
- *
- * @since 4.0.0
- *
- * @param string $profile Twitter username.
- * @param boolean $includeAt Whether or not ot include the @ sign.
- * @return string Full Twitter username.
- */
- public function prepareUsername( $profile, $includeAt = true ) {
- if ( preg_match( '/^(\@)?[A-Za-z0-9_]+$/', $profile ) ) {
- if ( '@' !== $profile[0] && $includeAt ) {
- $profile = '@' . $profile;
- } elseif ( '@' === $profile[0] && ! $includeAt ) {
- $profile = ltrim( $profile, '@' );
- }
- } elseif ( strpos( $profile, 'twitter.com' ) ) {
- $profile = esc_url( $profile );
- // extract the twitter username from the url.
- $parsedTwitterProfile = wp_parse_url( $profile );
- $path = $parsedTwitterProfile['path'];
- $pathParts = explode( '/', $path );
- $profile = $pathParts[1];
- if ( $profile ) {
- if ( '@' !== $profile[0] && $includeAt ) {
- $profile = '@' . $profile;
- } elseif ( '@' === $profile[0] && ! $includeAt ) {
- $profile = ltrim( $profile, '@' );
- }
- }
- }
- return $profile;
- }
- /**
- * Get additional twitter data.
- *
- * @since 4.0.0
- *
- * @return array An array of additional twitter data.
- */
- public function getAdditionalData() {
- if ( ! aioseo()->options->social->twitter->general->additionalData ) {
- return [];
- }
- $data = [];
- $post = aioseo()->helpers->getPost();
- if ( $post->post_author ) {
- $data[] = [
- 'label' => __( 'Written by', 'all-in-one-seo-pack' ),
- 'value' => get_the_author_meta( 'display_name', $post->post_author )
- ];
- }
- if ( ! empty( $post->post_content ) ) {
- $minutes = $this->getReadingTime( $post->post_content );
- if ( ! empty( $minutes ) ) {
- $data[] = [
- 'label' => __( 'Est. reading time', 'all-in-one-seo-pack' ),
- // Translators: 1 - The estimated reading time.
- 'value' => sprintf( _n( '%1$s minute', '%1$s minutes', $minutes, 'all-in-one-seo-pack' ), $minutes )
- ];
- }
- }
- return $data;
- }
- /**
- * Returns the estimated reading time for a string.
- *
- * @since 4.0.0
- *
- * @param string $string The string to count.
- * @return integer The estimated reading time as an integer.
- */
- private function getReadingTime( $string ) {
- $wpm = 200;
- $word = str_word_count( wp_strip_all_tags( $string ) );
- return round( $word / $wpm );
- }
- }