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.
77 lines
1.5 KiB
PHP
77 lines
1.5 KiB
PHP
<?php
|
|
/**
|
|
* Helper class for handling WooComerce product attributes for rich snippets.
|
|
*
|
|
* @since 0.9.0
|
|
* @package RankMath
|
|
* @subpackage RankMath\Schema
|
|
* @author Rank Math <support@rankmath.com>
|
|
*/
|
|
|
|
namespace RankMath\Schema;
|
|
|
|
defined( 'ABSPATH' ) || exit;
|
|
|
|
/**
|
|
* WC_Attributes class.
|
|
*/
|
|
class WC_Attributes {
|
|
|
|
/**
|
|
* Hold product attributes.
|
|
*
|
|
* @var array
|
|
*/
|
|
private $_attributes;
|
|
|
|
/**
|
|
* Hold product object.
|
|
*
|
|
* @var WC_Product
|
|
*/
|
|
private $_product;
|
|
|
|
/**
|
|
* The Constructor.
|
|
*
|
|
* @param WC_Product $product The Product.
|
|
*/
|
|
public function __construct( $product ) {
|
|
$this->_product = $product;
|
|
$this->_attributes = $product->get_attributes();
|
|
}
|
|
|
|
/**
|
|
* Find attribute for property.
|
|
*
|
|
* @param array $entity Entity to attach data to.
|
|
* @param string $needle Assign this property.
|
|
*/
|
|
public function assign_property( &$entity, $needle ) {
|
|
foreach ( $this->_attributes as $key => $attrib ) {
|
|
if ( stristr( $key, $needle ) ) {
|
|
$entity[ $needle ] = $this->_product->get_attribute( $key );
|
|
unset( $this->_attributes[ $key ] );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Map remaining attributes as PropertyValue.
|
|
*
|
|
* @param array $entity Entity to attach data to.
|
|
*/
|
|
public function assign_remaining( &$entity ) {
|
|
foreach ( $this->_attributes as $key => $attrib ) {
|
|
if ( $attrib['is_visible'] && ! $attrib['is_variation'] ) {
|
|
$entity['additionalProperty'][] = [
|
|
'@type' => 'PropertyValue',
|
|
'name' => $key,
|
|
'value' => $this->_product->get_attribute( $key ),
|
|
];
|
|
}
|
|
}
|
|
}
|
|
}
|