123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- <?php
- /**
- * WPSEO plugin file.
- *
- * @package WPSEO\Frontend\Schema
- */
- /**
- * Returns schema FAQ data.
- *
- * @since 11.3
- */
- class WPSEO_Schema_FAQ implements WPSEO_Graph_Piece {
- /**
- * Determine whether this graph piece is needed or not.
- *
- * @var bool
- */
- private $is_needed = false;
- /**
- * The FAQ blocks on the current page.
- *
- * @var array
- */
- private $blocks;
- /**
- * A value object with context variables.
- *
- * @var WPSEO_Schema_Context
- */
- private $context;
- /**
- * WPSEO_Schema_FAQ constructor.
- *
- * @param WPSEO_Schema_Context $context A value object with context variables.
- */
- public function __construct( WPSEO_Schema_Context $context ) {
- $this->context = $context;
- add_action( 'wpseo_pre_schema_block_type_yoast/faq-block', [ $this, 'prepare_schema' ], 10, 1 );
- add_filter( 'wpseo_schema_block_yoast/faq-block', [ $this, 'render_schema_questions' ], 10, 3 );
- }
- /**
- * If this fires, we know there's an FAQ block ont he page, so filter the page type.
- *
- * @param array $blocks The blocks of this type on the current page.
- */
- public function prepare_schema( $blocks ) {
- $this->blocks = $blocks;
- $this->is_needed = true;
- add_filter( 'wpseo_schema_webpage_type', [ $this, 'change_schema_page_type' ] );
- }
- /**
- * Change the page type to an array if it isn't one, include FAQPage.
- *
- * @param array|string $page_type The page type.
- *
- * @return array $page_type The page type that's now an array.
- */
- public function change_schema_page_type( $page_type ) {
- if ( ! is_array( $page_type ) ) {
- $page_type = [ $page_type ];
- }
- $page_type[] = 'FAQPage';
- return $page_type;
- }
- /**
- * Render a list of questions, referencing them by ID.
- *
- * @return array $data Our Schema graph.
- */
- public function generate() {
- $question_list = new WPSEO_Schema_FAQ_Question_List( $this->blocks, $this->context );
- $graph = $question_list->generate();
- return $graph;
- }
- /**
- * Add the Questions in our FAQ blocks as separate pieces to the graph.
- *
- * @param array $graph Schema data for the current page.
- * @param WP_Block_Parser_Block $block The block data array.
- * @param WPSEO_Schema_Context $context A value object with context variables.
- *
- * @return array $data Our Schema graph.
- */
- public function render_schema_questions( $graph, $block, $context ) {
- $questions = new WPSEO_Schema_FAQ_Questions( $graph, $block, $context );
- $graph = $questions->generate();
- return $graph;
- }
- /**
- * Determines whether or not a piece should be added to the graph.
- *
- * @return bool
- */
- public function is_needed() {
- return $this->is_needed;
- }
- }
|