'ImageObject', 'url' => $structured_data_logo , 'height' => $ampforwp_sd_height, 'width' => $ampforwp_sd_width, ); //code for adding 'description' meta from Yoast SEO if('yoast' == ampforwp_get_setting('ampforwp-seo-selection') && ampforwp_get_setting('ampforwp-seo-yoast-description') && !class_exists('Yoast\\WP\\SEO\\Integrations\\Front_End_Integration')){ if ( class_exists('WPSEO_Frontend') ) { $front = WPSEO_Frontend::get_instance(); $desc = $front->metadesc( false ); if ( $desc ) { $metadata['description'] = $desc; } // Code for Custom Frontpage Yoast SEO Description $post_id = ampforwp_get_frontpage_id(); if ( class_exists('WPSEO_Meta') ) { $custom_fp_desc = WPSEO_Meta::get_value('metadesc', $post_id ); if ( is_home() && $redux_builder_amp['amp-frontpage-select-option'] ) { if ( $custom_fp_desc ) { $metadata['description'] = $custom_fp_desc; } else { unset( $metadata['description'] ); } } } } } //End of code for adding 'description' meta from Yoast SEO return $metadata; } // 13. Add Custom Placeholder Image for Structured Data. // if there is no image in the post, then use this image to validate Structured Data. add_filter( 'amp_post_template_metadata', 'ampforwp_update_metadata_featured_image', 10, 2 ); function ampforwp_update_metadata_featured_image( $metadata, $post ) { global $redux_builder_amp; global $post; $post_id = get_the_ID() ; $post_image_id = get_post_thumbnail_id( $post_id ); $structured_data_image = wp_get_attachment_image_src( $post_image_id, 'full' ); $post_image_check = $structured_data_image; $structured_data_image_url = ''; $ampforwp_sd_img_placeholder = ampforwp_get_setting('amp-structured-data-placeholder-image','url'); if ( $post_image_check == false) { if (! empty( $ampforwp_sd_img_placeholder ) ) { $structured_data_image_url = ampforwp_get_setting('amp-structured-data-placeholder-image','url'); } $structured_data_image = $structured_data_image_url; $structured_data_height = intval(ampforwp_get_setting('amp-structured-data-placeholder-image-height')); $structured_data_width = intval(ampforwp_get_setting('amp-structured-data-placeholder-image-width')); $metadata['image'] = array( '@type' => 'ImageObject', 'url' => $structured_data_image , 'height' => $structured_data_height, 'width' => $structured_data_width, ); } // Custom Structured Data information for Archive, Categories and tag pages. if ( is_archive() ) { $structured_data_image = ampforwp_get_setting('amp-structured-data-placeholder-image','url'); $structured_data_height = intval(ampforwp_get_setting('amp-structured-data-placeholder-image-height')); $structured_data_width = intval(ampforwp_get_setting('amp-structured-data-placeholder-image-width')); $structured_data_archive_title = esc_html(get_the_archive_title()); $structured_data_author = get_userdata( 1 ); if ( $structured_data_author ) { $structured_data_author = $structured_data_author->display_name ; } else { $structured_data_author = "admin"; } $metadata['image'] = array( '@type' => 'ImageObject', 'url' => $structured_data_image , 'height' => $structured_data_height, 'width' => $structured_data_width, ); $metadata['author'] = array( '@type' => 'Person', 'name' => $structured_data_author , ); $metadata['headline'] = $structured_data_archive_title; } if ( ! function_exists('amp_activate') ) { // Get Image metadata from the Custom Field if(ampforwp_is_custom_field_featured_image() && ampforwp_cf_featured_image_src()){ $metadata['image'] = array( '@type' => 'ImageObject', 'url' => ampforwp_cf_featured_image_src('url') , 'width' => ampforwp_cf_featured_image_src('width'), 'height' => ampforwp_cf_featured_image_src('height'), ); } // Get image metadata from The Content if( isset($redux_builder_amp['ampforwp-featured-image-from-content']) && $redux_builder_amp['ampforwp-featured-image-from-content'] && ampforwp_get_featured_image_from_content() ){ $metadata['image'] = array( '@type' => 'ImageObject', 'url' => ampforwp_get_featured_image_from_content('url') , 'width' => ampforwp_get_featured_image_from_content('width'), 'height' => ampforwp_get_featured_image_from_content('height'), ); } } if( in_array( "image" , $metadata ) ) { if ( $metadata['image']['width'] < 696 ) { $metadata['image']['width'] = 700 ; } } return $metadata; } // 45. searchpage, frontpage, homepage structured data add_filter( 'amp_post_template_metadata', 'ampforwp_search_or_homepage_or_staticpage_metadata', 10, 2 ); function ampforwp_search_or_homepage_or_staticpage_metadata( $metadata, $post ) { global $redux_builder_amp,$wp; $desc = ''; if( is_search() || is_home() || ( is_home() && $redux_builder_amp['amp-frontpage-select-option'] ) ) { if( is_home() || is_front_page() ){ global $wp; $current_url = home_url( $wp->request ); //$current_url = dirname( $current_url ); $headline = get_bloginfo('name') . ' | ' . get_option( 'blogdescription' ); } else { $current_url = trailingslashit(get_home_url())."?s=".get_search_query(); $current_url = untrailingslashit( $current_url ); $headline = ampforwp_translation($redux_builder_amp['amp-translator-search-text'], 'You searched for:') . ' ' . get_search_query(); } // creating this to prevent errors $structured_data_image_url = ''; $page = ''; $ampforwp_sd_img_placeholder = ampforwp_get_setting('amp-structured-data-placeholder-image','url'); // placeholder Image area if (! empty( $ampforwp_sd_img_placeholder ) ) { $structured_data_image_url = ampforwp_get_setting('amp-structured-data-placeholder-image','url'); } $structured_data_image = $structured_data_image_url; // Placeholder Image URL $structured_data_height = intval(ampforwp_get_setting('amp-structured-data-placeholder-image-height')); // Placeholder Image width $structured_data_width = intval(ampforwp_get_setting('amp-structured-data-placeholder-image-width')); // Placeholder Image height $current_url_in_pieces = explode( '/', $current_url ); if( ampforwp_is_front_page() ) { // ID of slected front page $ID = ampforwp_get_frontpage_id(); $headline = get_the_title( $ID ) . ' | ' . get_option('blogname'); $static_page_data = get_post( $ID ); $datePublished = isset($static_page_data->post_date) ? $static_page_data->post_date : ''; $dateModified = isset($static_page_data->post_modified) ? $static_page_data->post_modified : ''; $featured_image_array = wp_get_attachment_image_src( get_post_thumbnail_id($ID), 'full' ); // Featured Image structured Data if( $featured_image_array ) { $structured_data_image = $featured_image_array[0]; $structured_data_width = $featured_image_array[1]; $structured_data_height = $featured_image_array[2]; } // Frontpage Author $structured_data_author = ''; $structured_data_author = get_userdata($static_page_data->post_author ); if ( $structured_data_author ) { $structured_data_author = $structured_data_author->display_name ; } else { $structured_data_author = "admin"; } $metadata['author']['name'] = $structured_data_author; } else{ if( ampforwp_get_blog_details() == true ) { $headline = ampforwp_get_blog_details('title') . ' | ' . get_option('blogname'); $page_for_posts = get_option( 'page_for_posts' ); $blog_data = get_post($page_for_posts); if ( $post ) { $datePublished = $blog_data->post_date; $dateModified = $blog_data->post_modified; } } else { // To DO : check the entire else section .... time for search and homepage...wierd ??? $datePublished = gmdate( 'Y-m-d H:i:s', current_time( 'timestamp', 0 ) - 2 ); // time difference is 2 minute between published and modified date $dateModified = gmdate( 'Y-m-d H:i:s', current_time( 'timestamp', 0 ) ); } } $metadata['image'] = array( '@type' => 'ImageObject', 'url' => $structured_data_image , 'height' => $structured_data_height, 'width' => $structured_data_width, ); $metadata['datePublished'] = $datePublished; // proper published date added $metadata['dateModified'] = $dateModified; // proper modified date $remove = '/'. AMPFORWP_AMP_QUERY_VAR; $current_url = str_replace($remove, '', $current_url); $query_arg_array = $wp->query_vars; if( array_key_exists( "page" , $query_arg_array ) ) { $page = $wp->query_vars['page']; } if ( $page >= '2') { $current_url = trailingslashit( $current_url . '?page=' . $page); } $metadata['mainEntityOfPage'] = trailingslashit($current_url); // proper URL added $metadata['headline'] = $headline; // proper headline added } // Description for Structured Data $desc = esc_attr( convert_chars( stripslashes( ampforwp_generate_meta_desc('json'))) ); $metadata['description'] = $desc; return $metadata; } // Structured Data Type add_filter( 'amp_post_template_metadata', 'ampforwp_structured_data_type', 20, 1 ); function ampforwp_structured_data_type( $metadata ) { if ( !is_array($metadata) ) { return $metadata; } global $redux_builder_amp, $post; $post_types = ''; $set_sd_post = ''; $set_sd_page = ''; $set_sd_post = ampforwp_get_setting('ampforwp-sd-type-posts'); $set_sd_page = ampforwp_get_setting('ampforwp-sd-type-pages'); $post_types = ampforwp_get_all_post_types(); if((function_exists('activate_wp_recipe_maker') || function_exists('activate_wp_recipe_maker_premium')) && (isset($set_sd_post) && $set_sd_post == 'Recipe')){ return; } if ( $post_types ) { // If there are any custom public post types. foreach ( $post_types as $post_type ) { if ( isset( $post->post_type ) && ('page' == $post->post_type || 'post' == $post->post_type) ) { continue; } if ( isset( $post->post_type ) && $post->post_type == $post_type ) { if(ampforwp_get_setting('ampforwp-sd-type-'.esc_attr($post_type))==''){ return; } if ( ampforwp_get_setting('ampforwp-sd-type-'.esc_attr($post_type))=='' && ampforwp_get_setting('ampforwp-seo-yoast-description') == 0 ) { return; } if(isset($metadata['@type']) && $metadata['@type']){ $metadata['@type'] = ampforwp_get_setting('ampforwp-sd-type-'.esc_attr($post_type)); } return $metadata; } } } if( isset( $post->post_type ) && $post->post_type == "post" && empty( $set_sd_post )){ return; }elseif(isset( $post->post_type ) && $post->post_type == "page" && empty( $set_sd_page )) { return; } if( empty($set_sd_post) && is_single() && ampforwp_get_setting('ampforwp-seo-yoast-description') == 0) { return; } if ( empty( $set_sd_page ) && is_singular( $post_type = 'page' ) && $redux_builder_amp['ampforwp-seo-yoast-description'] == 0 ) { return; } if ( isset( $post->post_type ) && 'post' == $post->post_type ) { if(isset($metadata['@type']) && $metadata['@type']){ $metadata['@type'] = $set_sd_post; } } if ( (isset( $post->post_type ) && 'page' == $post->post_type) || ampforwp_is_front_page() || ampforwp_is_blog()) { if ( empty( $set_sd_page )){ return; } if(isset($metadata['@type']) && $metadata['@type']){ $metadata['@type'] = $set_sd_page; } } if(is_archive()){ if(isset($metadata['@type']) && $metadata['@type']){ $metadata['@type'] = 'CollectionPage'; } } if(isset($metadata['@type']) && $metadata['@type'] == 'NewsArticle'){ $content = $post->post_content; $metadata['articleBody'] = esc_html($content); } return $metadata; } // VideoObject add_filter( 'amp_post_template_metadata', 'ampforwp_structured_data_video_thumb', 20, 1 ); if ( ! function_exists('ampforwp_structured_data_video_thumb') ) { function ampforwp_structured_data_video_thumb( $metadata ) { if ( !is_array($metadata) ) { return $metadata; } global $redux_builder_amp, $post; // VideoObject if ( isset($metadata['@type']) && 'VideoObject' == $metadata['@type'] ) { $post_image_id = ''; $post_image_id = get_post_thumbnail_id( get_the_ID() ); $post_image = wp_get_attachment_image_src( $post_image_id, 'full' ); $structured_data_video_thumb_url = ''; $ampforwp_sd_video_thumb = ampforwp_get_setting('amporwp-structured-data-video-thumb-url','url') ; // If there's no featured image, take default from settings if ( false == $post_image ) { if ( ! empty( $sd_video_thumb ) ) { $structured_data_video_thumb_url = ampforwp_get_setting('amporwp-structured-data-video-thumb-url','url'); } } // If featured image is present, take it as thumbnail else { $structured_data_video_thumb_url = $post_image[0]; } $metadata['name'] = $metadata['headline']; $metadata['uploadDate'] = $metadata['datePublished']; $metadata['thumbnailUrl'] = $structured_data_video_thumb_url; $desc = isset($post->post_content) ? $post->post_content : ''; if(ampforwp_is_home()){ $desc = get_bloginfo('description'); } if($desc){ $desc = addslashes( wp_trim_words( wp_strip_all_tags( $desc ) , 30 ) ); $metadata['description'] = $desc; } } // Recipe if ( isset($metadata['@type']) && 'Recipe' == $metadata['@type'] ) { $metadata['name'] = $metadata['headline']; } return $metadata; } } // #1975 Product add_filter( 'amp_post_template_metadata', 'ampforwp_structured_data_product', 20, 1 ); if ( ! function_exists('ampforwp_structured_data_product') ) { function ampforwp_structured_data_product( $metadata ) { global $redux_builder_amp, $post; // Adding Product's Name and unsetting the Google unrecognized data for type Product if ( isset($metadata['@type']) && 'Product' == $metadata['@type'] ) { $metadata['name'] = $metadata['headline']; unset($metadata['dateModified']); unset($metadata['datePublished']); unset($metadata['publisher']); unset($metadata['author']); unset($metadata['headline']); } return $metadata; } } // Multiple Images #2259 add_filter( 'amp_post_template_metadata', 'ampforwp_sd_multiple_images', 20, 1 ); if ( ! function_exists('ampforwp_sd_multiple_images') ) { function ampforwp_sd_multiple_images($metadata){ if ( ampforwp_get_setting('ampforwp-sd-multiple-images') ) { if ( isset($metadata['image']['width']) && 1200 <= $metadata['image']['width'] ){ // 16x9 $image1_width = 1280; $image1_height = 720; $image1 = ampforwp_aq_resize( $metadata['image']['url'], $image1_width, $image1_height, true, false, true ); $image1_url = $image1[0]; // 4x3 $image2_width = 640; $image2_height = 480; $image2 = ampforwp_aq_resize( $metadata['image']['url'], $image2_width, $image2_height, true, false, true ); $image2_url = $image2[0]; // 1x1 $image3_width = 300; $image3_height = 300; $image3 = ampforwp_aq_resize( $metadata['image']['url'], $image3_width, $image3_height, true, false, true ); $image3_url = $image3[0]; $metadata['image'] = array($image1_url, $image2_url, $image3_url); } } return $metadata; } } // schema.org/SiteNavigationElement missing from menus #1229 & #2952 add_action('amp_post_template_footer','ampforwp_sd_sitenavigation'); function ampforwp_sd_sitenavigation(){ if (!ampforwp_get_setting('ampforwp-sd-switch')) { return; } if (class_exists('Bunyad_Theme_SmartMag')) { if (!is_single() || !Bunyad::posts()->meta('reviews')) { return; } $schema_type = Bunyad::posts()->meta('review_schema') ? Bunyad::posts()->meta('review_schema') : 'Product'; $item_author = Bunyad::posts()->meta('review_item_author') ? Bunyad::posts()->meta('review_item_author') : get_the_author(); $item_name = Bunyad::posts()->meta('review_item_name') ? Bunyad::posts()->meta('review_item_name') : get_the_title(); $item_author_type = Bunyad::posts()->meta('review_item_author_type'); $image_url = ampforwp_get_post_thumbnail('url','full'); $image_width = ampforwp_get_post_thumbnail('width'); $image_height = ampforwp_get_post_thumbnail('height'); $post_image_meta = false; if (!empty($image_url)) { $post_image_meta = array( '@type' => 'ImageObject', 'url' => $image_url, 'width' => $image_width, 'height' => $image_height, ); } $publisher = array( '@type' => 'Organization', 'name' => get_bloginfo('name'), 'sameAs' => get_bloginfo('url') ); $description = ( Bunyad::posts()->meta('review_verdict_text') ? Bunyad::posts()->meta('review_verdict_text') : wp_strip_all_tags(Bunyad::posts()->excerpt(null, 180, ['add_more' => false])) ); $author_data = [ '@type' => $item_author_type ? ucfirst($item_author_type) : 'Person', 'name' => $item_author ]; $have_author = [ 'CreativeWorkSeason', 'CreativeWorkSeries', 'Game', 'MediaObject', 'MusicPlaylist', 'MusicRecording' ]; // Final schema. $schema = array( '@context' => 'http://schema.org', '@type' => 'Review', 'itemReviewed' => array( '@type' => $schema_type, 'name' => $item_name, 'image' => $post_image_meta, ), 'author' => array( '@type' => 'Person', 'name' => get_the_author(), ), 'publisher' => $publisher, 'reviewRating' => array( '@type' => 'Rating', 'ratingValue' => Bunyad::posts()->meta('review_overall'), 'bestRating' => Bunyad::options()->review_scale, ), 'description' => substr($description, 0, 200), 'datePublished' => get_the_date(DATE_W3C), ); if ($link = Bunyad::posts()->meta('review_item_link')) { $schema['itemReviewed']['sameAs'] = esc_url($link); } $schema_id = esc_url(get_permalink()) . '#review'; $schema['@id'] = $schema_id; $schema['itemReviewed']['review'] = ['@id' => $schema_id]; if (in_array($schema_type, $have_author)) { $schema['itemReviewed']['author'] = $author_data; } if ($schema_type == 'Product' ) { if (Bunyad::posts()->meta('review_item_author')) { $author_data['@type'] = 'Brand'; $schema['itemReviewed']['brand'] = $author_data; } $schema['itemReviewed']['description'] = $description; }else{ return; } echo '"; } if ( ! class_exists('saswp_fields_generator') && ampforwp_get_setting('ampforwp-sd-navigation-schema')) { $input = array(); $navObj = array(); $ampforwp_sd_menu = get_transient('ampforwp_sd_menu'); if ( true == get_transient('ampforwp_header_sd_menu') && true == get_transient('ampforwp_footer_sd_menu') && false != $ampforwp_sd_menu) { $navObj[] = $ampforwp_sd_menu; } $menuLocations = get_nav_menu_locations(); if(!empty($menuLocations) ){ if ( empty($navObj) ) { foreach($menuLocations as $type => $id){ if( $type == 'amp-menu' || $type == 'amp-footer-menu' ){ $menuItems = wp_get_nav_menu_items($id); if($menuItems){ foreach($menuItems as $items){ $navObj[] = array( "@context" => "https://schema.org", "@type" => "SiteNavigationElement", "@id" => trailingslashit(get_home_url()).$type, "name" => $items->title, "url" => $items->url ); } } } if ( 'amp-menu' == $type ) { set_transient('ampforwp_header_sd_menu', true , 15*DAY_IN_SECONDS ); } if ( 'amp-footer-menu' == $type ) { set_transient('ampforwp_footer_sd_menu', true , 15*DAY_IN_SECONDS ); } set_transient('ampforwp_sd_menu', $navObj , 15*DAY_IN_SECONDS ); } } if($navObj){ $input['@context'] = 'https://schema.org'; $input['@graph'] = $navObj; ?>