152 lines
5.8 KiB
PHP
152 lines
5.8 KiB
PHP
<?php
|
|
/**
|
|
* Schemas Template.
|
|
*
|
|
* @package Schema Pro
|
|
* @since 1.0.0
|
|
*/
|
|
|
|
if ( ! class_exists( 'BSF_AIOSRS_Pro_Schema_Product' ) ) {
|
|
|
|
/**
|
|
* AIOSRS Schemas Initialization
|
|
*
|
|
* @since 1.0.0
|
|
*/
|
|
class BSF_AIOSRS_Pro_Schema_Product {
|
|
|
|
/**
|
|
* Render Schema.
|
|
*
|
|
* @param array $data Meta Data.
|
|
* @param array $post Current Post Array.
|
|
* @return array
|
|
*/
|
|
public static function render( $data, $post ) {
|
|
$schema = array();
|
|
$schema['@context'] = 'https://schema.org';
|
|
$schema['@type'] = 'Product';
|
|
if ( isset( $data['name'] ) && ! empty( $data['name'] ) ) {
|
|
$schema['name'] = wp_strip_all_tags( $data['name'] );
|
|
}
|
|
|
|
if ( isset( $data['image'] ) && ! empty( $data['image'] ) ) {
|
|
$schema['image'] = BSF_AIOSRS_Pro_Schema_Template::get_image_schema( $data['image'] );
|
|
}
|
|
|
|
if ( isset( $data['description'] ) && ! empty( $data['description'] ) ) {
|
|
$schema['description'] = wp_strip_all_tags( $data['description'] );
|
|
}
|
|
|
|
if ( isset( $data['sku'] ) && ! empty( $data['sku'] ) ) {
|
|
$schema['sku'] = wp_strip_all_tags( $data['sku'] );
|
|
}
|
|
if ( isset( $data['mpn'] ) && ! empty( $data['mpn'] ) ) {
|
|
$schema['mpn'] = wp_strip_all_tags( $data['mpn'] );
|
|
}
|
|
if ( isset( $data['brand-name'] ) && ! empty( $data['brand-name'] ) ) {
|
|
$schema['brand']['@type'] = 'Brand';
|
|
$schema['brand']['name'] = wp_strip_all_tags( $data['brand-name'] );
|
|
}
|
|
|
|
if ( ( isset( $data['rating'] ) && ! empty( $data['rating'] ) ) ||
|
|
( isset( $data['review-count'] ) && ! empty( $data['review-count'] ) ) ) {
|
|
|
|
$schema['aggregateRating']['@type'] = 'AggregateRating';
|
|
|
|
if ( isset( $data['rating'] ) && ! empty( $data['rating'] ) ) {
|
|
$schema['aggregateRating']['ratingValue'] = wp_strip_all_tags( $data['rating'] );
|
|
}
|
|
if ( isset( $data['review-count'] ) && ! empty( $data['review-count'] ) ) {
|
|
$schema['aggregateRating']['reviewCount'] = wp_strip_all_tags( $data['review-count'] );
|
|
}
|
|
}
|
|
if ( apply_filters( 'wp_schema_pro_remove_product_offers', true ) ) {
|
|
$schema['offers']['@type'] = 'Offer';
|
|
$schema['offers']['price'] = '0';
|
|
if ( isset( $data['price'] ) && ! empty( $data['price'] ) ) {
|
|
$schema['offers']['price'] = wp_strip_all_tags( $data['price'] );
|
|
}
|
|
if ( isset( $data['price-valid-until'] ) && ! empty( $data['price-valid-until'] ) ) {
|
|
$schema['offers']['priceValidUntil'] = wp_strip_all_tags( $data['price-valid-until'] );
|
|
}
|
|
|
|
if ( isset( $data['url'] ) && ! empty( $data['url'] ) ) {
|
|
$schema['offers']['url'] = esc_url( $data['url'] );
|
|
}
|
|
|
|
if ( ( isset( $data['currency'] ) && ! empty( $data['currency'] ) ) ||
|
|
( isset( $data['avail'] ) && ! empty( $data['avail'] ) ) ) {
|
|
|
|
if ( isset( $data['currency'] ) && ! empty( $data['currency'] ) ) {
|
|
$schema['offers']['priceCurrency'] = wp_strip_all_tags( $data['currency'] );
|
|
}
|
|
if ( isset( $data['avail'] ) && ! empty( $data['avail'] ) ) {
|
|
$schema['offers']['availability'] = wp_strip_all_tags( $data['avail'] );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( apply_filters( 'wp_schema_pro_remove_product_reviews', true ) && isset( $data['product-review'] ) && ! empty( $data['product-review'] ) ) {
|
|
foreach ( $data['product-review'] as $key => $value ) {
|
|
if ( ( isset( $value['reviewer-name'] ) && ! empty( $value['reviewer-name'] ) ) && ( isset( $value['product-rating'] ) && ! empty( $value['product-rating'] ) ) ) {
|
|
$schema['review'][ $key ]['@type'] = 'Review';
|
|
if ( isset( $value['reviewer-name'] ) && ! empty( $value['reviewer-name'] ) ) {
|
|
$schema['review'][ $key ]['author']['name'] = wp_strip_all_tags( $value['reviewer-name'] );
|
|
if ( isset( $value['reviewer-type'] ) && ! empty( $value['reviewer-type'] ) ) {
|
|
$schema['review'][ $key ]['author']['@type'] = wp_strip_all_tags( $value['reviewer-type'] );
|
|
} else {
|
|
$schema['review'][ $key ]['author']['@type'] = 'Person';
|
|
}
|
|
}
|
|
|
|
if ( isset( $value['product-rating'] ) && ! empty( $value['product-rating'] ) ) {
|
|
$schema['review'][ $key ]['reviewRating']['@type'] = 'Rating';
|
|
$schema['review'][ $key ]['reviewRating']['ratingValue'] = wp_strip_all_tags( $value['product-rating'] );
|
|
}
|
|
|
|
if ( isset( $value['review-body'] ) && ! empty( $value['review-body'] ) ) {
|
|
$schema['review'][ $key ]['reviewBody'] = wp_strip_all_tags( $value['review-body'] );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Fetch woocommerce review.
|
|
if ( defined( 'WC_VERSION' ) && apply_filters( 'wp_schema_pro_add_woocommerce_review', false ) ) {
|
|
$comments = get_comments(
|
|
array(
|
|
'number' => 5,
|
|
'post_id' => $post['ID'],
|
|
'status' => 'approve',
|
|
'post_status' => 'publish',
|
|
'post_type' => 'product',
|
|
'parent' => 0,
|
|
'meta_query' => array( // phpcs:ignore WordPress.DB.SlowDBQuery.slow_db_query_meta_query
|
|
array(
|
|
'key' => 'rating',
|
|
'type' => 'NUMERIC',
|
|
'compare' => '>',
|
|
'value' => 0,
|
|
),
|
|
),
|
|
)
|
|
);
|
|
|
|
if ( $comments ) {
|
|
foreach ( $comments as $key => $comment ) {
|
|
$schema['review'][ $key ]['@type'] = 'Review';
|
|
$schema['review'][ $key ]['reviewRating']['@type'] = 'Rating';
|
|
$schema['review'][ $key ]['reviewRating']['ratingValue'] = get_comment_meta( $comment->comment_ID, 'rating', true );
|
|
$schema['review'][ $key ]['author']['@type'] = 'Person';
|
|
$schema['review'][ $key ]['author']['name'] = get_comment_author( $comment );
|
|
$schema['review'][ $key ]['reviewBody'] = get_comment_text( $comment );
|
|
}
|
|
}
|
|
}
|
|
|
|
return apply_filters( 'wp_schema_pro_schema_product', $schema, $data, $post );
|
|
}
|
|
}
|
|
}
|