diff --git a/includes/class-wc-structured-data.php b/includes/class-wc-structured-data.php
index 90f32547183..81db862debb 100644
--- a/includes/class-wc-structured-data.php
+++ b/includes/class-wc-structured-data.php
@@ -20,11 +20,6 @@ class WC_Structured_Data {
*/
private $_data;
- /**
- * @var null|array $_structured_data
- */
- private $_structured_data;
-
/**
* Constructor.
*/
@@ -45,7 +40,7 @@ class WC_Structured_Data {
* Sets `$this->_data`.
*
* @param array $data
- * @param bool $reset (default: false)
+ * @param bool $reset (default: false)
* @return bool
*/
public function set_data( $data, $reset = false ) {
@@ -72,101 +67,68 @@ class WC_Structured_Data {
}
/**
- * Sets `$this->_structured_data`.
+ * Returns structured data.
*
- * @return bool
- */
- public function set_structured_data() {
- if ( empty( $this->get_data() ) ) {
- return false;
- }
-
- foreach ( $this->get_data() as $value ) {
- $structured_data[ $value['@type'] ][] = $value;
- }
-
- foreach ( $structured_data as $type => $value ) {
- if ( count( $value ) > 1 ) {
- $structured_data[ $type ] = array( '@graph' => $value );
- } else {
- $structured_data[ $type ] = $value[0];
- }
-
- $structured_data[ $type ] = apply_filters( 'woocommerce_structured_data_context', array( '@context' => 'http://schema.org/' ), $structured_data, $type, $value ) + $structured_data[ $type ];
- }
-
- $this->_structured_data = $structured_data;
-
- return true;
- }
-
- /**
- * Gets `$this->_structured_data`.
- *
- * @return array $structured_data
- */
- public function get_structured_data() {
- $this->set_structured_data();
-
- return $structured_data = isset( $this->_structured_data ) ? $this->_structured_data : array();
- }
-
- /**
- * Sanitizes, encodes and echoes structured data.
- *
- * List of the types available by default for specific request:
+ * List of types available by default for specific request
* 'Product',
* 'Review',
* 'BreadcrumbList',
* 'WebSite',
* 'Order',
*
+ * @param bool|array $requested_types (default: false)
+ * @return array
+ */
+ public function get_structured_data( $requested_types = false ) {
+ if ( empty( $this->get_data() ) || ( $requested_types && ! is_array( $requested_types ) ) ) {
+ return array();
+ }
+
+ foreach ( $this->get_data() as $value ) {
+ $data[ $value['@type'] ][] = $value;
+ }
+
+ foreach ( $data as $type => $value ) {
+ $data[ $type ] = count( $value ) > 1 ? array( '@graph' => $value ) : $value[0];
+ $data[ $type ] = apply_filters( 'woocommerce_structured_data_context', array( '@context' => 'http://schema.org/' ), $data, $type, $value ) + $data[ $type ];
+ }
+
+ foreach ( $data as $type => $value ) {
+ if ( $requested_types ) {
+ foreach ( $requested_types as $requested_type ) {
+ if ( $requested_type === $type ) {
+ $structured_data[] = $value;
+ }
+ }
+ } else {
+ $structured_data[] = $value;
+ }
+ }
+
+ if ( ! isset( $structured_data ) ) {
+ return array();
+ }
+
+ $structured_data = count( $structured_data ) > 1 ? array( '@graph' => $structured_data ) : $structured_data[0];
+
+ return $structured_data;
+ }
+
+ /**
+ * Sanitizes, encodes and echoes structured data.
+ *
* @uses `woocommerce_email_order_details` action hook
* @param bool|array $requested_types (default: false)
* @return bool
*/
public function enqueue_data( $requested_types = false ) {
- if ( ! $structured_data = $this->get_structured_data() ) {
- return false;
- }
-
- if ( $requested_types ) {
- if ( ! is_array( $requested_types ) ) {
- return false;
- }
-
- foreach ( $structured_data as $type => $value ) {
- foreach ( $requested_types as $requested_type ) {
- if ( $requested_type === $type ) {
- $json[] = $value;
- }
- }
- }
-
- if ( ! isset( $json ) ) {
- return false;
- }
- } else {
- foreach ( $structured_data as $value ) {
- $json[] = $value;
- }
- }
-
- if ( count( $json ) > 1 ) {
- $json = array( '@graph' => $json );
- } else {
- $json = $json[0];
- }
-
- if ( $json = $this->sanitize_data( $json ) ) {
- // Testing/Debugging
- //echo json_encode( $json, JSON_UNESCAPED_SLASHES );
- echo '';
+ if ( $structured_data = $this->sanitize_data( $this->get_structured_data( $requested_types ) ) ) {
+ echo '';
return true;
- }
-
- return false;
+ } else {
+ return false;
+ }
}
/**
@@ -355,9 +317,9 @@ class WC_Structured_Data {
* Generates Email Order structured data.
*
* @uses `woocommerce_email_order_details` action hook
- * @param object $order
- * @param bool $sent_to_admin (default: false)
- * @param bool $plain_text (default: false)
+ * @param object $order
+ * @param bool $sent_to_admin (default: false)
+ * @param bool $plain_text (default: false)
* @return bool|void
*/
public function generate_email_order_data( $order, $sent_to_admin = false, $plain_text = false ) {