Home > database >  Schema JSON и foreach php
Schema JSON и foreach php

Time:07-28

I'm trying to make schema micro markup my FAQPage. My questions and answers are typed in the admin panel in the ACF repeater field and displayed on the site using foreach. I thought I could also do it to generate a json schema, but I can't implement it in any way, I'm still learning. Please tell me what's wrong with me

<?php
foreach ($faqs as $faq) {
    $faq .= '[';
    $faq .= '"@type" => "Question",';
    $faq .= '"name => "' . $faq['question'] . '",';
    $faq .= '"acceptedAnswer" => [';
    $faq .= '"@type => Answer",';
    $faq .= '"text => "' . $faq['answer'] . '",';
    $faq .= '],';
    $faq .= ']';
}

$data = [
    '@context' => '//schema.org',
    '@type' => 'FAQPage',
    'mainEntity' => [
        print_r($faq)
    ],
];

$data = json_encode($data);

echo '<script type="application/ld json">' . $data . '</script>';
?>

$faq['question'] and $faq['answer'] contain a question and answer.

The result I expect:

<script type="application/ld json">
{
  "@context": "https://schema.org",
  "@type": "FAQPage",
  "mainEntity": [{
    "@type": "Question",
    "name": "Question #1",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Answer #1"
    }
  },{
    "@type": "Question",
    "name": "Question #2",
    "acceptedAnswer": {
      "@type": "Answer",
      "text": "Answer #2"
    }
  }]
}
</script>

CodePudding user response:

You don't need to manually build JSON, you can use json_encode():

$faqs = [
    ['question' => 'What is the meaning of life?', 'answer' => '42'],
    ['question' => 'What is better, Star Wars or Star Trek?', 'answer' => 'Unable to answer'],
    ['question' => 'What is 1 1', 'answer' => '2, 11, window']
];

function schema_faq($faq)
{
    return [
        '@type' => 'Question',
        'name' => $faq['question'],
        'acceptedAnswer' => [
            '@type' => 'Answer',
            'text' => $faq['answer']
        ]
    ];
}

$schema_faqs = [];

foreach ($faqs as $faq) {
    $schema_faqs[] = schema_faq($faq);
}


$data = [
    '@context' => '//schema.org',
    '@type' => 'FAQPage',
    'mainEntity' => [
        $schema_faqs
    ],
];

$data = json_encode($data);

echo '<script type="application/ld json">' . $data . '</script>';

Outputs:

<script type="application/ld json">{
    "@context": "\/\/schema.org",
    "@type": "FAQPage",
    "mainEntity": [
        [
            {
                "@type": "Question",
                "name": "What is the meaning of life?",
                "acceptedAnswer": {
                    "@type": "Answer",
                    "text": "42"
                }
            },
            {
                "@type": "Question",
                "name": "What is better, Star Wars or Star Trek?",
                "acceptedAnswer": {
                    "@type": "Answer",
                    "text": "Unable to answer"
                }
            },
            {
                "@type": "Question",
                "name": "What is 1 1",
                "acceptedAnswer": {
                    "@type": "Answer",
                    "text": "2, 11, window"
                }
            }
        ]
    ]
}</script>
  • Related