XylotrechusZ
<?php
if( ! defined( 'ABSPATH' ) ) { exit; } // Exit if accessed directly
/*
*
*
* $args: context (string), echo (boolean) and post_type (string)
*/
if( ! function_exists( 'avia_markup_helper') )
{
/**
* Returns the schema.org markup based on the context value.
*
* @since ????
* @param array $args
* @return string
*/
function avia_markup_helper( $args = array() )
{
$args = array_merge( array(
'context' => '',
'echo' => true,
'post_type' => '',
'id' => '',
'custom_markup' => '',
'force' => false
), (array) $args );
/**
* @since ????
* @param array $args
* @return array
*/
$args = apply_filters( 'avf_markup_helper_args', $args );
// dont show markup if its deactivated. markup can still be enforced with args['force'] = true;
if( 'inactive' == avia_get_option( 'markup' ) && $args['force'] === false )
{
return;
}
if( empty( $args['context'] ) )
{
return;
}
// markup string - stores markup output
$markup = ' ';
$attributes = array();
//try to fetch the right markup
switch( $args['context'] )
{
case 'body':
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/WebPage';
break;
case 'header':
$attributes['role'] = 'banner';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/WPHeader';
break;
case 'title':
$attributes['itemprop'] = 'headline';
break;
case 'avia_title':
$attributes['itemprop'] = 'headline';
break;
case 'description':
$attributes['itemprop'] = 'description';
break;
case 'nav':
$attributes['role'] = 'navigation';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/SiteNavigationElement';
break;
case 'faq_section':
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/FAQPage';
break;
case 'faq_question_container':
$attributes['itemscope'] = 'itemscope';
$attributes['itemprop'] = 'mainEntity';
$attributes['itemtype'] = 'https://schema.org/Question';
break;
case 'faq_question_title':
$attributes['itemprop'] = 'name';
break;
case 'faq_question_answer':
$attributes['itemscope'] = 'itemscope';
$attributes['itemprop'] = 'acceptedAnswer';
$attributes['itemtype'] = 'https://schema.org/Answer';
break;
case 'content':
$attributes['role'] = 'main';
$attributes['itemprop'] = 'mainContentOfPage';
if( is_singular( 'post' ) )
{
unset( $attributes['itemprop'] );
}
//* Blog microdata
if( is_singular('post') || is_archive() || is_home() )
{
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Blog';
}
if( is_archive() && $args['post_type'] == 'products' )
{
$attributes['itemtype'] = 'https://schema.org/SomeProducts';
}
//* Search results pages
if( is_search() )
{
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/SearchResultsPage';
}
break;
case 'entry':
global $post;
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/CreativeWork';
//* Blog posts microdata
if( is_object( $post ) && 'post' === $post->post_type )
{
$attributes['itemtype'] = 'https://schema.org/BlogPosting';
//* If main query,
if ( is_main_query() )
{
$attributes['itemprop'] = 'blogPost';
}
}
break;
case 'phone':
$attributes['itemprop'] = 'telephone';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/LocalBusiness';
break;
case 'image':
$attributes['itemprop'] = 'image';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/ImageObject';
break;
case 'image_url':
$attributes['itemprop'] = 'thumbnailUrl';
break;
case 'name':
$attributes['itemprop'] = 'name';
break;
case 'email':
$attributes['itemprop'] = 'email';
break;
case 'job':
$attributes['itemprop'] = 'jobTitle';
break;
case 'url':
$attributes['itemprop'] = 'url';
break;
case 'affiliation':
$attributes['itemprop'] = 'affiliation';
break;
case 'author':
$attributes['itemprop'] = 'author';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Person';
break;
case 'person':
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Person';
break;
case 'single_image':
$attributes['itemprop'] = 'image';
break;
case 'author_link':
$attributes['itemprop'] = 'url';
break;
case 'author_name':
$attributes['itemprop'] = 'author';
break;
case 'entry_time':
$attributes['itemprop'] = 'datePublished';
$attributes['datetime'] = get_the_time('c', $args['id']);
break;
case 'entry_title':
$attributes['itemprop'] = 'headline';
break;
case 'entry_content':
$attributes['itemprop'] = 'text';
break;
case 'comment':
$attributes['itemprop'] = 'comment';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/UserComments';
break;
case 'comment_author':
$attributes['itemprop'] = 'creator';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Person';
break;
case 'comment_author_link':
$attributes['itemprop'] = 'creator';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Person';
$attributes['rel'] = 'external nofollow';
break;
case 'comment_time':
$attributes['itemprop'] = 'commentTime';
$attributes['itemscope'] = 'itemscope';
$attributes['datetime'] = get_the_time('c');
break;
case 'comment_text':
$attributes['itemprop'] = 'commentText';
break;
case 'author_box':
$attributes['itemprop'] = 'author';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Person';
break;
case 'table':
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Table';
break;
case 'video':
$attributes['itemprop'] = 'video';
$attributes['itemtype'] = 'https://schema.org/VideoObject';
break;
case 'audio':
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/AudioObject';
break;
case 'blog':
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/Blog';
break;
case 'sidebar':
$attributes['role'] = 'complementary';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/WPSideBar';
break;
case 'footer':
$attributes['role'] = 'contentinfo';
$attributes['itemscope'] = 'itemscope';
$attributes['itemtype'] = 'https://schema.org/WPFooter';
break;
case 'blog_publisher':
$attributes['itemprop'] = 'publisher';
$attributes['itemtype'] = 'https://schema.org/Organization';
$attributes['itemscope'] = 'itemscope';
break;
case 'blog_date_modified':
$attributes['itemprop'] = 'dateModified';
$attributes['itemtype'] = 'https://schema.org/dateModified';
break;
case 'blog_mainEntityOfPage':
$attributes['itemprop'] = 'mainEntityOfPage';
$attributes['itemtype'] = 'https://schema.org/mainEntityOfPage';
break;
}
$attributes = apply_filters( 'avf_markup_helper_attributes', $attributes, $args );
//we failed to fetch the attributes - let's stop
if( empty( $attributes ) )
{
return;
}
foreach( $attributes as $key => $value )
{
$markup .= $key . '="' . $value . '" ';
}
$markup = apply_filters( 'avf_markup_helper_output', $markup, $args );
if( $args['echo'] )
{
echo $markup;
}
else
{
return $markup;
}
}
}
if( ! function_exists( 'av_blog_entry_markup_helper' ) )
{
/**
* @since ????
* @param int $id
* @param array $exclude
* @return string
*/
function av_blog_entry_markup_helper( $id , $exclude = array() )
{
if( 'inactive' == avia_get_option( 'markup' ) )
{
return '';
}
/**
* Modify which structured data you want to exclude from output
*
* @since 4.9.2.2
* @param array $exclude
* @param int $id
* @return array
*/
$exclude = apply_filters( 'avf_blog_entry_markup_helper_exclude', $exclude, $id );
$logo = $logo_url = $logo_h = $logo_w = $url_string = '';
$url_h = $url_w = 0;
$post = get_post( $id );
if( $logo = avia_get_option( 'logo' ) )
{
$logo = apply_filters( 'avf_logo', $logo );
if( is_numeric( $logo ) )
{
$logo = wp_get_attachment_image_src( $logo, 'full' );
if( is_array( $logo ) )
{
$logo_url = $logo[0];
}
}
else
{
$logo_url = $logo;
}
}
$thumb_id = get_post_thumbnail_id( $id );
if( $thumb_id )
{
$url = wp_get_attachment_image_src( $thumb_id, 'full' );
if( is_array( $url ) )
{
$url_string = $url[0];
$url_w = $url[1];
$url_h = $url[2];
}
}
else
{
if( is_array( $logo ) )
{
$url_string = $logo[0];
$url_w = $logo[1];
$url_h = $logo[2];
}
else
{
$url_string = $logo;
$url_w = 0;
$url_h = 0;
}
}
$author_name = apply_filters( 'avf_author_name', get_the_author_meta( 'display_name', $post->post_author ), $post->post_author );
$publisher_markup = avia_markup_helper( array( 'context' => 'blog_publisher', 'echo' => false ) );
$author_markup = avia_markup_helper( array( 'context' => 'author', 'echo' => false ) );
$date_markup = avia_markup_helper( array( 'context' => 'blog_date_modified', 'echo' => false ) );
$entry_time_markup = avia_markup_helper( array( 'context' => 'entry_time', 'echo' => false));
$main_entity_markup = avia_markup_helper( array( 'context' => 'blog_mainEntityOfPage', 'echo' => false ) );
$image_markup = avia_markup_helper( array( 'context' => 'image', 'echo' => false ) );
$output = '';
if( ! in_array( 'image', $exclude ) )
{
$output .= "
<span class='av-structured-data' {$image_markup}>
<span itemprop='url'>{$url_string}</span>
<span itemprop='height'>{$url_h}</span>
<span itemprop='width'>{$url_w}</span>
</span>";
}
if( ! in_array( 'publisher', $exclude ) )
{
$output .= "
<span class='av-structured-data' {$publisher_markup}>
<span itemprop='name'>{$author_name}</span>
<span itemprop='logo' itemscope itemtype='https://schema.org/ImageObject'>
<span itemprop='url'>{$logo_url}</span>
</span>
</span>";
}
if( ! in_array( 'author', $exclude ) )
{
$output .= "<span class='av-structured-data' {$author_markup}><span itemprop='name'>{$author_name}</span></span>";
}
if( ! in_array( 'date', $exclude ) )
{
$output .= "<span class='av-structured-data' {$entry_time_markup}>{$post->post_date}</span>";
}
if( ! in_array( 'date_modified', $exclude ) )
{
$output .= "<span class='av-structured-data' {$date_markup}>{$post->post_modified}</span>";
}
if( ! in_array( 'mainEntityOfPage', $exclude ) )
{
$post_title = avia_wp_get_the_title( $post );
$output .= "<span class='av-structured-data' {$main_entity_markup}><span itemprop='name'>{$post_title}</span></span>";
}
if( ! empty( $output ) )
{
$output = "<span class='hidden'>{$output}</span>";
}
return $output;
}
}