You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
209 lines
4.9 KiB
PHP
209 lines
4.9 KiB
PHP
<?php
|
|
/**
|
|
* Add the OpenGraph tags to the header.
|
|
*
|
|
* @since 0.9.0
|
|
* @package RankMath
|
|
* @subpackage RankMath\OpenGraph
|
|
* @author Rank Math <support@rankmath.com>
|
|
*
|
|
* @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.
|
|
*/
|
|
|
|
namespace RankMath\OpenGraph;
|
|
|
|
use RankMath\Post;
|
|
use RankMath\Term;
|
|
use RankMath\User;
|
|
use RankMath\Helper;
|
|
use RankMath\Paper\Paper;
|
|
use RankMath\Traits\Hooker;
|
|
use RankMath\Helpers\Str;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* OpenGraph class.
|
|
*/
|
|
class OpenGraph {
|
|
|
|
use Hooker;
|
|
|
|
/**
|
|
* Holds network slug.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $network = '';
|
|
|
|
/**
|
|
* Hold meta_key prefix.
|
|
*
|
|
* @var string
|
|
*/
|
|
public $prefix = '';
|
|
|
|
/**
|
|
* Schema type.
|
|
*
|
|
* @var bool|string
|
|
*/
|
|
protected $schema = false;
|
|
|
|
/**
|
|
* The Constructor.
|
|
*/
|
|
public function __construct() {
|
|
$this->action( 'rank_math/head', 'output_tags', 30 );
|
|
}
|
|
|
|
/**
|
|
* Main OpenGraph output.
|
|
*/
|
|
public function output_tags() {
|
|
wp_reset_query();
|
|
|
|
/**
|
|
* Hook to add all OpenGraph metadata
|
|
*
|
|
* The dynamic part of the hook name. $this->network, is the network slug.
|
|
*
|
|
* @param OpenGraph $this The current opengraph network object.
|
|
*/
|
|
$this->do_action( "opengraph/{$this->network}", $this );
|
|
}
|
|
|
|
/**
|
|
* Get title
|
|
*
|
|
* @return bool|string
|
|
*/
|
|
public function get_title() {
|
|
$title = $this->_title();
|
|
if ( $title && Helper::get_settings( 'titles.capitalize_titles' ) ) {
|
|
$title = Str::mb_ucwords( $title );
|
|
}
|
|
|
|
return $title ? $title : Paper::get()->get_title();
|
|
}
|
|
|
|
/**
|
|
* Get title.
|
|
*
|
|
* @return string
|
|
*/
|
|
private function _title() {
|
|
$key = $this->prefix . '_title';
|
|
|
|
if ( Post::is_simple_page() ) {
|
|
return Post::get_meta( $key, Post::get_page_id() );
|
|
}
|
|
|
|
if ( is_front_page() ) {
|
|
return Helper::replace_vars( Helper::get_settings( 'titles.homepage_facebook_title' ) );
|
|
}
|
|
|
|
if ( is_category() || is_tax() || is_tag() ) {
|
|
return Term::get_meta( $key );
|
|
}
|
|
|
|
return is_author() ? User::get_meta( $key ) : false;
|
|
}
|
|
|
|
/**
|
|
* Get description.
|
|
*
|
|
* @return bool|string
|
|
*/
|
|
public function get_description() {
|
|
$desc = false;
|
|
$key = $this->prefix . '_description';
|
|
|
|
if ( Post::is_simple_page() ) {
|
|
$desc = Post::get_meta( $key, Post::get_page_id() );
|
|
$desc = '' !== $desc ? $desc : $this->fallback_description( 'get_the_excerpt' );
|
|
} elseif ( is_front_page() ) {
|
|
$desc = Helper::replace_vars( Helper::get_settings( 'titles.homepage_facebook_description' ) );
|
|
} elseif ( is_category() || is_tag() || is_tax() ) {
|
|
$desc = Term::get_meta( $key );
|
|
$desc = '' !== $desc ? $desc : $this->fallback_description( 'term_description' );
|
|
} elseif ( is_author() ) {
|
|
$desc = User::get_meta( $key );
|
|
}
|
|
|
|
return $desc ? $desc : $this->fallback_description();
|
|
}
|
|
|
|
/**
|
|
* Get a fallback description.
|
|
*
|
|
* @param string $callback Function name to call.
|
|
*
|
|
* @return string
|
|
*/
|
|
protected function fallback_description( $callback = false ) {
|
|
$desc = Paper::get()->get_description();
|
|
if ( '' === $desc && $callback ) {
|
|
$desc = $callback();
|
|
}
|
|
|
|
return $desc;
|
|
}
|
|
|
|
/**
|
|
* Internal function to output social meta tags.
|
|
*
|
|
* @param string $property Property attribute value.
|
|
* @param string $content Content attribute value.
|
|
*
|
|
* @return bool
|
|
*/
|
|
public function tag( $property, $content ) {
|
|
$og_property = str_replace( ':', '_', $property );
|
|
/**
|
|
* Allow developers to change the content of specific social meta tags.
|
|
*
|
|
* The dynamic part of the hook name. $this->network, is the network slug
|
|
* and $og_property, is the property which we are outputting.
|
|
*
|
|
* @param string $content The content of the property.
|
|
*/
|
|
$content = $this->do_filter( "opengraph/{$this->network}/$og_property", $content );
|
|
if ( empty( $content ) || ! is_scalar( $content ) ) {
|
|
return false;
|
|
}
|
|
|
|
$tag = 'facebook' === $this->network ? 'property' : 'name';
|
|
$escaped_value = esc_attr( $content );
|
|
if ( false !== filter_var( $content, FILTER_VALIDATE_URL ) ) {
|
|
$escaped_value = esc_url_raw( $content );
|
|
}
|
|
printf( '<meta %1$s="%2$s" content="%3$s" />' . "\n", $tag, esc_attr( $property ), $escaped_value );
|
|
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* Get Overlay Image URL
|
|
*
|
|
* @param string $network The social network.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function get_overlay_image( $network = 'facebook' ) {
|
|
if ( is_singular() ) {
|
|
return Helper::get_post_meta( "{$network}_enable_image_overlay" ) ? Helper::get_post_meta( "{$network}_image_overlay", '', 'play' ) : '';
|
|
}
|
|
if ( is_category() || is_tag() || is_tax() ) {
|
|
return Helper::get_term_meta( "{$network}_enable_image_overlay" ) ? Helper::get_term_meta( "{$network}_image_overlay", 0, '', 'play' ) : '';
|
|
}
|
|
|
|
if ( is_author() ) {
|
|
return Helper::get_user_meta( "{$network}_enable_image_overlay" ) ? Helper::get_user_meta( "{$network}_image_overlay", 0, 'play' ) : '';
|
|
}
|
|
|
|
return '';
|
|
}
|
|
}
|