1

我在使用“php-json-ld”(github.com/digitalbazaar/php-json-ld) 为 Google Accelerated Pages (AMP, www.ampproject.org) 打印正确的 JSONLD 时遇到问题,如本示例中所述:github.com /ampproject/amphtml/blob/master/examples/metadata-examples/article-json-ld.amp.html

更具体地说:我想知道如何使用 php-json-ld 的功能添加“@type”:“NewsArticle” :

    $doc = (object)array(      
    "https://schema.org/article" => 'Article',
    "http://schema.org/name" => "Manu Sporny",
    "http://schema.org/url" => (object)array("@id" =>     "http://manu.sporny.org/"),
    "http://schema.org/image" => (object)array("@id" => "http://manu.sporny.org/images/manu.png")
);

    $context = (object)array(
    "article" => (object)array("https://schema.org/Article"),
    "name" => "http://schema.org/name",
    "homepage" => (object)array("@id" => "http://schema.org/url", "@type" => "@id"),
    "image" => (object)array("@id" => "http://schema.org/image", "@type" => "@id")
);

    //Print Json-LP
    echo '<script type="application/ld+json">';
    echo json_encode($jsonld_compacted, 
                JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
    echo '</script>';

    //Result:
    <script type="application/ld+json">{
       "@context": "http://schema.org",
       "image": "http://manu.sporny.org/images/manu.png",
       "name": "Manu Sporny",
       "url": "http://manu.sporny.org/"
   }</script>

任何人都可以帮忙吗?

4

2 回答 2

15

如果您不需要转换 JSON-LD,则不需要 php-json-ld(或任何其他库)。序列化为 JSON 的简单关联数组就足够了:

$data = array(
  "@context" => "http://schema.org",
  "@type" => "NewsArticle",
  ...
);

...

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES);
于 2015-12-28T13:43:00.007 回答
5

非常感谢Markus Lanthaler的回答,这对我帮助很大。我对他的回答只有一点补充:

如果您使用 post_title 之类的变量,则会自动对字符进行编码,这将导致 JSON-LD 格式错误。解决这个问题的方法是首先解码像标题这样的变量:

html_entity_decode(get_the_title($post->ID),ENT_QUOTES,'UTF-8');

在回显 json_encode 时,您还应该添加 JSON_UNESCAPED_UNICODE 以获得正确的编码。

所以你的回声应该看起来像这样:

echo json_encode($data, JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE);
于 2018-11-01T13:52:41.947 回答