BIHomeWP/wp-content/plugins/wordpress-seo/frontend/schema/class-schema-faq-questions.php
2020-02-13 10:39:37 +07:00

94 lines
2.3 KiB
PHP

<?php
/**
* WPSEO plugin file.
*
* @package WPSEO\Frontend\Schema
*/
/**
* Returns a question object for each question in an FAQ block.
*
* @since 11.1
*
* @property array $data The Schema array.
* @property WP_Block_Parser_Block $block The block we're taking the questions out of.
* @property WPSEO_Schema_Context $context A value object with context variables.
* @property int $position The position in the list.
*/
class WPSEO_Schema_FAQ_Questions {
/**
* The Schema array.
*
* @var array
*/
private $data;
/**
* All the blocks of this block-type.
*
* @var WP_Block_Parser_Block
*/
private $block;
/**
* Position in the list.
*
* @var int
*/
private $position;
/**
* WPSEO_Schema_FAQ_Questions constructor.
*
* @param array $data Our schema graph.
* @param WP_Block_Parser_Block $block The FAQ block of this type.
* @param WPSEO_Schema_Context $context A value object with context variables.
*/
public function __construct( $data, $block, $context ) {
$this->data = $data;
$this->block = $block;
$this->context = $context;
$this->position = 0;
}
/**
* Find an image based on its URL and generate a Schema object for it.
*
* @return array The Schema with Questions added.
*/
public function generate() {
foreach ( $this->block['attrs']['questions'] as $question ) {
if ( ! isset( $question['jsonAnswer'] ) || empty( $question['jsonAnswer'] ) ) {
continue;
}
$this->data[] = $this->generate_question_block( $question );
}
return $this->data;
}
/**
* Generate a Question piece.
*
* @param array $question The question to generate schema for.
*
* @return array Schema.org Question piece.
*/
protected function generate_question_block( $question ) {
$url = $this->context->canonical . '#' . esc_attr( $question['id'] );
return [
'@type' => 'Question',
'@id' => $url,
'position' => $this->position ++,
'url' => $url,
'name' => wp_strip_all_tags( $question['jsonQuestion'] ),
'answerCount' => 1,
'acceptedAnswer' => [
'@type' => 'Answer',
'text' => strip_tags( $question['jsonAnswer'], '<h1><h2><h3><h4><h5><h6><br><ol><ul><li><a><p><b><strong><i><em>' ),
],
];
}
}