EVOLUTION-MANAGER
Edit File: class-facebook.php
<?php /** * This code adds the Facebook metadata. * * @since 0.9.0 * @package RankMath * @subpackage RankMath\OpenGraph * @author Rank Math <support@rankmath.com> */ namespace RankMath\OpenGraph; use RankMath\Helper; use RankMath\Paper\Paper; use RankMath\Helpers\Str; defined( 'ABSPATH' ) || exit; /** * Facebook class. */ class Facebook extends OpenGraph { /** * Network slug. * * @var string */ public $network = 'facebook'; /** * Metakey prefix. * * @var string */ public $prefix = 'facebook'; /** * The Constructor. */ public function __construct() { $this->hooks(); add_filter( 'jetpack_enable_open_graph', '__return_false' ); parent::__construct(); } /** * Hooks. */ private function hooks() { if ( isset( $GLOBALS['fb_ver'] ) || class_exists( 'Facebook_Loader', false ) ) { $this->filter( 'fb_meta_tags', 'facebook_filter', 10, 1 ); return; } $this->filter( 'language_attributes', 'add_namespace', 15 ); $this->action( 'rank_math/opengraph/facebook', 'locale', 1 ); $this->action( 'rank_math/opengraph/facebook', 'type', 5 ); $this->action( 'rank_math/opengraph/facebook', 'title', 10 ); $this->action( 'rank_math/opengraph/facebook', 'description', 11 ); $this->action( 'rank_math/opengraph/facebook', 'url', 12 ); $this->action( 'rank_math/opengraph/facebook', 'site_name', 13 ); $this->action( 'rank_math/opengraph/facebook', 'website', 14 ); $this->action( 'rank_math/opengraph/facebook', 'site_owner', 20 ); $this->action( 'rank_math/opengraph/facebook', 'image', 30 ); } /** * Filter the Facebook plugins metadata. * * @param array $meta_tags The array to fix. * @return array */ public function facebook_filter( $meta_tags ) { $meta_tags['http://ogp.me/ns#type'] = $this->type( false ); $meta_tags['http://ogp.me/ns#title'] = $this->title( false ); // Filter the locale too because the Facebook plugin locale code is not as good as ours. $meta_tags['http://ogp.me/ns#locale'] = $this->locale( false ); $desc = $this->description( false ); if ( ! empty( $desc ) ) { $meta_tags['http://ogp.me/ns#description'] = $desc; } return $meta_tags; } /** * Adds prefix attributes to the <html> tag. * * @param string $input The input namespace string. * @return string */ public function add_namespace( $input ) { return $input . ' prefix="og: https://ogp.me/ns#"'; } /** * Output the locale, doing some conversions to make sure the proper Facebook locale is outputted. * * @see http://www.facebook.com/translations/FacebookLocales.xml for the list of supported locales * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ * * @param bool $echo Whether to echo or return the locale. * @return string */ public function locale( $echo = true ) { $locale = get_locale(); $locale = Facebook_Locale::sanitize( $locale ); $locale = Facebook_Locale::validate( $locale ); if ( $echo ) { $this->tag( 'og:locale', $locale ); } return $locale; } /** * Output the OpenGraph type. * * @link https://developers.facebook.com/docs/reference/opengraph/object-type/object/ * * @param bool $echo Whether to echo or return the type. * @return string */ public function type( $echo = true ) { $type = $this->get_type(); if ( is_singular() ) { if ( 'article' === $type && ! is_front_page() ) { $this->action( 'rank_math/opengraph/facebook', 'article_author', 15 ); $this->action( 'rank_math/opengraph/facebook', 'tags', 16 ); $this->action( 'rank_math/opengraph/facebook', 'category', 17 ); } $this->action( 'rank_math/opengraph/facebook', 'publish_date', 19 ); } /** * Allow changing the OpenGraph type of the page. * * @param string $type The OpenGraph type string. */ $type = $this->do_filter( 'opengraph/type', $type ); if ( Str::is_non_empty( $type ) && $echo ) { $this->tag( 'og:type', $type ); } return $type; } /** * Get type. * * @return string */ private function get_type() { if ( is_front_page() || is_home() ) { return 'website'; } if ( is_author() ) { return 'profile'; } return $this->is_product() ? 'product' : 'article'; } /** * Outputs the SEO title as OpenGraph title. * * @copyright Copyright (C) 2008-2019, Yoast BV * The following code is a derivative work of the code from the Yoast(https://github.com/Yoast/wordpress-seo/), which is licensed under GPL v3. * * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ * * @param bool $echo Whether or not to echo the output. * * @return string */ public function title( $echo = true ) { $title = trim( $this->get_title() ); if ( $echo ) { $this->tag( 'og:title', $title ); } return $title; } /** * Output the OpenGraph description, specific OG description first, if not, grab the meta description. * * @param bool $echo Whether to echo or return the description. * @return string */ public function description( $echo = true ) { $desc = trim( $this->get_description() ); if ( $echo ) { $this->tag( 'og:description', $desc ); } return $desc; } /** * Output the canonical URL for the OpenGraph URL. * * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ */ public function url() { /** * Filter the OpenGraph URL. */ $url = $this->do_filter( 'opengraph/url', esc_url( Paper::get()->get_canonical() ) ); $this->tag( 'og:url', $url ); } /** * Output the site name straight from the blog info. */ public function site_name() { $this->tag( 'og:site_name', Helper::get_settings( 'titles.website_name', get_bloginfo( 'name' ) ) ); } /** * Outputs the websites FB page. * * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ */ public function website() { $site = Helper::get_settings( 'titles.social_url_facebook' ); if ( 'article' === $this->type( false ) && '' !== $site ) { $this->tag( 'article:publisher', $site ); } } /** * Outputs the site owner. * * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ */ public function site_owner() { $app_id = Helper::get_settings( 'titles.facebook_app_id' ); if ( 0 !== absint( $app_id ) ) { $this->tag( 'fb:app_id', $app_id ); return; } $admins = Helper::get_settings( 'titles.facebook_admin_id' ); if ( '' !== trim( $admins ) ) { $this->tag( 'fb:admins', $admins ); return; } } /** * Create new Image class and get the images to set the `og:image`. * * @param string|bool $image Optional. Image URL. */ public function image( $image = false ) { $images = new Image( $image, $this ); $images->show(); } /** * Outputs the authors FB page. * * @link https://developers.facebook.com/blog/post/2013/06/19/platform-updates--new-open-graph-tags-for-media-publishers-and-more/ * @link https://developers.facebook.com/docs/reference/opengraph/object-type/article/ */ public function article_author() { $this->tag( 'article:author', $this->get_author() ); } /** * Output the article tags as `article:tag` tags. */ public function tags() { $tags = get_the_tags(); if ( is_wp_error( $tags ) || empty( $tags ) ) { return; } foreach ( $tags as $tag ) { $this->tag( 'article:tag', $tag->name ); } } /** * Output the article category as an `article:section` tag. */ public function category() { $terms = get_the_category(); if ( is_wp_error( $terms ) || empty( $terms ) ) { return; } // We can only show one section here, so we take the first one. $this->tag( 'article:section', $terms[0]->name ); } /** * Output the article publish and last modification date. */ public function publish_date() { $post = get_post(); $pub = mysql2date( DATE_W3C, $post->post_date, false ); $mod = mysql2date( DATE_W3C, $post->post_modified, false ); if ( strtotime( $mod ) > strtotime( $pub ) ) { $this->tag( 'og:updated_time', $mod ); } } /** * Get author. * * @return string */ private function get_author() { $author = Helper::get_user_meta( 'facebook_author', $GLOBALS['post']->post_author ); if ( $author ) { return $author; } $author = get_user_meta( $GLOBALS['post']->post_author, 'facebook', true ); if ( $author ) { return $author; } return Helper::get_settings( 'titles.facebook_author_urls' ); } /** * Is WooCommerce product * * @return bool */ private function is_product() { return function_exists( 'is_woocommerce' ) && function_exists( 'is_product' ) && is_product(); } }