| @@ -106,12 +106,22 @@ | ||
| 106 | 106 | 'required' => ['@type', 'name', 'startDate', 'location'], |
| 107 | 107 | 'recommended' => ['endDate', 'description', 'image', 'offers', 'performer'], |
| 108 | 108 | 'optional' => ['eventStatus', 'eventAttendanceMode', 'url', 'organizer'] |
| 109 | 109 | ], |
| 110 | + 'Review' => [ | |
| 111 | + 'required' => ['@type', 'itemReviewed', 'reviewRating', 'author'], | |
| 112 | + 'recommended' => ['reviewBody', 'datePublished', 'publisher'], | |
| 113 | + 'optional' => ['name', 'url'] | |
| 114 | + ], | |
| 110 | 115 | 'HowTo' => [ |
| 111 | 116 | 'required' => ['@type', 'name', 'step'], |
| 112 | 117 | 'recommended' => ['image', 'totalTime', 'estimatedCost', 'tool', 'supply'], |
| 113 | 118 | 'optional' => ['description', 'prepTime', 'difficulty', 'yield', 'video'] |
| 119 | + ], | |
| 120 | + 'VideoObject' => [ | |
| 121 | + 'required' => ['@type', 'name', 'description', 'thumbnailUrl', 'uploadDate'], | |
| 122 | + 'recommended' => ['contentUrl', 'embedUrl', 'duration'], | |
| 123 | + 'optional' => ['interactionStatistic', 'expires', 'regionsAllowed'] | |
| 114 | 124 | ] |
| 115 | 125 | ]; |
| 116 | 126 | |
| 117 | 127 | /** |
| @@ -178,9 +188,10 @@ | ||
| 178 | 188 | 'technicalarticle' => 'TechnicalArticle', |
| 179 | 189 | 'newsarticle' => 'NewsArticle', |
| 180 | 190 | 'scholarlyarticle' => 'ScholarlyArticle', |
| 181 | 191 | 'faqpage' => 'FAQPage', |
| 182 | - 'howto' => 'HowTo' | |
| 192 | + 'howto' => 'HowTo', | |
| 193 | + 'videoobject' => 'VideoObject' | |
| 183 | 194 | ]; |
| 184 | 195 | |
| 185 | 196 | $key = strtolower($schema_type); |
| 186 | 197 | return $schema_cases[$key] ?? ucfirst($schema_type); |