, CodeTRAX.org
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
* The NOTICE file contains additional licensing and copyright information.
*/
// Prevent direct access to this file.
if ( ! defined( 'ABSPATH' ) ) {
header( 'HTTP/1.0 403 Forbidden' );
echo 'This file should not be accessed directly!';
exit; // Exit if accessed directly
}
// Store plugin main file path
define( 'AMT_PLUGIN_FILE', __FILE__ );
// Store plugin directory
// NOTE: TODO: Consider using __DIR__ (requires PHP >=5.3) instead of dirname.
// See: http://stackoverflow.com/questions/2220443/whats-better-of-requiredirname-file-myparent-php-than-just-require#comment18170996_12129877
//define( 'AMT_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'AMT_PLUGIN_DIR', dirname(AMT_PLUGIN_FILE) . '/' );
// Import modules
require( AMT_PLUGIN_DIR . 'amt-settings.php' );
require( AMT_PLUGIN_DIR . 'amt-admin-panel.php' );
require( AMT_PLUGIN_DIR . 'amt-utils.php' );
require( AMT_PLUGIN_DIR . 'amt-template-tags.php' );
require( AMT_PLUGIN_DIR . 'amt-embed.php' );
require( AMT_PLUGIN_DIR . 'metadata/amt_basic.php' );
require( AMT_PLUGIN_DIR . 'metadata/amt_twitter_cards.php' );
require( AMT_PLUGIN_DIR . 'metadata/amt_opengraph.php' );
require( AMT_PLUGIN_DIR . 'metadata/amt_dublin_core.php' );
require( AMT_PLUGIN_DIR . 'metadata/amt_schemaorg.php' );
require( AMT_PLUGIN_DIR . 'metadata/amt_extended.php' );
// Command Line Interface via WPCLI
require( AMT_PLUGIN_DIR . 'amt-cli.php' );
/**
* Translation Domain
*
* Translation files are searched in: wp-content/plugins
*/
//load_plugin_textdomain('add-meta-tags', false, dirname( plugin_basename( AMT_PLUGIN_FILE ) ) . '/languages/');
//load_plugin_textdomain('add-meta-tags', false, AMT_PLUGIN_DIR . 'languages/');
// For language packs check:
load_plugin_textdomain('add-meta-tags');
/**
* Settings Link in the ``Installed Plugins`` page
*/
function amt_plugin_actions( $links, $file ) {
if( $file == plugin_basename( AMT_PLUGIN_FILE ) && function_exists( "admin_url" ) ) {
$settings_link = '' . __('Settings') . '';
// Add the settings link before other links
array_unshift( $links, $settings_link );
}
return $links;
}
add_filter( 'plugin_action_links', 'amt_plugin_actions', 10, 2 );
//
// Adds prefixes to the html element of the page
// ex xmlns
//
function amt_add_html_prefixes_and_namespaces( $content ) {
$options = amt_get_options();
$prefixes = array();
if ( $options['og_add_xml_namespaces'] == '1' ) {
$prefixes['og'] = 'http://ogp.me/ns#';
$prefixes['fb'] = 'https://www.facebook.com/2008/fbml';
}
// Dublin Core
// See: http://wiki.dublincore.org/index.php/Dublin_Core_Prefixes
if ( $options['dc_add_xml_namespaces'] == '1' ) {
$prefixes['dcterms'] = 'http://purl.org/dc/terms/';
}
// Generate the value of the prefix attribute
$prefix_value = '';
foreach ( $prefixes as $key => $val ) {
$prefix_value .= sprintf(' %s: %s', $key, $val);
}
// return the final attributes
$output = '';
// Although not necessary in HTML 5, we also add the xmlns="http://www.w3.org/1999/xhtml"
// Comment out if duplicate
$output .= ' xmlns="http://www.w3.org/1999/xhtml"';
// Add our prefixes
$output .= ' prefix="' . trim($prefix_value) . '"';
return $output . ' ' . $content;
}
add_filter('language_attributes', 'amt_add_html_prefixes_and_namespaces');
/**
* Replaces the text to be used in the title element, if a replacement text has been set.
*/
// function amt_custom_title_tag($title, $separator) {
function amt_custom_title_tag($title) {
// var_dump($title);
if ( is_feed() || is_search() || is_404() ) {
return $title;
}
// Get the options
$options = get_option('add_meta_tags_opts');
// Get current post object
$post = amt_get_queried_object();
$processed_title = amt_get_title_for_title_element($options, $post);
if ( ! empty($processed_title) ) {
if ( is_array($title) ) {
// WP >= 4.4
$processed_title = str_replace('%title%', $title['title'], $processed_title);
return array('title' => esc_attr($processed_title));
} else {
// WP < 4.4
$processed_title = str_replace('%title%', $title, $processed_title);
return esc_attr($processed_title);
}
}
// WordPress adds multipage information if a custom title is not set.
return $title;
}
// Both filter hooks are used so as to support themes with the 'title-tag' feature
// and also themes that generate the title using the 'wp_title()' template function.
add_filter('document_title_parts', 'amt_custom_title_tag', 9999, 1);
if ( apply_filters('amt_enable_legacy_title_support', true) ) {
add_filter('wp_title', 'amt_custom_title_tag', 9999, 1);
}
// if ( version_compare( get_bloginfo('version'), '4.4', '>=' ) ) {
// Since WP 4.4
// - https://make.wordpress.org/core/2015/10/20/document-title-in-4-4/
// add_filter('document_title_parts', 'amt_custom_title_tag', 9999, 1);
// } else {
// add_filter('wp_title', 'amt_custom_title_tag', 1000, 2);
// Reverting back to the one argument version of the fitlering function.
// add_filter('wp_title', 'amt_custom_title_tag', 9999, 1);
// }
/**
* Sets the correct lang attribute of the html element of the page,
* according to the content's locale.
*/
function amt_set_html_lang_attribute( $lang ) {
//var_dump($lang);
$options = get_option('add_meta_tags_opts');
if ( ! is_array($options) ) {
return $lang;
} elseif ( ! array_key_exists( 'manage_html_lang_attribute', $options) ) {
return $lang;
} elseif ( $options['manage_html_lang_attribute'] == '0' ) {
return $lang;
}
// Set the html lang attribute according to the locale
$locale = '';
if ( is_singular() ) {
$post = amt_get_queried_object();
// Store locale
$locale = str_replace( '_', '-', amt_get_language_content($options, $post) );
} else {
$locale = str_replace( '_', '-', amt_get_language_site($options) );
}
// Allow filtering
$locale = apply_filters( 'amt_wordpress_lang', $locale );
if ( ! empty($locale) ) {
// Replace WordPress locale with ours. (even if it's the same)
$lang = str_replace( get_bloginfo('language'), $locale, $lang );
}
return $lang;
}
add_filter( 'language_attributes', 'amt_set_html_lang_attribute' );
/**
* Returns an array of all the generated metadata for the head area.
*/
function amt_get_metadata_head($post, $options) {
$do_add_metadata = true;
$metadata_arr = array();
// No metadata for password protected posts.
if ( post_password_required() ) {
return $metadata_arr;
}
// Robots Meta Tag content.
$robots_content = '';
// Check for NOINDEX,FOLLOW on archives.
// There is no need to further process metadata as we explicitly ask search
// engines not to index the content.
if ( is_archive() || is_search() ) {
if (
( is_search() && ($options["noindex_search_results"] == "1") ) || // Search results
( is_date() && ($options["noindex_date_archives"] == "1") ) || // Date and time archives
( is_category() && is_paged() && ($options["noindex_category_archives"] == "1") ) || // Category archives (except 1st page)
( is_tag() && is_paged() && ($options["noindex_tag_archives"] == "1") ) || // Tag archives (except 1st page)
( is_tax() && is_paged() && ($options["noindex_taxonomy_archives"] == "1") ) || // Custom taxonomy archives (except 1st page)
( is_author() && is_paged() && ($options["noindex_author_archives"] == "1") ) // Author archives (except 1st page)
) {
$do_add_metadata = false; // No need to process metadata
// $robots_content is old. Should remove.
////$robots_content = 'NOINDEX,FOLLOW';
// Allow filtering of the robots meta tag content.
// Dev Note: Filtering of the robots meta tag takes place here, so as to avoid double filtering in case $do_add_metadata is true.
////$robots_content = apply_filters( 'amt_robots_data', $robots_content );
$robots_options = array( 'noindex', 'follow' );
// Allow filtering of the robots meta tag content.
// Dev Note: Filtering of the robots meta tag takes place here, so as to avoid double filtering in case $do_add_metadata is true.
$robots_options = apply_filters( 'amt_robots_options_noindex', $robots_options );
}
}
// Add a robots meta tag if its content is not empty.
if ( ! empty( $robots_options ) ) {
$metadata_arr[] = '';
}
// Check post object
if ( is_null( $post ) ) {
// Allow metadata on the default front page (latest posts).
// A post object is not available on that page, but we still need to
// generate metadata for it. A $post object exists for the "front page"
// and the "posts page" when static pages are used. No allow rule needed.
if ( ! amt_is_default_front_page() ) {
$do_add_metadata = false;
}
} elseif ( is_singular() ) {
// The post type check should only take place on content pages.
// Check if metadata should be added to this content type.
$post_type = get_post_type( $post );
if ( ! in_array( $post_type, amt_get_supported_post_types() ) ) {
$do_add_metadata = false;
}
}
// Add Metadata
if ($do_add_metadata) {
// Attachments and embedded media are collected only on content pages.
if ( is_singular() ) {
// Get an array containing the attachments
$attachments = amt_get_ordered_attachments( $post );
//var_dump($attachments);
// Get an array containing the URLs of the embedded media
$embedded_media = amt_get_embedded_media( $post );
//var_dump($embedded_media);
} else {
$attachments = array();
$embedded_media = array();
}
// Basic Meta tags
$metadata_arr = array_merge( $metadata_arr, amt_add_basic_metadata_head( $post, $attachments, $embedded_media, $options ) );
//var_dump(amt_add_basic_metadata());
// Add Opengraph
$metadata_arr = array_merge( $metadata_arr, amt_add_opengraph_metadata_head( $post, $attachments, $embedded_media, $options ) );
// Add Twitter Cards
$metadata_arr = array_merge( $metadata_arr, amt_add_twitter_cards_metadata_head( $post, $attachments, $embedded_media, $options ) );
// Add Dublin Core
$metadata_arr = array_merge( $metadata_arr, amt_add_dublin_core_metadata_head( $post, $attachments, $embedded_media, $options ) );
// Add Google+ Author/Publisher links
$metadata_arr = array_merge( $metadata_arr, amt_add_schemaorg_metadata_head( $post, $attachments, $embedded_media, $options ) );
// Add JSON+LD Schema.org
$metadata_arr = array_merge( $metadata_arr, amt_add_jsonld_schemaorg_metadata_head( $post, $attachments, $embedded_media, $options ) );
}
// Allow filtering of the all the generated metatags
$metadata_arr = apply_filters( 'amt_metadata_head', $metadata_arr );
return $metadata_arr;
}
/**
* Prints the generated metadata for the head area.
*/
function amt_add_metadata_head() {
// For AMT timings
$t = microtime(true);
// Get the options the DB
$options = get_option("add_meta_tags_opts");
// Get current post object
$post = amt_get_queried_object();
// Caching indicator
$is_cached = 'no';
// Get the metadata
if ( absint($options['transient_cache_expiration']) > 0 && apply_filters('amt_enable_metadata_cache', true) ) {
$metadata_arr = amt_get_transient_cache($post, $options, $where='head');
if ( empty($metadata_arr) ) {
$metadata_arr = amt_get_metadata_head($post, $options);
// Cache the metadata
if ( ! empty($metadata_arr) ) {
amt_set_transient_cache($post, $options, $metadata_arr, $where='head');
}
} else {
$is_cached = 'yes';
}
} else {
$metadata_arr = amt_get_metadata_head($post, $options);
}
// For AMT timings
if ( ! empty($metadata_arr) && $options['enable_timings'] == '1' ) {
array_unshift( $metadata_arr, sprintf( '', (microtime(true) - $t) * 1000, $is_cached ) );
}
// Add our comment
if ( $options["omit_vendor_html_comments"] == "0" ) {
if ( count( $metadata_arr ) > 0 ) {
array_unshift( $metadata_arr, "" );
array_push( $metadata_arr, "" );
}
}
// Return complete metadata array
return $metadata_arr;
}
function amt_print_head_block() {
// Get the options the DB
$options = get_option("add_meta_tags_opts");
if ( amt_check_run_metadata_review_code($options) ) {
// Here we use non persistent caching in order to be able to use the same output in the review mode.
// Non persistent object cache
$amtcache_key = amt_get_amtcache_key('amt_metadata_block_head');
$metadata_block_head = wp_cache_get( $amtcache_key, $group='add-meta-tags' );
if ( $metadata_block_head === false ) {
$metadata_block_head = amt_add_metadata_head();
// Cache even empty
wp_cache_add( $amtcache_key, $metadata_block_head, $group='add-meta-tags' );
}
} else {
$metadata_block_head = amt_add_metadata_head();
}
// Print the metadata block
echo PHP_EOL . implode( PHP_EOL, $metadata_block_head ) . PHP_EOL . PHP_EOL;
}
add_action('wp_head', 'amt_print_head_block', 0);
// AMP page
//if ( function_exists('is_amp_endpoint') && is_amp_endpoint() ) {
add_action('amp_post_template_head', 'amt_print_head_block', 0);
//}
/**
* Returns an array of all the generated metadata for the footer area.
*/
function amt_get_metadata_footer($post, $options) {
$do_add_metadata = true;
$metadata_arr = array();
// Check post object
if ( is_null( $post ) ) {
// Allow metadata on the default front page (latest posts).
// A post object is not available on that page, but we still need to
// generate metadata for it. A $post object exists for the "front page"
// and the "posts page" when static pages are used. No allow rule needed.
if ( ! amt_is_default_front_page() ) {
$do_add_metadata = false;
}
} elseif ( is_singular() ) {
// The post type check should only take place on content pages.
// Check if metadata should be added to this content type.
$post_type = get_post_type( $post );
if ( ! in_array( $post_type, amt_get_supported_post_types() ) ) {
$do_add_metadata = false;
}
}
// Add Metadata
if ($do_add_metadata) {
// Attachments and embedded media are collected only on content pages.
if ( is_singular() ) {
// Get an array containing the attachments
$attachments = amt_get_ordered_attachments( $post );
//var_dump($attachments);
// Get an array containing the URLs of the embedded media
$embedded_media = amt_get_embedded_media( $post );
//var_dump($embedded_media);
} else {
$attachments = array();
$embedded_media = array();
}
// Add Schema.org Microdata
$metadata_arr = array_merge( $metadata_arr, amt_add_schemaorg_metadata_footer( $post, $attachments, $embedded_media, $options ) );
}
// Allow filtering of all the generated metatags
$metadata_arr = apply_filters( 'amt_metadata_footer', $metadata_arr );
return $metadata_arr;
}
/**
* Prints the generated metadata for the footer area.
*/
function amt_add_metadata_footer() {
// For AMT timings
$t = microtime(true);
// Get the options the DB
$options = get_option("add_meta_tags_opts");
// Get current post object
$post = amt_get_queried_object();
// Caching indicator
$is_cached = 'no';
// Get the metadata
// NOTE: Currently metadata is cached for content pages only (is_singular())
if ( absint($options['transient_cache_expiration']) > 0 && apply_filters('amt_enable_metadata_cache', true) ) {
$metadata_arr = amt_get_transient_cache($post, $options, $where='footer');
if ( empty($metadata_arr) ) {
$metadata_arr = amt_get_metadata_footer($post, $options);
// Cache the metadata
if ( ! empty($metadata_arr) ) {
amt_set_transient_cache($post, $options, $metadata_arr, $where='footer');
}
} else {
$is_cached = 'yes';
}
} else {
$metadata_arr = amt_get_metadata_footer($post, $options);
}
// For AMT timings
if ( ! empty($metadata_arr) && $options['enable_timings'] == '1' ) {
array_unshift( $metadata_arr, sprintf( '', (microtime(true) - $t) * 1000, $is_cached ) );
}
// Add our comment
if ( $options["omit_vendor_html_comments"] == "0" ) {
if ( count( $metadata_arr ) > 0 ) {
array_unshift( $metadata_arr, "" );
array_push( $metadata_arr, "" );
}
}
// Return complete metadata array
return $metadata_arr;
}
function amt_print_footer_block() {
// Get the options the DB
$options = get_option("add_meta_tags_opts");
if ( amt_check_run_metadata_review_code($options) ) {
// Here we use non persistent caching in order to be able to use the same output in the review mode.
// Non persistent object cache
$amtcache_key = amt_get_amtcache_key('amt_metadata_block_footer');
$metadata_block_footer = wp_cache_get( $amtcache_key, $group='add-meta-tags' );
if ( $metadata_block_footer === false ) {
$metadata_block_footer = amt_add_metadata_footer();
// Cache even empty
wp_cache_add( $amtcache_key, $metadata_block_footer, $group='add-meta-tags' );
}
} else {
$metadata_block_footer = amt_add_metadata_footer();
}
// Print the metadata block
echo PHP_EOL . implode( PHP_EOL, $metadata_block_footer ) . PHP_EOL . PHP_EOL;
}
add_action('wp_footer', 'amt_print_footer_block', 0);
//
// Metadata Review Mode
//
// Prints the AMT Metadata Review Mode styles
function amt_metadata_review_mode_enqueue_styles_scripts() {
$options = get_option("add_meta_tags_opts");
if ( amt_check_run_metadata_review_code($options) ) {
// Register metadata review mode stylesheet.
wp_register_style( 'amt_metadata_review_mode', plugins_url( 'css/amt-metadata-review-mode.css', AMT_PLUGIN_FILE ) );
//wp_register_style( 'custom_toolbar_css', plugin_dir_url( __FILE__ ) . 'custom-toolbar.css', '', '', 'screen' );
// Enqueue the style
wp_enqueue_style( 'amt_metadata_review_mode' );
$script_path = 'js/amt-metadata-review-mode.js';
if ( apply_filters('amt_metadata_review_mode_enable_enhanced_script', false) ) {
$script_path = 'js/amt-metadata-review-mode-enhanced.js';
}
// Register metadata review mode script
wp_register_script( 'amt_metadata_review_mode', plugins_url( $script_path, AMT_PLUGIN_FILE ), array('jquery') );
// Enqueue the style
wp_enqueue_script( 'amt_metadata_review_mode' );
}
}
// Add styles and scripts for Metadata Review.
//add_action( 'admin_enqueue_scripts', 'amt_metadata_review_mode_enqueue_styles_scripts' );
add_action( 'wp_enqueue_scripts', 'amt_metadata_review_mode_enqueue_styles_scripts' );
// Build the review data
function amt_get_metadata_review($options, $add_as_view=false) {
// Collect metadata
//
// Metadata from head section
//
$metadata_block_head = null;
// Non persistent object cache
$amtcache_key = amt_get_amtcache_key('amt_metadata_block_head');
$metadata_block_head = wp_cache_get( $amtcache_key, $group='add-meta-tags' );
if ( $metadata_block_head === false ) {
$metadata_block_head = amt_add_metadata_head();
// Cache even empty
wp_cache_add( $amtcache_key, $metadata_block_head, $group='add-meta-tags' );
}
//
// Metadata from footer
//
$metadata_block_footer = null;
// Non persistent object cache
$amtcache_key = amt_get_amtcache_key('amt_metadata_block_footer');
$metadata_block_footer = wp_cache_get( $amtcache_key, $group='add-meta-tags' );
if ( $metadata_block_footer === false ) {
$metadata_block_footer = amt_add_metadata_footer();
// Cache even empty
wp_cache_add( $amtcache_key, $metadata_block_footer, $group='add-meta-tags' );
}
//
// Metadata from content filter (Schema.org Microdata)
//
$metadata_block_content_filter = null;
if ( $options["schemaorg_force_jsonld"] == "0" ) {
// What happens here:
// The Metadata Review mode content filter should have a bigger priority that the Schema.org
// Microdata filter. There the metadata has been stored in non persistent cache.
// Here we retrieve it. See the notes there for more info.
$metadata_block_content_filter = wp_cache_get( 'amt_cache_metadata_block_content_filter', $group='add-meta-tags' );
}
// Build texts
if ( $add_as_view ) {
// $BR = '
';
$BR = PHP_EOL;
$enclosure_start = '
' . $BR;
$enclosure_end = '' . '' . $BR;
$enclosure_end = '' . $BR . $BR;
}
if ( $options['review_mode_omit_notices'] == '0' ) {
$text_title = 'Add-Meta-Tags — Metadata Review Mode' . $BR . $BR;
} else {
$text_title = '';
}
if ( $options['review_mode_omit_notices'] == '0' ) {
$text_intro = 'NOTE: This menu has been added because Metadata Review Mode has been enabled in';
$text_intro .= $BR . 'the Add-Meta-Tags settings. Only logged in administrators can see this menu.';
} else {
$text_intro = '';
}
if ( $options['review_mode_omit_notices'] == '0' ) {
//$text_head_intro = $BR . $BR . 'The following metadata has been added to the head section.' . $BR . $BR;
$text_head_intro = $BR . $BR . 'Metadata at the head section' . $BR;
$text_head_intro .= '============================' . $BR . $BR;
} else {
$text_head_intro = '';
}
if ( $options['review_mode_omit_notices'] == '0' ) {
//$text_footer_intro = $BR . $BR . 'The following metadata has been embedded in the body of the page.' . $BR . $BR;
$text_footer_intro = $BR . $BR . 'Metadata within the body area' . $BR;
$text_footer_intro .= '=============================' . $BR . $BR;
} else {
$text_footer_intro = $BR . $BR;
}
if ( $options['review_mode_omit_notices'] == '0' ) {
//$text_content_filter_intro = $BR . $BR . 'The following metadata has been embedded in the body of the page.' . $BR;
$text_content_filter_intro = $BR . $BR . 'Metadata within the body area' . $BR;
$text_content_filter_intro .= '=============================' . $BR;
} else {
$text_content_filter_intro = $BR;
}
//
// Build view
//
$data = $enclosure_start . $text_title;
$data .= apply_filters('amt_metadata_review_text_before', $text_intro, $metadata_block_head, $metadata_block_footer, $metadata_block_content_filter);
//
// Metadata Overview
//
if ( $options["review_mode_metadata_report"] == '1' ) {
$metadata_overview_default_text = '';
$data .= amt_metadata_analysis($metadata_overview_default_text, $metadata_block_head, $metadata_block_footer, $metadata_block_content_filter);
}
//
// Metadata from head section
//
// Add for review
if ( ! empty($metadata_block_head) ) {
// Pretty print JSON+LD
if ( array_key_exists('json+ld_data', $metadata_block_head) ) {
$jsonld_data_arr = json_decode( $metadata_block_head['json+ld_data'] );
$metadata_block_head['json+ld_data'] = json_encode($jsonld_data_arr, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
}
$data .= apply_filters('amt_metadata_review_head', $text_head_intro, $metadata_block_head);
$data .= amt_metatag_highlighter( implode( $BR, $metadata_block_head ) );
}
//
// Metadata from footer
//
// Add for review
if ( ! empty($metadata_block_footer) ) {
$data .= apply_filters('amt_metadata_review_footer', $text_footer_intro, $metadata_block_footer);
$data .= amt_metatag_highlighter( implode( $BR, $metadata_block_footer ) );
}
//
// Metadata from content filter (Schema.org Microdata)
//
if ( $options["schemaorg_force_jsonld"] == "0" ) {
if ( $metadata_block_content_filter !== false ) {
// Add for review
$data .= apply_filters('amt_metadata_review_content_filter', $text_content_filter_intro, $metadata_block_content_filter);
$data .= amt_metatag_highlighter( implode( $BR, $metadata_block_content_filter ) );
}
}
$data .= apply_filters('amt_metadata_review_text_after', '', $metadata_block_head, $metadata_block_footer, $metadata_block_content_filter);
// End
$data .= $BR . $BR . $enclosure_end;
return $data;
}
// Old view within the content
function amt_add_metadata_review($post_body) {
// Only works in content pages
if ( ! is_singular() ) {
return $post_body;
}
$options = get_option("add_meta_tags_opts");
// Only administrators can see the review box if is_singular() is true.
if ( amt_check_run_metadata_review_code($options) ) {
if ( ! apply_filters('amt_metadata_review_mode_enable_alternative', false) ) {
return $post_body;
}
// Get current post object
$post = amt_get_queried_object();
if ( is_null( $post ) ) {
return $post_body;
}
// Check if metadata is supported on this content type.
$post_type = get_post_type( $post );
if ( ! in_array( $post_type, amt_get_supported_post_types() ) ) {
return $post_body;
}
$post_body = amt_get_metadata_review($options) . '