Schema.org菜单类型属性hasMenuSection& hasMenuItem

时间:2017-10-24 09:34:18

标签: html schema.org

我正在尝试在schema.org中创建一个菜单,但不知怎的,它不会有效。这与属性hasMenuSection& hasMenuItem。我在这段代码中做错了什么?

<div itemscope itemtype="http://schema.org/Menu" itemref="restaurant-info-footer">
<meta itemprop="url" content="<?php the_permalink(); ?>">
<meta itemprop="mainEntityOfPage" content="<?php the_permalink(); ?>">
<meta itemprop="inLanguage" content="<?php echo get_locale(); ?>">
<h2 itemprop="name"><?php echo get_the_title( $menu_id ); ?></h2>

<?php if ( ! empty( $menu_price ) && ! is_null( $menu_price ) && $hide_prices ) : ?>
    <span itemprop="offers" itemscope itemtype="http://schema.org/Offer">
        <meta itemprop="price" content="<?php echo number_format( $menu_price, 2, ',', '.'); ?>">
        <meta itemprop="priceCurrency" content="EUR">
    </span>
<?php endif; ?>

<div class="courses" itemscope itemprop="hasMenuSection" itemtype="http://schema.org/hasMenuSection">
    <?php foreach ( $courses as $course ) : ?>
        <div class="course" itemscope itemprop="MenuSection" itemtype="http://schema.org/MenuSection">
            <div class="course-holder" style="background-image: url(<?php echo $course['image']; ?>);">
                <h3 itemprop="name"><?php echo $course['name']; ?></h3>
            </div>
            <div class="course-dishes" itemscope itemprop="hasMenuItem" itemtype="http://schema.org/hasMenuItem">
                <?php foreach ( $course['dishes'] as $dish ) : ?>
                    <?php $dish = $dish['dish']; ?>
                    <div class="dish" itemscope itemprop="MenuItem" itemtype="http://schema.org/MenuItem">
                        <h4 itemprop="name"><?php echo get_the_title( $dish ); ?></h4>
                        <?php if ( ! empty( get_field( 'more-price', $dish ) ) && ! is_null( get_field( 'more-price', $dish ) ) && ! $hide_prices ) : ?>
                            <span class="more-price">(<?php _e( 'addition', 'croy-plugin' ); ?> <?php the_field( 'more-price', $dish ); ?>)</span>
                        <?php endif; ?>
                        <?php if ( get_field( 'vegan', $dish ) ) : ?>
                            <span class="vegan" itemprop="suitableForDiet" content="http://schema.org/VeganDiet"></span>
                        <?php endif; ?>
                        <p itemprop="description"><?php the_field( 'subtitel', $dish ); ?></p>
                        <?php if ( ! empty( get_field( 'price', $dish ) ) && ! is_null( get_field( 'price', $dish ) ) && ! $hide_prices ) : ?>
                            <div class="price" itemprop="offers" itemtype="http://schema.org/offers" itemscope>
                                <p itemprop="price"><?php echo number_format( get_field( 'price', $dish ), 2, ',', '.' ); ?></p>
                                <meta itemprop="priceCurrency" content="EUR">
                            </div>
                        <?php endif; ?>
                    </div>
                <?php endforeach; ?>
            </div>
        </div>
    <?php endforeach; ?>
</div>

调试器会发出以下错误:

  

hasMenuSection不是属性hasMenuSection的有效目标类型。

     

hasMenuItem不是属性hasMenuItem的有效目标类型。

虽然优惠和MenuItem很好。

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

hasMenuSection是属性,不是类型。因此,下面的代码是您设置itemscope两次,一次是hasMenuSection(不是一个类型),另一个是MenuSection,它不是一个属性,是不正确的。

<div class="courses" itemscope itemprop="hasMenuSection" itemtype="http://schema.org/hasMenuSection">
    <?php foreach ( $courses as $course ) : ?>
        <div class="course" itemscope itemprop="MenuSection" itemtype="http://schema.org/MenuSection">

代码应如下所示。 itemscope用于声明一个新范围。 itemprop指的是属性名称。 itemtype指的是包含在其中的类型。

<div class="courses">
    <?php foreach ( $courses as $course ) : ?>
        <div class="course" itemscope itemprop="hasMenuSection" itemtype="http://schema.org/MenuSection">

同样适用于hasMenuItem

<div class="course-dishes" itemscope itemprop="hasMenuItem" itemtype="http://schema.org/hasMenuItem">
    <?php foreach ( $course['dishes'] as $dish ) : ?>
        <?php $dish = $dish['dish']; ?>
        <div class="dish" itemscope itemprop="MenuItem" itemtype="http://schema.org/MenuItem">

应该是

<div class="course-dishes">
    <?php foreach ( $course['dishes'] as $dish ) : ?>
        <?php $dish = $dish['dish']; ?>
        <div class="dish" itemscope itemprop="hasMenuItem" itemtype="http://schema.org/MenuItem">

之后的相关错误是由类似的错误引起的。

<div class="price" itemprop="offers" itemtype="http://schema.org/offers" itemscope>

优惠不是一种类型,而是属性。 itemprop="offers"在声明属性时是正确的,但itemtype应为Offer,而不是不存在的商品。以上将会出现以下错误:

  

商品不是商品属性的已知有效目标类型。

因此它应该是

<div class="price" itemscope itemprop="offers" itemtype="http://schema.org/Offer">