| Server IP : 104.21.13.219 / Your IP : 162.159.115.10 Web Server : nginx/1.26.1 System : Linux HE9229 3.10.0-1160.el7.x86_64 #1 SMP Mon Oct 19 16:18:59 UTC 2020 x86_64 User : www ( 1000) PHP Version : 8.0.26 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/jl3_ph_com/wp-content/plugins/wordpress-seo/src/generators/schema/ |
Upload File : |
<?php
namespace Yoast\WP\SEO\Generators\Schema;
/**
* Returns schema FAQ data.
*/
class FAQ extends Abstract_Schema_Piece {
/**
* Determines whether a piece should be added to the graph.
*
* @return bool
*/
public function is_needed() {
if ( empty( $this->context->blocks['yoast/faq-block'] ) ) {
return false;
}
if ( ! \is_array( $this->context->schema_page_type ) ) {
$this->context->schema_page_type = [ $this->context->schema_page_type ];
}
$this->context->schema_page_type[] = 'FAQPage';
$this->context->main_entity_of_page = $this->generate_ids();
return true;
}
/**
* Generate the IDs so we can link to them in the main entity.
*
* @return array
*/
private function generate_ids() {
$ids = [];
foreach ( $this->context->blocks['yoast/faq-block'] as $block ) {
if ( isset( $block['attrs']['questions'] ) ) {
foreach ( $block['attrs']['questions'] as $question ) {
if ( empty( $question['jsonAnswer'] ) ) {
continue;
}
$ids[] = [ '@id' => $this->context->canonical . '#' . \esc_attr( $question['id'] ) ];
}
}
}
return $ids;
}
/**
* Render a list of questions, referencing them by ID.
*
* @return array Our Schema graph.
*/
public function generate() {
$graph = [];
$questions = [];
foreach ( $this->context->blocks['yoast/faq-block'] as $block ) {
if ( isset( $block['attrs']['questions'] ) ) {
$questions = \array_merge( $questions, $block['attrs']['questions'] );
}
}
foreach ( $questions as $index => $question ) {
if ( ! isset( $question['jsonAnswer'] ) || empty( $question['jsonAnswer'] ) ) {
continue;
}
$graph[] = $this->generate_question_block( $question, ( $index + 1 ) );
}
return $graph;
}
/**
* Generate a Question piece.
*
* @param array $question The question to generate schema for.
* @param int $position The position of the question.
*
* @return array Schema.org Question piece.
*/
protected function generate_question_block( $question, $position ) {
$url = $this->context->canonical . '#' . \esc_attr( $question['id'] );
$data = [
'@type' => 'Question',
'@id' => $url,
'position' => $position,
'url' => $url,
'name' => $this->helpers->schema->html->smart_strip_tags( $question['jsonQuestion'] ),
'answerCount' => 1,
'acceptedAnswer' => $this->add_accepted_answer_property( $question ),
];
return $this->helpers->schema->language->add_piece_language( $data );
}
/**
* Adds the Questions `acceptedAnswer` property.
*
* @param array $question The question to add the acceptedAnswer to.
*
* @return array Schema.org Question piece.
*/
protected function add_accepted_answer_property( $question ) {
$data = [
'@type' => 'Answer',
'text' => $this->helpers->schema->html->sanitize( $question['jsonAnswer'] ),
];
return $this->helpers->schema->language->add_piece_language( $data );
}
}