如何用ACF编写PHP数组来呈现职位发布的JSON-LD标记

时间:2020-07-28 作者:tom84

我想在我的wordpress页面中为职业帖子添加一个动态JSON-LD(schema.org)。我在下面尝试了此代码。但我认为数组中有一些语法错误。可能是;“回声”;数组中不允许?我希望有人能帮我这个忙?

<?php function schema() {?>

<?php if( have_rows(\'schema_auszeichnung\') ): ?>
    <?php while( have_rows(\'schema_auszeichnung\') ): the_row(); 

        // Get sub field values.
        $title = get_sub_field(\'title\');
        $description = get_sub_field(\'description\');
        $state = get_sub_field(\'state\');
        $date = get_sub_field(\'date\');
        $street = get_sub_field(\'street\');
        $city = get_sub_field(\'city\');
        $postalcode = get_sub_field(\'postalcode\');


$schema = array(
    \'@context\'  => \'http://schema.org\',
    \'@type\'     => \'JobPosting\',
    \'title\'      => $title,
    \'description\' => $description,
    \'hiringOrganization\'   => array(
        \'@type\'           => \'Organization\',
        \'name\'            => \'cent GmbH\',
        \'sameAs\'          => get_home_url(),
        \'logo\'            => \'/wp/wp-content/uploads/2016/11/cropped-logo.png\'

    ),

    \'employmentType\'=> $state,
    \'datePosted\'    => $date,
    \'validThrough\'  => "",
    \'jobLocation\'   => array(

        \'@type\'     =>  "Place",
        \'address\'   => array (

            \'@type\' => \'PostalAddress\',
            \'streetAddress\' => $street,
            \'adressLocality\' => $city,
            \'postalCode\' => $postalcode,
            \'addressCountry\' => \'DE\'


        ),
    ),     


);

?>

<?php endwhile; ?>
<?php endif; ?>

<?php


echo \'<script type="application/ld+json">\' . json_encode($schema) . \'</script>\';
}

add_action(\'wp_head\', \'schema\');

?>
编辑:

删除“echo”后,我得到了php警告:未定义变量:schema。但对我来说,它是在这行中定义的:$schema=array。。。。。

2 个回复
最合适的回答,由SO网友:mozboz 整理而成

这看起来更像是一个PHP编程问题,但如果您想要得到所需变量的值,就像您在PHP中猜测的那样$var. echo $var 输出它,并将导致您使用它时出现语法错误。

否则,其他一切看起来都正常,但显然我不能说该数据结构是否会为您提供有效的JSON-LD;-)

编辑:另外,给函数起一个比\'schema\'. 你可以叫它\'yourname_jsonld_schema\' 或者别的什么,这样它就更独特了,不太可能与Wordpress中的任何其他名称发生冲突

EDIT2:为了解决您在问题中添加的额外错误,您定义的位置$schema 是否在内部if 语句,这意味着如果以后未定义该变量if 不是真的。所以你需要做一些事情,比如找出if 错误,或者如果正确,请将$schema 内部if

SO网友:Marsellus

非常感谢!我试图解决几乎相同的问题,但当人们搜索我们时,我想从FAQ页面中提取ACF,并为丰富的代码片段添加结构化数据页面:https://developers.google.com/search/docs/advanced/structured-data/faqpage

下面是我的解决方案

<?php

$faq_page_schema = \'\';

if( have_rows(\'questions\') ):
    while ( have_rows(\'questions\') ) : the_row();
        $question = \'"\'.get_sub_field(\'question\').\'"\';
        $answer = \'"\'.get_sub_field(\'answer\').\'"\';
        $faq_page_schema .= "{
            \\"@type\\": \\"Question\\",
            \\"name\\": $question,
            \\"acceptedAnswer\\": {
                \\"@type\\": \\"Answer\\",
                \\"text\\": $answer
            }
        }, ";
    endwhile;
else :
    // no rows found
endif;

$faq_page_schema = substr_replace($faq_page_schema ,"", -2);

echo
\'<script type="application/ld+json">
    {
        "@context": "https://schema.org",
        "@type": "FAQPage",
        "mainEntity": [\'.$faq_page_schema.\']
    }
</script>\';

?>

相关推荐

/博客/wp-json/nginx Return 404

我的主要领域是示例。com公司我已经在主域中实现了MEAN项目,现在我想要示例。wordpress安装程序的com/blog。我在nginx配置文件中完成了以下配置server { listen 80 default_server; listen [::]:80 default_server; server_name example.com; return 301 https://$host$request_uri;