WP SEO Structured Data Schema - Version 2.5.6

Version Description

  • Fix event
  • AMP support
  • Fix Spelling

=

Download this release

Release Info

Developer kcseopro
Plugin Icon 128x128 WP SEO Structured Data Schema
Version 2.5.6
Comparing to
See all releases

Code changes from version 2.5.5 to 2.5.6

README.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: kcseopro
3
  Donate link:
4
  Tags: seo, schema, structured data, rich snippets, microdata, json-ld, search engine optimization, local seo, google, sitelinks, schema.org, microformat, serp
5
  Requires at least: 4.5
6
- Tested up to: 5.0
7
- Stable tag: 2.5.5
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -93,12 +93,6 @@ You can validate structured data on any web page here:
93
  For more information on the plugin author visit:
94
 
95
  * [WP SEM Plugins](https://wpsemplugins.com/)
96
- * [Kansas City SEO®](https://kcseopro.com/)
97
- * [Twitter](https://twitter.com/kcseopro)
98
- * [Google+](https://plus.google.com/+Kcseopro-kansas-city-seo)
99
- * [Phil Singleton](https://www.linkedin.com/in/seokansascity)
100
- * [SEO for Growth](https://seoforgrowth.com/)
101
-
102
 
103
  == Installation ==
104
 
@@ -110,7 +104,7 @@ For more information on the plugin author visit:
110
 
111
  == Frequently Asked Questions ==
112
 
113
- You'll find the [FAQ on Kcseopro.com](https://wpsemplugins.com/).
114
 
115
  == Screenshots ==
116
 
@@ -120,6 +114,11 @@ You'll find the [FAQ on Kcseopro.com](https://wpsemplugins.com/).
120
 
121
  == Changelog ==
122
 
 
 
 
 
 
123
  == 2.5.5 =
124
  * Add Site schema control
125
  * Fix Site schema search link
3
  Donate link:
4
  Tags: seo, schema, structured data, rich snippets, microdata, json-ld, search engine optimization, local seo, google, sitelinks, schema.org, microformat, serp
5
  Requires at least: 4.5
6
+ Tested up to: 5.1
7
+ Stable tag: 2.5.6
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
93
  For more information on the plugin author visit:
94
 
95
  * [WP SEM Plugins](https://wpsemplugins.com/)
 
 
 
 
 
 
96
 
97
  == Installation ==
98
 
104
 
105
  == Frequently Asked Questions ==
106
 
107
+ You'll find the [FAQ on WPSEMPlugins.com](https://wpsemplugins.com/wordpress-seo-structured-data-schema-plugin/).
108
 
109
  == Screenshots ==
110
 
114
 
115
  == Changelog ==
116
 
117
+ == 2.5.6 =
118
+ * Fix event
119
+ * AMP support
120
+ * Fix Spelling
121
+
122
  == 2.5.5 =
123
  * Add Site schema control
124
  * Fix Site schema search link
assets/css/admin.css CHANGED
@@ -216,11 +216,12 @@ ul.rt-tab-nav li a:focus {
216
  float: right;
217
  width: 86%;
218
  box-sizing: border-box;
219
- display: none;
220
  border: 1px solid #e7e7e7;
221
  padding: 20px;
222
  }
223
-
 
 
224
  div#rt-schema-tab-holder:after {
225
  clear: both;
226
  content: ".";
@@ -284,14 +285,32 @@ p.description.kco-telephone > span {
284
  }
285
 
286
  .field-container .field-label span {
287
- margin-left: 10px;
288
- color: red;
289
  }
290
-
291
- p.description .required {
292
  color: red;
293
  }
 
 
 
 
294
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
295
  .schema-holder .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
296
  padding: .5em 0.6em;
297
  font-size: 14px;
216
  float: right;
217
  width: 86%;
218
  box-sizing: border-box;
 
219
  border: 1px solid #e7e7e7;
220
  padding: 20px;
221
  }
222
+ .rt-tab-container .rt-tab-content:not(.active) {
223
+ display: none;
224
+ }
225
  div#rt-schema-tab-holder:after {
226
  clear: both;
227
  content: ".";
285
  }
286
 
287
  .field-container .field-label span {
288
+ margin-left: 5px;
 
289
  }
290
+ p.description .required,
291
+ .field-container .field-label span.required {
292
  color: red;
293
  }
294
+ .field-container .field-label span.recommended {
295
+ color: #721c24;
296
+ }
297
+ /* tooltip */
298
 
299
+ [data-kcseo-tooltip]{
300
+ position: relative;
301
+ }
302
+ [data-kcseo-tooltip]:hover::after{
303
+ position: absolute;
304
+ left: 50%;
305
+ bottom: 100%;
306
+ content: attr(data-kcseo-tooltip);
307
+ background: rgba(0,0,0,.8);
308
+ color: #fff;
309
+ padding: .5em 1em;
310
+ border-radius: 7px;
311
+ transform: translateX(-50%);
312
+ transition: all ease-in-out 250ms;
313
+ }
314
  .schema-holder .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
315
  padding: .5em 0.6em;
316
  font-size: 14px;
assets/js/admin.js CHANGED
@@ -1,8 +1,7 @@
1
  (function ($) {
2
  'use strict';
3
 
4
- $(document).ready(function () {
5
- $(".rt-tab-nav li:first-child a").trigger('click');
6
  if ($(".kcseo-date").length) {
7
  $('.kcseo-date').datepicker({
8
  'format': 'yyyy-mm-dd',
@@ -62,16 +61,17 @@
62
 
63
  $(".rt-tab-nav li").on('click', 'a', function (e) {
64
  e.preventDefault();
65
- var container = $(this).parents('.rt-tab-container');
66
- var nav = container.children('.rt-tab-nav');
67
- var content = container.children(".rt-tab-content");
68
- var $this, $id;
69
- $this = $(this);
70
- $id = $this.attr('href');
71
- content.hide();
72
  nav.find('li').removeClass('active');
73
- $this.parent().addClass('active');
74
- container.find($id).show();
 
75
  });
76
 
77
  $(".kSeoImgAdd").on("click", function (e) {
1
  (function ($) {
2
  'use strict';
3
 
4
+ $(function () {
 
5
  if ($(".kcseo-date").length) {
6
  $('.kcseo-date').datepicker({
7
  'format': 'yyyy-mm-dd',
61
 
62
  $(".rt-tab-nav li").on('click', 'a', function (e) {
63
  e.preventDefault();
64
+ var $this = $(this),
65
+ li = $this.parent(),
66
+ container = $this.parents('.rt-tab-container'),
67
+ nav = container.children('.rt-tab-nav'),
68
+ content = container.children(".rt-tab-content"),
69
+ id = li.data('id');
70
+ content.removeClass('active');
71
  nav.find('li').removeClass('active');
72
+ li.addClass('active');
73
+ container.find('#' + id).addClass('active');
74
+ container.find('#_kcseo_ative_tab').val(id);
75
  });
76
 
77
  $(".kSeoImgAdd").on("click", function (e) {
languages/wp-seo-structured-data-schema.pot CHANGED
@@ -1,998 +1,1241 @@
1
- # Copyright (C) 2019 WP SEO Structured Data Schema
2
- # This file is distributed under the same license as the WP SEO Structured Data Schema package.
3
  msgid ""
4
  msgstr ""
 
5
  "Project-Id-Version: WP SEO Structured Data Schema\n"
 
 
 
 
6
  "MIME-Version: 1.0\n"
7
  "Content-Type: text/plain; charset=UTF-8\n"
8
  "Content-Transfer-Encoding: 8bit\n"
 
9
  "X-Poedit-Basepath: ..\n"
10
- "X-Poedit-KeywordsList: __;_e;_ex:1,2c;_n:1,2;_n_noop:1,2;_nx:1,2,4c;_nx_noop:1,2,3c;_x:1,2c;esc_attr__;esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c\n"
 
 
 
 
11
  "X-Poedit-SearchPath-0: .\n"
12
  "X-Poedit-SearchPathExcluded-0: *.js\n"
13
- "X-Poedit-SourceCharset: UTF-8\n"
14
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
 
16
- #: ../lib/classes/KcSeoHelper.php:190
17
  msgid "Pro Version Features"
18
  msgstr ""
19
 
20
- #: ../lib/classes/KcSeoHelper.php:192
21
  msgid "Includes Auto-fill function <---Popular"
22
  msgstr ""
23
 
24
- #: ../lib/classes/KcSeoHelper.php:193
25
  msgid "Supports Custom Post Types beyond default page and posts"
26
  msgstr ""
27
 
28
- #: ../lib/classes/KcSeoHelper.php:194
29
  msgid "Supports WordPress Multisite"
30
  msgstr ""
31
 
32
- #: ../lib/classes/KcSeoHelper.php:195
33
  msgid "Supports more schema types:"
34
  msgstr ""
35
 
36
- #: ../lib/classes/KcSeoHelper.php:197
37
  msgid "Books"
38
  msgstr ""
39
 
40
- #: ../lib/classes/KcSeoHelper.php:198
41
  msgid "Courses"
42
  msgstr ""
43
 
44
- #: ../lib/classes/KcSeoHelper.php:199
45
  msgid "Job Postings"
46
  msgstr ""
47
 
48
- #: ../lib/classes/KcSeoHelper.php:200
49
  msgid "Movies"
50
  msgstr ""
51
 
52
- #: ../lib/classes/KcSeoHelper.php:201, ../lib/models/KcSeoSchemaModel.php:1467
53
  msgid "Music"
54
  msgstr ""
55
 
56
- #: ../lib/classes/KcSeoHelper.php:202, ../lib/models/KcSeoSchemaModel.php:1471
57
  msgid "Recipe"
58
  msgstr ""
59
 
60
- #: ../lib/classes/KcSeoHelper.php:203
61
  msgid "TV Episode"
62
  msgstr ""
63
 
64
- #: ../lib/classes/KcSeoHelper.php:204, ../lib/models/KcSeoSchemaModel.php:1479
65
  msgid "QAPage"
66
  msgstr ""
67
 
68
- #: ../lib/classes/KcSeoHelper.php:210
 
 
 
 
69
  msgid "Get the Pro Version"
70
  msgstr ""
71
 
72
- #: ../lib/classes/KcSeoInit.php:32
73
  msgid "Documentation"
74
  msgstr ""
75
 
76
- #: ../lib/classes/KcSeoInit.php:33
77
  msgid "Get Pro"
78
  msgstr ""
79
 
80
- #: ../lib/classes/KcSeoInit.php:205, ../lib/views/schema-options.php:7
 
 
 
 
 
 
 
 
 
81
  msgid "WP SEO Structured Data Schema"
82
  msgstr ""
83
 
84
- #: ../lib/classes/KcSeoInit.php:205
85
  msgid "WP SEO Schema"
86
  msgstr ""
87
 
88
- #: ../lib/classes/KcSeoInit.php:207
89
  msgid "WP SEO Schema settings"
90
  msgstr ""
91
 
92
- #: ../lib/classes/KcSeoInit.php:207
93
  msgid "Settings"
94
  msgstr ""
95
 
96
- #: ../lib/classes/KcSeoMetaData.php:60, ../lib/views/schema-options.php:26
97
- msgid "For more detailed information on how to configure this plugin, please visit:"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
98
  msgstr ""
99
 
100
- #: ../lib/classes/KcSeoMetaData.php:61
101
- msgid "Once you save these structured data schema settings, validate this page url here:"
102
  msgstr ""
103
 
104
- #: ../lib/models/KcSeoSchemaModel.php:685
105
  msgid "Article"
106
  msgstr ""
107
 
108
- #: ../lib/models/KcSeoSchemaModel.php:691, ../lib/models/KcSeoSchemaModel.php:765, ../lib/models/KcSeoSchemaModel.php:834
 
109
  msgid "Headline"
110
  msgstr ""
111
 
112
- #: ../lib/models/KcSeoSchemaModel.php:693, ../lib/models/KcSeoSchemaModel.php:836
113
  msgid "Article title"
114
  msgstr ""
115
 
116
- #: ../lib/models/KcSeoSchemaModel.php:697, ../lib/models/KcSeoSchemaModel.php:771, ../lib/models/KcSeoSchemaModel.php:840
 
117
  msgid "Page URL"
118
  msgstr ""
119
 
120
- #: ../lib/models/KcSeoSchemaModel.php:699, ../lib/models/KcSeoSchemaModel.php:773, ../lib/models/KcSeoSchemaModel.php:842
 
121
  msgid "The canonical URL of the article page"
122
  msgstr ""
123
 
124
- #: ../lib/models/KcSeoSchemaModel.php:703
125
  msgid "Author Name"
126
  msgstr ""
127
 
128
- #: ../lib/models/KcSeoSchemaModel.php:705, ../lib/models/KcSeoSchemaModel.php:779, ../lib/models/KcSeoSchemaModel.php:848
 
129
  msgid "Author display name"
130
  msgstr ""
131
 
132
- #: ../lib/models/KcSeoSchemaModel.php:709
133
  msgid "Article Feature Image"
134
  msgstr ""
135
 
136
- #: ../lib/models/KcSeoSchemaModel.php:712
137
- msgid "Images should be at least 696 pixels wide.<br>Images should be in .jpg, .png, or. gif format."
 
 
138
  msgstr ""
139
 
140
- #: ../lib/models/KcSeoSchemaModel.php:715, ../lib/models/KcSeoSchemaModel.php:789, ../lib/models/KcSeoSchemaModel.php:858
 
141
  msgid "Published date"
142
  msgstr ""
143
 
144
- #: ../lib/models/KcSeoSchemaModel.php:719, ../lib/models/KcSeoSchemaModel.php:726, ../lib/models/KcSeoSchemaModel.php:792, ../lib/models/KcSeoSchemaModel.php:799, ../lib/models/KcSeoSchemaModel.php:861, ../lib/models/KcSeoSchemaModel.php:869, ../lib/models/KcSeoSchemaModel.php:1111, ../lib/models/KcSeoSchemaModel.php:1228
 
 
 
145
  msgid "Like this: 2015-12-25"
146
  msgstr ""
147
 
148
- #: ../lib/models/KcSeoSchemaModel.php:722, ../lib/models/KcSeoSchemaModel.php:796, ../lib/models/KcSeoSchemaModel.php:865
 
149
  msgid "Modified date"
150
  msgstr ""
151
 
152
- #: ../lib/models/KcSeoSchemaModel.php:729, ../lib/models/KcSeoSchemaModel.php:803, ../lib/models/KcSeoSchemaModel.php:872
 
153
  msgid "Publisher"
154
  msgstr ""
155
 
156
- #: ../lib/models/KcSeoSchemaModel.php:731, ../lib/models/KcSeoSchemaModel.php:805, ../lib/models/KcSeoSchemaModel.php:874
 
157
  msgid "Publisher name or Organization name"
158
  msgstr ""
159
 
160
- #: ../lib/models/KcSeoSchemaModel.php:735, ../lib/models/KcSeoSchemaModel.php:809, ../lib/models/KcSeoSchemaModel.php:878
 
161
  msgid "Publisher Logo"
162
  msgstr ""
163
 
164
- #: ../lib/models/KcSeoSchemaModel.php:737, ../lib/models/KcSeoSchemaModel.php:811, ../lib/models/KcSeoSchemaModel.php:880
165
- msgid "Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>"
166
- msgstr ""
167
-
168
- #: ../lib/models/KcSeoSchemaModel.php:741, ../lib/models/KcSeoSchemaModel.php:815, ../lib/models/KcSeoSchemaModel.php:884, ../lib/models/KcSeoSchemaModel.php:986, ../lib/models/KcSeoSchemaModel.php:1067, ../lib/models/KcSeoSchemaModel.php:1299, ../lib/models/KcSeoSchemaModel.php:1412, ../lib/views/schema-options.php:170, ../lib/views/schema-options.php:255
 
 
 
 
 
 
 
 
 
 
 
169
  msgid "Description"
170
  msgstr ""
171
 
172
- #: ../lib/models/KcSeoSchemaModel.php:743, ../lib/models/KcSeoSchemaModel.php:817, ../lib/models/KcSeoSchemaModel.php:886
 
173
  msgid "Short description"
174
  msgstr ""
175
 
176
- #: ../lib/models/KcSeoSchemaModel.php:746, ../lib/models/KcSeoSchemaModel.php:820, ../lib/models/KcSeoSchemaModel.php:889
 
177
  msgid "Article body"
178
  msgstr ""
179
 
180
- #: ../lib/models/KcSeoSchemaModel.php:748, ../lib/models/KcSeoSchemaModel.php:822
181
  msgid "Article content"
182
  msgstr ""
183
 
184
- #: ../lib/models/KcSeoSchemaModel.php:751
185
  msgid "Alternative headline"
186
  msgstr ""
187
 
188
- #: ../lib/models/KcSeoSchemaModel.php:753
189
  msgid "A secondary headline for the article."
190
  msgstr ""
191
 
192
- #: ../lib/models/KcSeoSchemaModel.php:759
193
  msgid "Blog Posting"
194
  msgstr ""
195
 
196
- #: ../lib/models/KcSeoSchemaModel.php:767
197
  msgid "Blog posting title"
198
  msgstr ""
199
 
200
- #: ../lib/models/KcSeoSchemaModel.php:777
201
  msgid "Author name"
202
  msgstr ""
203
 
204
- #: ../lib/models/KcSeoSchemaModel.php:783
205
  msgid "Feature Image"
206
  msgstr ""
207
 
208
- #: ../lib/models/KcSeoSchemaModel.php:785, ../lib/models/KcSeoSchemaModel.php:854
209
- msgid "The representative image of the article. Only a marked-up image that directly belongs to the article should be specified.<br> Images should be at least 696 pixels wide. <br>Images should be in .jpg, .png, or. gif format."
 
 
 
210
  msgstr ""
211
 
212
- #: ../lib/models/KcSeoSchemaModel.php:828
213
  msgid "News Article"
214
  msgstr ""
215
 
216
- #: ../lib/models/KcSeoSchemaModel.php:846, ../lib/models/KcSeoSchemaModel.php:1218
217
  msgid "Author"
218
  msgstr ""
219
 
220
- #: ../lib/models/KcSeoSchemaModel.php:852, ../lib/models/KcSeoSchemaModel.php:981, ../lib/models/KcSeoSchemaModel.php:1379, ../lib/views/schema-options.php:247
 
221
  msgid "Image"
222
  msgstr ""
223
 
224
- #: ../lib/models/KcSeoSchemaModel.php:891
225
  msgid "Article body content"
226
  msgstr ""
227
 
228
- #: ../lib/models/KcSeoSchemaModel.php:897
229
  msgid "Event"
230
  msgstr ""
231
 
232
- #: ../lib/models/KcSeoSchemaModel.php:903, ../lib/models/KcSeoSchemaModel.php:975, ../lib/models/KcSeoSchemaModel.php:1061, ../lib/models/KcSeoSchemaModel.php:1123, ../lib/models/KcSeoSchemaModel.php:1407, ../lib/views/schema-options.php:224
 
 
233
  msgid "Name"
234
  msgstr ""
235
 
236
- #: ../lib/models/KcSeoSchemaModel.php:906
237
  msgid "The name of the event."
238
  msgstr ""
239
 
240
- #: ../lib/models/KcSeoSchemaModel.php:909
241
  msgid "Location name"
242
  msgstr ""
243
 
244
- #: ../lib/models/KcSeoSchemaModel.php:912
245
  msgid "Event Location name"
246
  msgstr ""
247
 
248
- #: ../lib/models/KcSeoSchemaModel.php:915
249
  msgid "Location address"
250
  msgstr ""
251
 
252
- #: ../lib/models/KcSeoSchemaModel.php:918
253
- msgid "The location of for example where the event is happening, an organization is located, or where an action takes place."
 
 
254
  msgstr ""
255
 
256
- #: ../lib/models/KcSeoSchemaModel.php:921
257
  msgid "Start date"
258
  msgstr ""
259
 
260
- #: ../lib/models/KcSeoSchemaModel.php:925
261
  msgid "Event start date"
262
  msgstr ""
263
 
264
- #: ../lib/models/KcSeoSchemaModel.php:928
265
- msgid "End date (Recommended)"
266
  msgstr ""
267
 
268
- #: ../lib/models/KcSeoSchemaModel.php:931
269
  msgid "Event end date"
270
  msgstr ""
271
 
272
- #: ../lib/models/KcSeoSchemaModel.php:934
273
- msgid "Description (Recommended)"
274
- msgstr ""
275
-
276
- #: ../lib/models/KcSeoSchemaModel.php:936
277
  msgid "Event description"
278
  msgstr ""
279
 
280
- #: ../lib/models/KcSeoSchemaModel.php:939
281
- msgid "Performer Name (Recommended)"
282
  msgstr ""
283
 
284
- #: ../lib/models/KcSeoSchemaModel.php:941
285
  msgid "The performer's name."
286
  msgstr ""
287
 
288
- #: ../lib/models/KcSeoSchemaModel.php:944
289
- msgid "Image URL (Recommended)"
290
  msgstr ""
291
 
292
- #: ../lib/models/KcSeoSchemaModel.php:946
293
  msgid "URL of an image or logo for the event or tour"
294
  msgstr ""
295
 
296
- #: ../lib/models/KcSeoSchemaModel.php:949
297
- msgid "Price (Recommended)"
298
  msgstr ""
299
 
300
- #: ../lib/models/KcSeoSchemaModel.php:952
301
- msgid "This is highly recommended. The lowest available price, including service charges and fees, of this type of ticket. <span class='required'>Not required but (Recommended)</span>"
 
 
 
302
  msgstr ""
303
 
304
- #: ../lib/models/KcSeoSchemaModel.php:955, ../lib/models/KcSeoSchemaModel.php:1014
305
  msgid "Price currency"
306
  msgstr ""
307
 
308
- #: ../lib/models/KcSeoSchemaModel.php:957
309
  msgid "The 3-letter currency code. (USD)"
310
  msgstr ""
311
 
312
- #: ../lib/models/KcSeoSchemaModel.php:963
313
- msgid "A link to the event's details page. <span class='required'>Not required but (Recommended)</span>"
 
 
 
 
 
 
314
  msgstr ""
315
 
316
- #: ../lib/models/KcSeoSchemaModel.php:969
317
  msgid "Product"
318
  msgstr ""
319
 
320
- #: ../lib/models/KcSeoSchemaModel.php:978
321
  msgid "The name of the product."
322
  msgstr ""
323
 
324
- #: ../lib/models/KcSeoSchemaModel.php:983
325
- msgid "The URL of a product photo. Pictures clearly showing the product, e.g. against a white background, are preferred."
 
 
326
  msgstr ""
327
 
328
- #: ../lib/models/KcSeoSchemaModel.php:988
329
  msgid "Product description."
330
  msgstr ""
331
 
332
- #: ../lib/models/KcSeoSchemaModel.php:991
333
  msgid "Brand"
334
  msgstr ""
335
 
336
- #: ../lib/models/KcSeoSchemaModel.php:993
337
  msgid "The brand of the product."
338
  msgstr ""
339
 
340
- #: ../lib/models/KcSeoSchemaModel.php:996
341
- msgid "Ratting value"
342
  msgstr ""
343
 
344
- #: ../lib/models/KcSeoSchemaModel.php:999
345
  msgid "Rating value. (1 , 2.5, 3, 5 etc)"
346
  msgstr ""
347
 
348
- #: ../lib/models/KcSeoSchemaModel.php:1002
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
349
  msgid "Total review count"
350
  msgstr ""
351
 
352
- #: ../lib/models/KcSeoSchemaModel.php:1005
353
- msgid "Rating ratting value. <span class='required'>This is required if (Ratting value) is given</span>"
 
 
354
  msgstr ""
355
 
356
- #: ../lib/models/KcSeoSchemaModel.php:1008
357
- msgid "Price"
 
 
358
  msgstr ""
359
 
360
- #: ../lib/models/KcSeoSchemaModel.php:1011
361
- msgid "The lowest available price, including service charges and fees, of this type of ticket."
362
  msgstr ""
363
 
364
- #: ../lib/models/KcSeoSchemaModel.php:1016
 
 
 
 
 
 
365
  msgid "The 3-letter currency code."
366
  msgstr ""
367
 
368
- #: ../lib/models/KcSeoSchemaModel.php:1032
369
  msgid "Select a availability type"
370
  msgstr ""
371
 
372
- #: ../lib/models/KcSeoSchemaModel.php:1044
373
  msgid "Select a condition"
374
  msgstr ""
375
 
376
- #: ../lib/models/KcSeoSchemaModel.php:1047
377
  msgid "Product URL"
378
  msgstr ""
379
 
380
- #: ../lib/models/KcSeoSchemaModel.php:1049
381
- msgid "A URL to the product web page (that includes the Offer). (Don't use offerURL for markup that appears on the product page itself.)"
 
 
382
  msgstr ""
383
 
384
- #: ../lib/models/KcSeoSchemaModel.php:1055
385
  msgid "Video"
386
  msgstr ""
387
 
388
- #: ../lib/models/KcSeoSchemaModel.php:1064
389
  msgid "The title of the video"
390
  msgstr ""
391
 
392
- #: ../lib/models/KcSeoSchemaModel.php:1070
393
  msgid "The description of the video"
394
  msgstr ""
395
 
396
- #: ../lib/models/KcSeoSchemaModel.php:1077
397
- msgid "A URL pointing to the video thumbnail image file. Images must be at least 160x90 pixels and at most 1920x1080 pixels."
 
 
398
  msgstr ""
399
 
400
- #: ../lib/models/KcSeoSchemaModel.php:1080
401
  msgid "Updated date"
402
  msgstr ""
403
 
404
- #: ../lib/models/KcSeoSchemaModel.php:1083
405
  msgid "2015-02-05T08:00:00+08:00"
406
  msgstr ""
407
 
408
- #: ../lib/models/KcSeoSchemaModel.php:1086
409
  msgid "Duration"
410
  msgstr ""
411
 
412
- #: ../lib/models/KcSeoSchemaModel.php:1088
413
  msgid "The duration of the video in ISO 8601 format.(PT1M33S)"
414
  msgstr ""
415
 
416
- #: ../lib/models/KcSeoSchemaModel.php:1094
417
- msgid "A URL pointing to the actual video media file. This file should be in .mpg, .mpeg, .mp4, .m4v, .mov, .wmv, .asf, .avi, .ra, .ram, .rm, .flv, or other video file format."
 
 
 
418
  msgstr ""
419
 
420
- #: ../lib/models/KcSeoSchemaModel.php:1100
421
- msgid "A URL pointing to a player for the specific video. Usually this is the information in the src element of an < embed> tag.Example: Dailymotion: http://www.dailymotion.com/swf/x1o2g."
 
 
 
422
  msgstr ""
423
 
424
- #: ../lib/models/KcSeoSchemaModel.php:1103
425
  msgid "Interaction count"
426
  msgstr ""
427
 
428
- #: ../lib/models/KcSeoSchemaModel.php:1105
429
  msgid "The number of times the video has been viewed."
430
  msgstr ""
431
 
432
- #: ../lib/models/KcSeoSchemaModel.php:1108
433
  msgid "Expires"
434
  msgstr ""
435
 
436
- #: ../lib/models/KcSeoSchemaModel.php:1117
437
  msgid "Service"
438
  msgstr ""
439
 
440
- #: ../lib/models/KcSeoSchemaModel.php:1126
441
  msgid "The name of the Service."
442
  msgstr ""
443
 
444
- #: ../lib/models/KcSeoSchemaModel.php:1129
445
  msgid "Service type"
446
  msgstr ""
447
 
448
- #: ../lib/models/KcSeoSchemaModel.php:1132
449
- msgid "The type of service being offered, e.g. veterans' benefits, emergency relief, etc."
 
 
450
  msgstr ""
451
 
452
- #: ../lib/models/KcSeoSchemaModel.php:1138
453
- msgid "An additional type for the service, typically used for adding more specific types from external vocabularies in microdata syntax."
 
 
454
  msgstr ""
455
 
456
- #: ../lib/models/KcSeoSchemaModel.php:1141
457
  msgid "Award"
458
  msgstr ""
459
 
460
- #: ../lib/models/KcSeoSchemaModel.php:1143
461
  msgid "An award won by or for this service."
462
  msgstr ""
463
 
464
- #: ../lib/models/KcSeoSchemaModel.php:1146
465
  msgid "Category"
466
  msgstr ""
467
 
468
- #: ../lib/models/KcSeoSchemaModel.php:1148
469
  msgid "A category for the service."
470
  msgstr ""
471
 
472
- #: ../lib/models/KcSeoSchemaModel.php:1151
473
  msgid "Provider mobility"
474
  msgstr ""
475
 
476
- #: ../lib/models/KcSeoSchemaModel.php:1153
477
- msgid "Indicates the mobility of a provided service (e.g. 'static', 'dynamic')."
 
478
  msgstr ""
479
 
480
- #: ../lib/models/KcSeoSchemaModel.php:1159
481
  msgid "A short description of the service."
482
  msgstr ""
483
 
484
- #: ../lib/models/KcSeoSchemaModel.php:1165
485
  msgid "An image of the service. This should be a URL."
486
  msgstr ""
487
 
488
- #: ../lib/models/KcSeoSchemaModel.php:1171
489
- msgid "Indicates a page (or other CreativeWork) for which this thing is the main entity being described."
 
 
490
  msgstr ""
491
 
492
- #: ../lib/models/KcSeoSchemaModel.php:1177
493
- msgid "URL of a reference Web page that unambiguously indicates the service's identity. E.g. the URL of the service's Wikipedia page, Freebase page, or official website."
 
 
 
494
  msgstr ""
495
 
496
- #: ../lib/models/KcSeoSchemaModel.php:1183
497
  msgid "URL of the service."
498
  msgstr ""
499
 
500
- #: ../lib/models/KcSeoSchemaModel.php:1186
501
  msgid "Alternate name"
502
  msgstr ""
503
 
504
- #: ../lib/models/KcSeoSchemaModel.php:1188
505
  msgid "An alias for the service."
506
  msgstr ""
507
 
508
- #: ../lib/models/KcSeoSchemaModel.php:1194
509
  msgid "Review"
510
  msgstr ""
511
 
512
- #: ../lib/models/KcSeoSchemaModel.php:1200
513
  msgid "Name of the reviewed item"
514
  msgstr ""
515
 
516
- #: ../lib/models/KcSeoSchemaModel.php:1203
517
  msgid "The item that is being reviewed."
518
  msgstr ""
519
 
520
- #: ../lib/models/KcSeoSchemaModel.php:1206
521
  msgid "Review body"
522
  msgstr ""
523
 
524
- #: ../lib/models/KcSeoSchemaModel.php:1209
525
  msgid "The actual body of the review."
526
  msgstr ""
527
 
528
- #: ../lib/models/KcSeoSchemaModel.php:1212
529
  msgid "Review name"
530
  msgstr ""
531
 
532
- #: ../lib/models/KcSeoSchemaModel.php:1215
533
  msgid "A particular name for the review."
534
  msgstr ""
535
 
536
- #: ../lib/models/KcSeoSchemaModel.php:1222
537
  msgid "The author of the review. The reviewer’s name needs to be a valid name."
538
  msgstr ""
539
 
540
- #: ../lib/models/KcSeoSchemaModel.php:1225
541
  msgid "Date of Published"
542
  msgstr ""
543
 
544
- #: ../lib/models/KcSeoSchemaModel.php:1231
545
- msgid "Rating value"
546
- msgstr ""
547
-
548
- #: ../lib/models/KcSeoSchemaModel.php:1234, ../lib/models/KcSeoSchemaModel.php:1322, ../lib/models/KcSeoSchemaModel.php:1329
549
  msgid "A numerical quality rating for the item."
550
  msgstr ""
551
 
552
- #: ../lib/models/KcSeoSchemaModel.php:1237
553
  msgid "Best rating"
554
  msgstr ""
555
 
556
- #: ../lib/models/KcSeoSchemaModel.php:1240
557
  msgid "The highest value allowed in this rating system."
558
  msgstr ""
559
 
560
- #: ../lib/models/KcSeoSchemaModel.php:1243
561
  msgid "Worst rating"
562
  msgstr ""
563
 
564
- #: ../lib/models/KcSeoSchemaModel.php:1246
565
- msgid "The lowest value allowed in this rating system. * Required if the rating system is not on a 5-point scale. If worstRating is omitted, 1 is assumed."
 
 
566
  msgstr ""
567
 
568
- #: ../lib/models/KcSeoSchemaModel.php:1249
569
  msgid "Name of the organization"
570
  msgstr ""
571
 
572
- #: ../lib/models/KcSeoSchemaModel.php:1251
573
  msgid "The publisher of the review."
574
  msgstr ""
575
 
576
- #: ../lib/models/KcSeoSchemaModel.php:1257
577
  msgid "Aggregate Ratings"
578
  msgstr ""
579
 
580
- #: ../lib/models/KcSeoSchemaModel.php:1263
581
  msgid "Schema type"
582
  msgstr ""
583
 
584
- #: ../lib/models/KcSeoSchemaModel.php:1268
585
  msgid "Use the most appropriate schema type for what is being reviewed."
586
  msgstr ""
587
 
588
- #: ../lib/models/KcSeoSchemaModel.php:1271
589
  msgid "Name of the item"
590
  msgstr ""
591
 
592
- #: ../lib/models/KcSeoSchemaModel.php:1274
593
  msgid "The item that is being rated."
594
  msgstr ""
595
 
596
- #: ../lib/models/KcSeoSchemaModel.php:1286, ../lib/models/KcSeoSchemaModel.php:1423, ../lib/views/schema-options.php:118
 
597
  msgid "The price range of the business, for example $$$."
598
  msgstr ""
599
 
600
- #: ../lib/models/KcSeoSchemaModel.php:1301
601
  msgid "Description for thr review"
602
  msgstr ""
603
 
604
- #: ../lib/models/KcSeoSchemaModel.php:1304
605
  msgid "Rating Count"
606
  msgstr ""
607
 
608
- #: ../lib/models/KcSeoSchemaModel.php:1308
609
- msgid "The total number of ratings for the item on your site. <span class='required'>* At least one of ratingCount or reviewCount is required.</span>"
 
 
 
610
  msgstr ""
611
 
612
- #: ../lib/models/KcSeoSchemaModel.php:1311
613
  msgid "Review Count"
614
  msgstr ""
615
 
616
- #: ../lib/models/KcSeoSchemaModel.php:1315
617
- msgid "Specifies the number of people who provided a review with or without an accompanying rating. At least one of ratingCount or reviewCount is required."
 
 
618
  msgstr ""
619
 
620
- #: ../lib/models/KcSeoSchemaModel.php:1318, ../lib/models/KcSeoSchemaModel.php:1325
621
  msgid "Rating Value"
622
  msgstr ""
623
 
624
- #: ../lib/models/KcSeoSchemaModel.php:1332
625
  msgid "Best Rating"
626
  msgstr ""
627
 
628
- #: ../lib/models/KcSeoSchemaModel.php:1336
629
- msgid "The highest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If bestRating is omitted, 5 is assumed."
 
 
 
630
  msgstr ""
631
 
632
- #: ../lib/models/KcSeoSchemaModel.php:1339
633
  msgid "Worst Rating"
634
  msgstr ""
635
 
636
- #: ../lib/models/KcSeoSchemaModel.php:1343
637
- msgid "The lowest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If worstRating is omitted, 1 is assumed."
 
 
 
638
  msgstr ""
639
 
640
- #: ../lib/models/KcSeoSchemaModel.php:1349
641
  msgid "Restaurant"
642
  msgstr ""
643
 
644
- #: ../lib/models/KcSeoSchemaModel.php:1355
645
  msgid "Name of the Restaurant"
646
  msgstr ""
647
 
648
- #: ../lib/models/KcSeoSchemaModel.php:1360
649
  msgid "Description of the Restaurant"
650
  msgstr ""
651
 
652
- #: ../lib/models/KcSeoSchemaModel.php:1364, ../lib/models/KcSeoSchemaModel.php:1369
653
  msgid "Opening Hours"
654
  msgstr ""
655
 
656
- #: ../lib/models/KcSeoSchemaModel.php:1366
657
  msgid "Mo,Tu,We,Th,Fr,Sa,Su 11:30-23:00"
658
  msgstr ""
659
 
660
- #: ../lib/models/KcSeoSchemaModel.php:1371
 
 
 
 
661
  msgid "+155501003333"
662
  msgstr ""
663
 
664
- #: ../lib/models/KcSeoSchemaModel.php:1374
665
  msgid "Menu"
666
  msgstr ""
667
 
668
- #: ../lib/models/KcSeoSchemaModel.php:1376
669
  msgid "http://example.com/menu"
670
  msgstr ""
671
 
672
- #: ../lib/models/KcSeoSchemaModel.php:1384, ../lib/views/schema-options.php:270
673
  msgid "Address"
674
  msgstr ""
675
 
676
- #: ../lib/models/KcSeoSchemaModel.php:1388, ../lib/views/schema-options.php:113
 
677
  msgid "Price Range"
678
  msgstr ""
679
 
680
- #: ../lib/models/KcSeoSchemaModel.php:1390
681
  msgid "The price range of the business, for example $$$"
682
  msgstr ""
683
 
684
- #: ../lib/models/KcSeoSchemaModel.php:1393
685
  msgid "Serves Cuisine"
686
  msgstr ""
687
 
688
- #: ../lib/models/KcSeoSchemaModel.php:1395, ../lib/views/schema-options.php:159
689
  msgid "The cuisine of the restaurant."
690
  msgstr ""
691
 
692
- #: ../lib/models/KcSeoSchemaModel.php:1401
693
  msgid "Local Business"
694
  msgstr ""
695
 
696
- #: ../lib/models/KcSeoSchemaModel.php:1416
697
  msgid "Business Logo"
698
  msgstr ""
699
 
700
- #: ../lib/models/KcSeoSchemaModel.php:1421
701
- msgid "Price Range (Recommended)"
702
- msgstr ""
703
-
704
- #: ../lib/models/KcSeoSchemaModel.php:1426
705
  msgid "Address locality"
706
  msgstr ""
707
 
708
- #: ../lib/models/KcSeoSchemaModel.php:1428
709
  msgid "City (i.e Kansas city)"
710
  msgstr ""
711
 
712
- #: ../lib/models/KcSeoSchemaModel.php:1431
713
  msgid "Address region"
714
  msgstr ""
715
 
716
- #: ../lib/models/KcSeoSchemaModel.php:1433
717
  msgid "State (i.e. MO)"
718
  msgstr ""
719
 
720
- #: ../lib/models/KcSeoSchemaModel.php:1436
721
  msgid "Postal code"
722
  msgstr ""
723
 
724
- #: ../lib/models/KcSeoSchemaModel.php:1440
725
  msgid "Street address"
726
  msgstr ""
727
 
728
- #: ../lib/models/KcSeoSchemaModel.php:1444
729
- msgid "Telephone (Recommended)"
730
- msgstr ""
731
-
732
- #: ../lib/models/KcSeoSchemaModel.php:1451
733
  msgid "Book"
734
  msgstr ""
735
 
736
- #: ../lib/models/KcSeoSchemaModel.php:1455
737
  msgid "Course"
738
  msgstr ""
739
 
740
- #: ../lib/models/KcSeoSchemaModel.php:1459
741
  msgid "Job Posting"
742
  msgstr ""
743
 
744
- #: ../lib/models/KcSeoSchemaModel.php:1463
745
  msgid "Movie"
746
  msgstr ""
747
 
748
- #: ../lib/models/KcSeoSchemaModel.php:1475
749
  msgid "TVEpisode"
750
  msgstr ""
751
 
752
- #: ../lib/views/schema-options.php:13
753
- msgid "General settings for WP SEO Structured Data Schema by <a href=\"https://wpsemplugins.com/\">WPSEMPlugins.com</a>"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
754
  msgstr ""
755
 
756
- #: ../lib/views/schema-options.php:35
757
  msgid "Site Type"
758
  msgstr ""
759
 
760
- #: ../lib/views/schema-options.php:38
761
  msgid "Select one type"
762
  msgstr ""
763
 
764
- #: ../lib/views/schema-options.php:78
765
  msgid "Organization or Business name"
766
  msgstr ""
767
 
768
- #: ../lib/views/schema-options.php:85
769
  msgid "Site Image"
770
  msgstr ""
771
 
772
- #: ../lib/views/schema-options.php:122
773
  msgid "Site Telephone"
774
  msgstr ""
775
 
776
- #: ../lib/views/schema-options.php:127
777
  msgid "The telephone number."
778
  msgstr ""
779
 
780
- #: ../lib/views/schema-options.php:131
781
  msgid "Additional Type"
782
  msgstr ""
783
 
784
- #: ../lib/views/schema-options.php:138
785
  msgid "Add \"Additional Type\""
786
  msgstr ""
787
 
788
- #: ../lib/views/schema-options.php:142
789
  msgid ""
790
- "Product Ontology is an extension to schema using WikiPedia definitions that enables you to further define a type by adding an \"AdditionalType” attribute.Example for a Tailor (which is not available\n"
791
- " as a schema “Type”): Pick LocalBusiness as a generic Type, then add additional type as follows:"
 
 
 
792
  msgstr ""
793
 
794
- #: ../lib/views/schema-options.php:156
795
  msgid "Restaurant Information"
796
  msgstr ""
797
 
798
- #: ../lib/views/schema-options.php:167
799
  msgid "Others local business info"
800
  msgstr ""
801
 
802
- #: ../lib/views/schema-options.php:177
803
  msgid "Operation Hours"
804
  msgstr ""
805
 
806
- #: ../lib/views/schema-options.php:204
807
  msgid "GeoCoordinates"
808
  msgstr ""
809
 
810
- #: ../lib/views/schema-options.php:207
811
  msgid "Latitude"
812
  msgstr ""
813
 
814
- #: ../lib/views/schema-options.php:214
815
  msgid "Longitude"
816
  msgstr ""
817
 
818
- #: ../lib/views/schema-options.php:221
819
  msgid "Person"
820
  msgstr ""
821
 
822
- #: ../lib/views/schema-options.php:231
823
  msgid "Work For"
824
  msgstr ""
825
 
826
- #: ../lib/views/schema-options.php:239
827
  msgid "Job Title"
828
  msgstr ""
829
 
830
- #: ../lib/views/schema-options.php:251
831
  msgid "Add your personal photo here"
832
  msgstr ""
833
 
834
- #: ../lib/views/schema-options.php:262
835
  msgid "Birth date"
836
  msgstr ""
837
 
838
- #: ../lib/views/schema-options.php:273
839
  msgid "Address Country"
840
  msgstr ""
841
 
842
- #: ../lib/views/schema-options.php:288
843
  msgid "Address Locality"
844
  msgstr ""
845
 
846
- #: ../lib/views/schema-options.php:295
847
  msgid "Address Region"
848
  msgstr ""
849
 
850
- #: ../lib/views/schema-options.php:302
851
  msgid "Postal Code"
852
  msgstr ""
853
 
854
- #: ../lib/views/schema-options.php:308
855
  msgid "Street Address"
856
  msgstr ""
857
 
858
- #: ../lib/views/schema-options.php:317
859
  msgid "Add New Address"
860
  msgstr ""
861
 
862
- #: ../lib/views/schema-options.php:324
863
  msgid "Organization Logo"
864
  msgstr ""
865
 
866
- #: ../lib/views/schema-options.php:327, ../lib/views/schema-options.php:390
867
  msgid "Social Profile"
868
  msgstr ""
869
 
870
- #: ../lib/views/schema-options.php:330
871
  msgid "Corporate Contacts"
872
  msgstr ""
873
 
874
- #: ../lib/views/schema-options.php:336
875
  msgid "Select Organization Logo"
876
  msgstr ""
877
 
878
- #: ../lib/views/schema-options.php:380
879
  msgid "Company Name"
880
  msgstr ""
881
 
882
- #: ../lib/views/schema-options.php:387
883
  msgid "Social Profiles"
884
  msgstr ""
885
 
886
- #: ../lib/views/schema-options.php:416
887
  msgid "Add Social Profile"
888
  msgstr ""
889
 
890
- #: ../lib/views/schema-options.php:424
891
  msgid "Contacts"
892
  msgstr ""
893
 
894
- #: ../lib/views/schema-options.php:443
895
  msgid "Contact Phone"
896
  msgstr ""
897
 
898
- #: ../lib/views/schema-options.php:447
899
  msgid "Please follow the format below"
900
  msgstr ""
901
 
902
- #: ../lib/views/schema-options.php:458
903
  msgid "Contact Email"
904
  msgstr ""
905
 
906
- #: ../lib/views/schema-options.php:465
907
  msgid "Contact Option"
908
  msgstr ""
909
 
910
- #: ../lib/views/schema-options.php:469
911
  msgid "Select an option"
912
  msgstr ""
913
 
914
- #: ../lib/views/schema-options.php:472
915
  msgid "TollFree"
916
  msgstr ""
917
 
918
- #: ../lib/views/schema-options.php:476
919
  msgid "HearingImpairedSupported"
920
  msgstr ""
921
 
922
- #: ../lib/views/schema-options.php:482
923
  msgid "Area Served"
924
  msgstr ""
925
 
926
- #: ../lib/views/schema-options.php:500
927
  msgid "Available language"
928
  msgstr ""
929
 
930
- #: ../lib/views/schema-options.php:518
931
  msgid "Site Schema"
932
  msgstr ""
933
 
934
- #: ../lib/views/schema-options.php:521
935
  msgid "Disable Site Schema"
936
  msgstr ""
937
 
938
- #: ../lib/views/schema-options.php:529
939
  msgid "Enable Site link Search Box"
940
  msgstr ""
941
 
942
- #: ../lib/views/schema-options.php:534
943
  msgid "Note: Preferred Name markup may no longer be supported by Google"
944
  msgstr ""
945
 
946
- #: ../lib/views/schema-options.php:538
947
  msgid "Site Name:"
948
  msgstr ""
949
 
950
- #: ../lib/views/schema-options.php:545
951
  msgid "Site Alternative Name:"
952
  msgstr ""
953
 
954
- #: ../lib/views/schema-options.php:552
955
  msgid "Site Url:"
956
  msgstr ""
957
 
958
- #: ../lib/views/schema-options.php:560, ../lib/views/settings.php:105
959
  msgid "Save Changes"
960
  msgstr ""
961
 
962
- #: ../lib/views/settings.php:6
963
  msgid "Schema Settings"
964
  msgstr ""
965
 
966
- #: ../lib/views/settings.php:13
967
  msgid "Business / Org Schema"
968
  msgstr ""
969
 
970
- #: ../lib/views/settings.php:17
971
  msgid ""
972
  "Home page\n"
973
  " only"
974
  msgstr ""
975
 
976
- #: ../lib/views/settings.php:21
977
  msgid ""
978
  "Sitewide (Apply General Settings schema\n"
979
  " sitewide)"
980
  msgstr ""
981
 
982
- #: ../lib/views/settings.php:26
983
  msgid "Turn off (Turn off global schema)"
984
  msgstr ""
985
 
986
- #: ../lib/views/settings.php:93
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
987
  msgid "Delete all data"
988
  msgstr ""
989
 
990
- #: ../lib/views/settings.php:98
991
  msgid "Enable"
992
  msgstr ""
993
 
994
- #: ../lib/views/settings.php:99
995
  msgid ""
996
- "This will delete all schema created and applied by this plugin when plugin is\n"
 
997
  " deleted."
998
  msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #, fuzzy
 
2
  msgid ""
3
  msgstr ""
4
+ "Plural-Forms: nplurals=INTEGER; plural=EXPRESSION;\n"
5
  "Project-Id-Version: WP SEO Structured Data Schema\n"
6
+ "POT-Creation-Date: 2019-03-08 11:43+0600\n"
7
+ "PO-Revision-Date: 2019-03-08 11:43+0600\n"
8
+ "Last-Translator: \n"
9
+ "Language-Team: \n"
10
  "MIME-Version: 1.0\n"
11
  "Content-Type: text/plain; charset=UTF-8\n"
12
  "Content-Transfer-Encoding: 8bit\n"
13
+ "X-Generator: Poedit 1.8.7\n"
14
  "X-Poedit-Basepath: ..\n"
15
+ "X-Poedit-WPHeader: wp-seo-structured-data-schema.php\n"
16
+ "X-Poedit-SourceCharset: UTF-8\n"
17
+ "X-Poedit-KeywordsList: __;_e;_n:1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;esc_attr__;"
18
+ "esc_attr_e;esc_attr_x:1,2c;esc_html__;esc_html_e;esc_html_x:1,2c;_n_noop:1,2;"
19
+ "_nx_noop:3c,1,2;__ngettext_noop:1,2\n"
20
  "X-Poedit-SearchPath-0: .\n"
21
  "X-Poedit-SearchPathExcluded-0: *.js\n"
 
 
22
 
23
+ #: lib/classes/KcSeoHelper.php:189
24
  msgid "Pro Version Features"
25
  msgstr ""
26
 
27
+ #: lib/classes/KcSeoHelper.php:191
28
  msgid "Includes Auto-fill function <---Popular"
29
  msgstr ""
30
 
31
+ #: lib/classes/KcSeoHelper.php:192
32
  msgid "Supports Custom Post Types beyond default page and posts"
33
  msgstr ""
34
 
35
+ #: lib/classes/KcSeoHelper.php:193
36
  msgid "Supports WordPress Multisite"
37
  msgstr ""
38
 
39
+ #: lib/classes/KcSeoHelper.php:194
40
  msgid "Supports more schema types:"
41
  msgstr ""
42
 
43
+ #: lib/classes/KcSeoHelper.php:196
44
  msgid "Books"
45
  msgstr ""
46
 
47
+ #: lib/classes/KcSeoHelper.php:197
48
  msgid "Courses"
49
  msgstr ""
50
 
51
+ #: lib/classes/KcSeoHelper.php:198
52
  msgid "Job Postings"
53
  msgstr ""
54
 
55
+ #: lib/classes/KcSeoHelper.php:199
56
  msgid "Movies"
57
  msgstr ""
58
 
59
+ #: lib/classes/KcSeoHelper.php:200 lib/functions/KcSeoOptions.php:851
60
  msgid "Music"
61
  msgstr ""
62
 
63
+ #: lib/classes/KcSeoHelper.php:201 lib/functions/KcSeoOptions.php:855
64
  msgid "Recipe"
65
  msgstr ""
66
 
67
+ #: lib/classes/KcSeoHelper.php:202
68
  msgid "TV Episode"
69
  msgstr ""
70
 
71
+ #: lib/classes/KcSeoHelper.php:203 lib/functions/KcSeoOptions.php:863
72
  msgid "QAPage"
73
  msgstr ""
74
 
75
+ #: lib/classes/KcSeoHelper.php:204 lib/functions/KcSeoOptions.php:867
76
+ msgid "Item List"
77
+ msgstr ""
78
+
79
+ #: lib/classes/KcSeoHelper.php:210
80
  msgid "Get the Pro Version"
81
  msgstr ""
82
 
83
+ #: lib/classes/KcSeoInit.php:33
84
  msgid "Documentation"
85
  msgstr ""
86
 
87
+ #: lib/classes/KcSeoInit.php:34
88
  msgid "Get Pro"
89
  msgstr ""
90
 
91
+ #: lib/classes/KcSeoInit.php:151 lib/classes/KcSeoInit.php:173
92
+ msgid "Settings successfully updated"
93
+ msgstr ""
94
+
95
+ #: lib/classes/KcSeoInit.php:153 lib/classes/KcSeoInit.php:175
96
+ msgid "Security Error !!"
97
+ msgstr ""
98
+
99
+ #. Plugin Name of the plugin/theme
100
+ #: lib/classes/KcSeoInit.php:197 lib/views/schema-options.php:7
101
  msgid "WP SEO Structured Data Schema"
102
  msgstr ""
103
 
104
+ #: lib/classes/KcSeoInit.php:197
105
  msgid "WP SEO Schema"
106
  msgstr ""
107
 
108
+ #: lib/classes/KcSeoInit.php:199
109
  msgid "WP SEO Schema settings"
110
  msgstr ""
111
 
112
+ #: lib/classes/KcSeoInit.php:199
113
  msgid "Settings"
114
  msgstr ""
115
 
116
+ #: lib/classes/KcSeoMetaData.php:47
117
+ msgid ""
118
+ "WP SEO Structured Data Schema by <a href=\"https://wpsemplugins.com/"
119
+ "\">WPSEMPlugins.com</a>"
120
+ msgstr ""
121
+
122
+ #: lib/classes/KcSeoMetaData.php:64 lib/views/schema-options.php:26
123
+ msgid ""
124
+ "For more detailed information on how to configure this plugin, please visit:"
125
+ msgstr ""
126
+
127
+ #: lib/classes/KcSeoMetaData.php:65
128
+ msgid ""
129
+ "Once you save these structured data schema settings, validate this page url "
130
+ "here:"
131
+ msgstr ""
132
+
133
+ #: lib/classes/KcSeoMetaData.php:80
134
+ msgid "Auto Fill"
135
+ msgstr ""
136
+
137
+ #: lib/classes/KcSeoMetaData.php:80 lib/views/schema-options.php:318
138
+ #: lib/views/settings.php:32 lib/views/settings.php:50
139
+ #: lib/views/settings.php:75 lib/views/settings.php:84
140
+ msgid "PRO"
141
  msgstr ""
142
 
143
+ #: lib/classes/KcSeoMetaData.php:93
144
+ msgid "This is a Pro version feature."
145
  msgstr ""
146
 
147
+ #: lib/functions/KcSeoOptions.php:10
148
  msgid "Article"
149
  msgstr ""
150
 
151
+ #: lib/functions/KcSeoOptions.php:16 lib/functions/KcSeoOptions.php:90
152
+ #: lib/functions/KcSeoOptions.php:159
153
  msgid "Headline"
154
  msgstr ""
155
 
156
+ #: lib/functions/KcSeoOptions.php:18 lib/functions/KcSeoOptions.php:161
157
  msgid "Article title"
158
  msgstr ""
159
 
160
+ #: lib/functions/KcSeoOptions.php:22 lib/functions/KcSeoOptions.php:96
161
+ #: lib/functions/KcSeoOptions.php:165
162
  msgid "Page URL"
163
  msgstr ""
164
 
165
+ #: lib/functions/KcSeoOptions.php:24 lib/functions/KcSeoOptions.php:98
166
+ #: lib/functions/KcSeoOptions.php:167
167
  msgid "The canonical URL of the article page"
168
  msgstr ""
169
 
170
+ #: lib/functions/KcSeoOptions.php:28
171
  msgid "Author Name"
172
  msgstr ""
173
 
174
+ #: lib/functions/KcSeoOptions.php:30 lib/functions/KcSeoOptions.php:104
175
+ #: lib/functions/KcSeoOptions.php:173
176
  msgid "Author display name"
177
  msgstr ""
178
 
179
+ #: lib/functions/KcSeoOptions.php:34
180
  msgid "Article Feature Image"
181
  msgstr ""
182
 
183
+ #: lib/functions/KcSeoOptions.php:37
184
+ msgid ""
185
+ "Images should be at least 696 pixels wide.<br>Images should be in .jpg, ."
186
+ "png, or. gif format."
187
  msgstr ""
188
 
189
+ #: lib/functions/KcSeoOptions.php:40 lib/functions/KcSeoOptions.php:114
190
+ #: lib/functions/KcSeoOptions.php:183
191
  msgid "Published date"
192
  msgstr ""
193
 
194
+ #: lib/functions/KcSeoOptions.php:44 lib/functions/KcSeoOptions.php:51
195
+ #: lib/functions/KcSeoOptions.php:117 lib/functions/KcSeoOptions.php:124
196
+ #: lib/functions/KcSeoOptions.php:186 lib/functions/KcSeoOptions.php:194
197
+ #: lib/functions/KcSeoOptions.php:490 lib/functions/KcSeoOptions.php:607
198
  msgid "Like this: 2015-12-25"
199
  msgstr ""
200
 
201
+ #: lib/functions/KcSeoOptions.php:47 lib/functions/KcSeoOptions.php:121
202
+ #: lib/functions/KcSeoOptions.php:190
203
  msgid "Modified date"
204
  msgstr ""
205
 
206
+ #: lib/functions/KcSeoOptions.php:54 lib/functions/KcSeoOptions.php:128
207
+ #: lib/functions/KcSeoOptions.php:197
208
  msgid "Publisher"
209
  msgstr ""
210
 
211
+ #: lib/functions/KcSeoOptions.php:56 lib/functions/KcSeoOptions.php:130
212
+ #: lib/functions/KcSeoOptions.php:199
213
  msgid "Publisher name or Organization name"
214
  msgstr ""
215
 
216
+ #: lib/functions/KcSeoOptions.php:60 lib/functions/KcSeoOptions.php:134
217
+ #: lib/functions/KcSeoOptions.php:203 lib/views/settings.php:83
218
  msgid "Publisher Logo"
219
  msgstr ""
220
 
221
+ #: lib/functions/KcSeoOptions.php:62 lib/functions/KcSeoOptions.php:136
222
+ #: lib/functions/KcSeoOptions.php:205
223
+ msgid ""
224
+ "Logos should have a wide aspect ratio, not a square icon.<br>Logos should be "
225
+ "no wider than 600px, and no taller than 60px.<br>Always retain the original "
226
+ "aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall "
227
+ "with width <= 600px. If maintaining a height of 60px would cause the width "
228
+ "to exceed 600px, downscale the logo to exactly 600px wide and reduce the "
229
+ "height accordingly below 60px to maintain the original aspect ratio.<br>"
230
+ msgstr ""
231
+
232
+ #: lib/functions/KcSeoOptions.php:66 lib/functions/KcSeoOptions.php:140
233
+ #: lib/functions/KcSeoOptions.php:209 lib/functions/KcSeoOptions.php:260
234
+ #: lib/functions/KcSeoOptions.php:335 lib/functions/KcSeoOptions.php:446
235
+ #: lib/functions/KcSeoOptions.php:681 lib/functions/KcSeoOptions.php:794
236
+ #: lib/views/schema-options.php:170 lib/views/schema-options.php:255
237
  msgid "Description"
238
  msgstr ""
239
 
240
+ #: lib/functions/KcSeoOptions.php:68 lib/functions/KcSeoOptions.php:142
241
+ #: lib/functions/KcSeoOptions.php:211
242
  msgid "Short description"
243
  msgstr ""
244
 
245
+ #: lib/functions/KcSeoOptions.php:71 lib/functions/KcSeoOptions.php:145
246
+ #: lib/functions/KcSeoOptions.php:214
247
  msgid "Article body"
248
  msgstr ""
249
 
250
+ #: lib/functions/KcSeoOptions.php:73 lib/functions/KcSeoOptions.php:147
251
  msgid "Article content"
252
  msgstr ""
253
 
254
+ #: lib/functions/KcSeoOptions.php:76
255
  msgid "Alternative headline"
256
  msgstr ""
257
 
258
+ #: lib/functions/KcSeoOptions.php:78
259
  msgid "A secondary headline for the article."
260
  msgstr ""
261
 
262
+ #: lib/functions/KcSeoOptions.php:84
263
  msgid "Blog Posting"
264
  msgstr ""
265
 
266
+ #: lib/functions/KcSeoOptions.php:92
267
  msgid "Blog posting title"
268
  msgstr ""
269
 
270
+ #: lib/functions/KcSeoOptions.php:102
271
  msgid "Author name"
272
  msgstr ""
273
 
274
+ #: lib/functions/KcSeoOptions.php:108
275
  msgid "Feature Image"
276
  msgstr ""
277
 
278
+ #: lib/functions/KcSeoOptions.php:110 lib/functions/KcSeoOptions.php:179
279
+ msgid ""
280
+ "The representative image of the article. Only a marked-up image that "
281
+ "directly belongs to the article should be specified.<br> Images should be at "
282
+ "least 696 pixels wide. <br>Images should be in .jpg, .png, or. gif format."
283
  msgstr ""
284
 
285
+ #: lib/functions/KcSeoOptions.php:153
286
  msgid "News Article"
287
  msgstr ""
288
 
289
+ #: lib/functions/KcSeoOptions.php:171 lib/functions/KcSeoOptions.php:597
290
  msgid "Author"
291
  msgstr ""
292
 
293
+ #: lib/functions/KcSeoOptions.php:177 lib/functions/KcSeoOptions.php:330
294
+ #: lib/functions/KcSeoOptions.php:761 lib/views/schema-options.php:247
295
  msgid "Image"
296
  msgstr ""
297
 
298
+ #: lib/functions/KcSeoOptions.php:216
299
  msgid "Article body content"
300
  msgstr ""
301
 
302
+ #: lib/functions/KcSeoOptions.php:222
303
  msgid "Event"
304
  msgstr ""
305
 
306
+ #: lib/functions/KcSeoOptions.php:228 lib/functions/KcSeoOptions.php:324
307
+ #: lib/functions/KcSeoOptions.php:440 lib/functions/KcSeoOptions.php:502
308
+ #: lib/functions/KcSeoOptions.php:789 lib/views/schema-options.php:224
309
  msgid "Name"
310
  msgstr ""
311
 
312
+ #: lib/functions/KcSeoOptions.php:231
313
  msgid "The name of the event."
314
  msgstr ""
315
 
316
+ #: lib/functions/KcSeoOptions.php:234
317
  msgid "Location name"
318
  msgstr ""
319
 
320
+ #: lib/functions/KcSeoOptions.php:237
321
  msgid "Event Location name"
322
  msgstr ""
323
 
324
+ #: lib/functions/KcSeoOptions.php:240
325
  msgid "Location address"
326
  msgstr ""
327
 
328
+ #: lib/functions/KcSeoOptions.php:243
329
+ msgid ""
330
+ "The location of for example where the event is happening, an organization is "
331
+ "located, or where an action takes place."
332
  msgstr ""
333
 
334
+ #: lib/functions/KcSeoOptions.php:246
335
  msgid "Start date"
336
  msgstr ""
337
 
338
+ #: lib/functions/KcSeoOptions.php:250
339
  msgid "Event start date"
340
  msgstr ""
341
 
342
+ #: lib/functions/KcSeoOptions.php:253
343
+ msgid "End date"
344
  msgstr ""
345
 
346
+ #: lib/functions/KcSeoOptions.php:257
347
  msgid "Event end date"
348
  msgstr ""
349
 
350
+ #: lib/functions/KcSeoOptions.php:263
 
 
 
 
351
  msgid "Event description"
352
  msgstr ""
353
 
354
+ #: lib/functions/KcSeoOptions.php:266
355
+ msgid "Performer Name"
356
  msgstr ""
357
 
358
+ #: lib/functions/KcSeoOptions.php:269
359
  msgid "The performer's name."
360
  msgstr ""
361
 
362
+ #: lib/functions/KcSeoOptions.php:272
363
+ msgid "Image URL"
364
  msgstr ""
365
 
366
+ #: lib/functions/KcSeoOptions.php:275
367
  msgid "URL of an image or logo for the event or tour"
368
  msgstr ""
369
 
370
+ #: lib/functions/KcSeoOptions.php:278 lib/functions/KcSeoOptions.php:380
371
+ msgid "Price"
372
  msgstr ""
373
 
374
+ #: lib/functions/KcSeoOptions.php:282
375
+ msgid ""
376
+ "This is highly recommended. The lowest available price, including service "
377
+ "charges and fees, of this type of ticket. <span class='required'>Not "
378
+ "required but (Recommended)</span>"
379
  msgstr ""
380
 
381
+ #: lib/functions/KcSeoOptions.php:285 lib/functions/KcSeoOptions.php:393
382
  msgid "Price currency"
383
  msgstr ""
384
 
385
+ #: lib/functions/KcSeoOptions.php:287
386
  msgid "The 3-letter currency code. (USD)"
387
  msgstr ""
388
 
389
+ #: lib/functions/KcSeoOptions.php:301
390
+ msgid "Valid From"
391
+ msgstr ""
392
+
393
+ #: lib/functions/KcSeoOptions.php:312
394
+ msgid ""
395
+ "A link to the event's details page. <span class='required'>Not required but "
396
+ "(Recommended)</span>"
397
  msgstr ""
398
 
399
+ #: lib/functions/KcSeoOptions.php:318
400
  msgid "Product"
401
  msgstr ""
402
 
403
+ #: lib/functions/KcSeoOptions.php:327
404
  msgid "The name of the product."
405
  msgstr ""
406
 
407
+ #: lib/functions/KcSeoOptions.php:332
408
+ msgid ""
409
+ "The URL of a product photo. Pictures clearly showing the product, e.g. "
410
+ "against a white background, are preferred."
411
  msgstr ""
412
 
413
+ #: lib/functions/KcSeoOptions.php:337
414
  msgid "Product description."
415
  msgstr ""
416
 
417
+ #: lib/functions/KcSeoOptions.php:340
418
  msgid "Brand"
419
  msgstr ""
420
 
421
+ #: lib/functions/KcSeoOptions.php:342
422
  msgid "The brand of the product."
423
  msgstr ""
424
 
425
+ #: lib/functions/KcSeoOptions.php:345
426
+ msgid "Review rating value"
427
  msgstr ""
428
 
429
+ #: lib/functions/KcSeoOptions.php:349 lib/functions/KcSeoOptions.php:371
430
  msgid "Rating value. (1 , 2.5, 3, 5 etc)"
431
  msgstr ""
432
 
433
+ #: lib/functions/KcSeoOptions.php:352
434
+ msgid "Review Best rating"
435
+ msgstr ""
436
+
437
+ #: lib/functions/KcSeoOptions.php:358
438
+ msgid "Review Worst rating"
439
+ msgstr ""
440
+
441
+ #: lib/functions/KcSeoOptions.php:364
442
+ msgid "Review author"
443
+ msgstr ""
444
+
445
+ #: lib/functions/KcSeoOptions.php:368 lib/functions/KcSeoOptions.php:610
446
+ msgid "Rating value"
447
+ msgstr ""
448
+
449
+ #: lib/functions/KcSeoOptions.php:374
450
  msgid "Total review count"
451
  msgstr ""
452
 
453
+ #: lib/functions/KcSeoOptions.php:377
454
+ msgid ""
455
+ "Review rating value. <span class='required'>This is required if (Rating "
456
+ "value) is given</span>"
457
  msgstr ""
458
 
459
+ #: lib/functions/KcSeoOptions.php:383
460
+ msgid ""
461
+ "The lowest available price, including service charges and fees, of this type "
462
+ "of ticket."
463
  msgstr ""
464
 
465
+ #: lib/functions/KcSeoOptions.php:386
466
+ msgid "PriceValidUntil"
467
  msgstr ""
468
 
469
+ #: lib/functions/KcSeoOptions.php:390
470
+ msgid ""
471
+ "The date (in ISO 8601 date format) after which the price will no longer be "
472
+ "available."
473
+ msgstr ""
474
+
475
+ #: lib/functions/KcSeoOptions.php:395
476
  msgid "The 3-letter currency code."
477
  msgstr ""
478
 
479
+ #: lib/functions/KcSeoOptions.php:411
480
  msgid "Select a availability type"
481
  msgstr ""
482
 
483
+ #: lib/functions/KcSeoOptions.php:423
484
  msgid "Select a condition"
485
  msgstr ""
486
 
487
+ #: lib/functions/KcSeoOptions.php:426
488
  msgid "Product URL"
489
  msgstr ""
490
 
491
+ #: lib/functions/KcSeoOptions.php:428
492
+ msgid ""
493
+ "A URL to the product web page (that includes the Offer). (Don't use offerURL "
494
+ "for markup that appears on the product page itself.)"
495
  msgstr ""
496
 
497
+ #: lib/functions/KcSeoOptions.php:434
498
  msgid "Video"
499
  msgstr ""
500
 
501
+ #: lib/functions/KcSeoOptions.php:443
502
  msgid "The title of the video"
503
  msgstr ""
504
 
505
+ #: lib/functions/KcSeoOptions.php:449
506
  msgid "The description of the video"
507
  msgstr ""
508
 
509
+ #: lib/functions/KcSeoOptions.php:456
510
+ msgid ""
511
+ "A URL pointing to the video thumbnail image file. Images must be at least "
512
+ "160x90 pixels and at most 1920x1080 pixels."
513
  msgstr ""
514
 
515
+ #: lib/functions/KcSeoOptions.php:459
516
  msgid "Updated date"
517
  msgstr ""
518
 
519
+ #: lib/functions/KcSeoOptions.php:462
520
  msgid "2015-02-05T08:00:00+08:00"
521
  msgstr ""
522
 
523
+ #: lib/functions/KcSeoOptions.php:465
524
  msgid "Duration"
525
  msgstr ""
526
 
527
+ #: lib/functions/KcSeoOptions.php:467
528
  msgid "The duration of the video in ISO 8601 format.(PT1M33S)"
529
  msgstr ""
530
 
531
+ #: lib/functions/KcSeoOptions.php:473
532
+ msgid ""
533
+ "A URL pointing to the actual video media file. This file should be in .mpg, ."
534
+ "mpeg, .mp4, .m4v, .mov, .wmv, .asf, .avi, .ra, .ram, .rm, .flv, or other "
535
+ "video file format."
536
  msgstr ""
537
 
538
+ #: lib/functions/KcSeoOptions.php:479
539
+ msgid ""
540
+ "A URL pointing to a player for the specific video. Usually this is the "
541
+ "information in the src element of an < embed> tag.Example: Dailymotion: "
542
+ "http://www.dailymotion.com/swf/x1o2g."
543
  msgstr ""
544
 
545
+ #: lib/functions/KcSeoOptions.php:482
546
  msgid "Interaction count"
547
  msgstr ""
548
 
549
+ #: lib/functions/KcSeoOptions.php:484
550
  msgid "The number of times the video has been viewed."
551
  msgstr ""
552
 
553
+ #: lib/functions/KcSeoOptions.php:487
554
  msgid "Expires"
555
  msgstr ""
556
 
557
+ #: lib/functions/KcSeoOptions.php:496
558
  msgid "Service"
559
  msgstr ""
560
 
561
+ #: lib/functions/KcSeoOptions.php:505
562
  msgid "The name of the Service."
563
  msgstr ""
564
 
565
+ #: lib/functions/KcSeoOptions.php:508
566
  msgid "Service type"
567
  msgstr ""
568
 
569
+ #: lib/functions/KcSeoOptions.php:511
570
+ msgid ""
571
+ "The type of service being offered, e.g. veterans' benefits, emergency "
572
+ "relief, etc."
573
  msgstr ""
574
 
575
+ #: lib/functions/KcSeoOptions.php:517
576
+ msgid ""
577
+ "An additional type for the service, typically used for adding more specific "
578
+ "types from external vocabularies in microdata syntax."
579
  msgstr ""
580
 
581
+ #: lib/functions/KcSeoOptions.php:520
582
  msgid "Award"
583
  msgstr ""
584
 
585
+ #: lib/functions/KcSeoOptions.php:522
586
  msgid "An award won by or for this service."
587
  msgstr ""
588
 
589
+ #: lib/functions/KcSeoOptions.php:525
590
  msgid "Category"
591
  msgstr ""
592
 
593
+ #: lib/functions/KcSeoOptions.php:527
594
  msgid "A category for the service."
595
  msgstr ""
596
 
597
+ #: lib/functions/KcSeoOptions.php:530
598
  msgid "Provider mobility"
599
  msgstr ""
600
 
601
+ #: lib/functions/KcSeoOptions.php:532
602
+ msgid ""
603
+ "Indicates the mobility of a provided service (e.g. 'static', 'dynamic')."
604
  msgstr ""
605
 
606
+ #: lib/functions/KcSeoOptions.php:538
607
  msgid "A short description of the service."
608
  msgstr ""
609
 
610
+ #: lib/functions/KcSeoOptions.php:544
611
  msgid "An image of the service. This should be a URL."
612
  msgstr ""
613
 
614
+ #: lib/functions/KcSeoOptions.php:550
615
+ msgid ""
616
+ "Indicates a page (or other CreativeWork) for which this thing is the main "
617
+ "entity being described."
618
  msgstr ""
619
 
620
+ #: lib/functions/KcSeoOptions.php:556
621
+ msgid ""
622
+ "URL of a reference Web page that unambiguously indicates the service's "
623
+ "identity. E.g. the URL of the service's Wikipedia page, Freebase page, or "
624
+ "official website."
625
  msgstr ""
626
 
627
+ #: lib/functions/KcSeoOptions.php:562
628
  msgid "URL of the service."
629
  msgstr ""
630
 
631
+ #: lib/functions/KcSeoOptions.php:565
632
  msgid "Alternate name"
633
  msgstr ""
634
 
635
+ #: lib/functions/KcSeoOptions.php:567
636
  msgid "An alias for the service."
637
  msgstr ""
638
 
639
+ #: lib/functions/KcSeoOptions.php:573
640
  msgid "Review"
641
  msgstr ""
642
 
643
+ #: lib/functions/KcSeoOptions.php:579
644
  msgid "Name of the reviewed item"
645
  msgstr ""
646
 
647
+ #: lib/functions/KcSeoOptions.php:582
648
  msgid "The item that is being reviewed."
649
  msgstr ""
650
 
651
+ #: lib/functions/KcSeoOptions.php:585
652
  msgid "Review body"
653
  msgstr ""
654
 
655
+ #: lib/functions/KcSeoOptions.php:588
656
  msgid "The actual body of the review."
657
  msgstr ""
658
 
659
+ #: lib/functions/KcSeoOptions.php:591
660
  msgid "Review name"
661
  msgstr ""
662
 
663
+ #: lib/functions/KcSeoOptions.php:594
664
  msgid "A particular name for the review."
665
  msgstr ""
666
 
667
+ #: lib/functions/KcSeoOptions.php:601
668
  msgid "The author of the review. The reviewer’s name needs to be a valid name."
669
  msgstr ""
670
 
671
+ #: lib/functions/KcSeoOptions.php:604
672
  msgid "Date of Published"
673
  msgstr ""
674
 
675
+ #: lib/functions/KcSeoOptions.php:613 lib/functions/KcSeoOptions.php:704
676
+ #: lib/functions/KcSeoOptions.php:711
 
 
 
677
  msgid "A numerical quality rating for the item."
678
  msgstr ""
679
 
680
+ #: lib/functions/KcSeoOptions.php:616
681
  msgid "Best rating"
682
  msgstr ""
683
 
684
+ #: lib/functions/KcSeoOptions.php:619
685
  msgid "The highest value allowed in this rating system."
686
  msgstr ""
687
 
688
+ #: lib/functions/KcSeoOptions.php:622
689
  msgid "Worst rating"
690
  msgstr ""
691
 
692
+ #: lib/functions/KcSeoOptions.php:625
693
+ msgid ""
694
+ "The lowest value allowed in this rating system. * Required if the rating "
695
+ "system is not on a 5-point scale. If worstRating is omitted, 1 is assumed."
696
  msgstr ""
697
 
698
+ #: lib/functions/KcSeoOptions.php:628
699
  msgid "Name of the organization"
700
  msgstr ""
701
 
702
+ #: lib/functions/KcSeoOptions.php:630
703
  msgid "The publisher of the review."
704
  msgstr ""
705
 
706
+ #: lib/functions/KcSeoOptions.php:636
707
  msgid "Aggregate Ratings"
708
  msgstr ""
709
 
710
+ #: lib/functions/KcSeoOptions.php:642
711
  msgid "Schema type"
712
  msgstr ""
713
 
714
+ #: lib/functions/KcSeoOptions.php:647
715
  msgid "Use the most appropriate schema type for what is being reviewed."
716
  msgstr ""
717
 
718
+ #: lib/functions/KcSeoOptions.php:650
719
  msgid "Name of the item"
720
  msgstr ""
721
 
722
+ #: lib/functions/KcSeoOptions.php:653
723
  msgid "The item that is being rated."
724
  msgstr ""
725
 
726
+ #: lib/functions/KcSeoOptions.php:666 lib/functions/KcSeoOptions.php:806
727
+ #: lib/views/schema-options.php:118
728
  msgid "The price range of the business, for example $$$."
729
  msgstr ""
730
 
731
+ #: lib/functions/KcSeoOptions.php:683
732
  msgid "Description for thr review"
733
  msgstr ""
734
 
735
+ #: lib/functions/KcSeoOptions.php:686
736
  msgid "Rating Count"
737
  msgstr ""
738
 
739
+ #: lib/functions/KcSeoOptions.php:690
740
+ msgid ""
741
+ "The total number of ratings for the item on your site. <span "
742
+ "class='required'>* At least one of ratingCount or reviewCount is required.</"
743
+ "span>"
744
  msgstr ""
745
 
746
+ #: lib/functions/KcSeoOptions.php:693
747
  msgid "Review Count"
748
  msgstr ""
749
 
750
+ #: lib/functions/KcSeoOptions.php:697
751
+ msgid ""
752
+ "Specifies the number of people who provided a review with or without an "
753
+ "accompanying rating. At least one of ratingCount or reviewCount is required."
754
  msgstr ""
755
 
756
+ #: lib/functions/KcSeoOptions.php:700 lib/functions/KcSeoOptions.php:707
757
  msgid "Rating Value"
758
  msgstr ""
759
 
760
+ #: lib/functions/KcSeoOptions.php:714
761
  msgid "Best Rating"
762
  msgstr ""
763
 
764
+ #: lib/functions/KcSeoOptions.php:718
765
+ msgid ""
766
+ "The highest value allowed in this rating system. <span class='required'>* "
767
+ "Required if the rating system is not a 5-point scale.</span> If bestRating "
768
+ "is omitted, 5 is assumed."
769
  msgstr ""
770
 
771
+ #: lib/functions/KcSeoOptions.php:721
772
  msgid "Worst Rating"
773
  msgstr ""
774
 
775
+ #: lib/functions/KcSeoOptions.php:725
776
+ msgid ""
777
+ "The lowest value allowed in this rating system. <span class='required'>* "
778
+ "Required if the rating system is not a 5-point scale.</span> If worstRating "
779
+ "is omitted, 1 is assumed."
780
  msgstr ""
781
 
782
+ #: lib/functions/KcSeoOptions.php:731
783
  msgid "Restaurant"
784
  msgstr ""
785
 
786
+ #: lib/functions/KcSeoOptions.php:737
787
  msgid "Name of the Restaurant"
788
  msgstr ""
789
 
790
+ #: lib/functions/KcSeoOptions.php:742
791
  msgid "Description of the Restaurant"
792
  msgstr ""
793
 
794
+ #: lib/functions/KcSeoOptions.php:746
795
  msgid "Opening Hours"
796
  msgstr ""
797
 
798
+ #: lib/functions/KcSeoOptions.php:748
799
  msgid "Mo,Tu,We,Th,Fr,Sa,Su 11:30-23:00"
800
  msgstr ""
801
 
802
+ #: lib/functions/KcSeoOptions.php:751 lib/functions/KcSeoOptions.php:827
803
+ msgid "Telephone"
804
+ msgstr ""
805
+
806
+ #: lib/functions/KcSeoOptions.php:753
807
  msgid "+155501003333"
808
  msgstr ""
809
 
810
+ #: lib/functions/KcSeoOptions.php:756
811
  msgid "Menu"
812
  msgstr ""
813
 
814
+ #: lib/functions/KcSeoOptions.php:758
815
  msgid "http://example.com/menu"
816
  msgstr ""
817
 
818
+ #: lib/functions/KcSeoOptions.php:766 lib/views/schema-options.php:270
819
  msgid "Address"
820
  msgstr ""
821
 
822
+ #: lib/functions/KcSeoOptions.php:770 lib/functions/KcSeoOptions.php:803
823
+ #: lib/views/schema-options.php:113
824
  msgid "Price Range"
825
  msgstr ""
826
 
827
+ #: lib/functions/KcSeoOptions.php:772
828
  msgid "The price range of the business, for example $$$"
829
  msgstr ""
830
 
831
+ #: lib/functions/KcSeoOptions.php:775
832
  msgid "Serves Cuisine"
833
  msgstr ""
834
 
835
+ #: lib/functions/KcSeoOptions.php:777 lib/views/schema-options.php:159
836
  msgid "The cuisine of the restaurant."
837
  msgstr ""
838
 
839
+ #: lib/functions/KcSeoOptions.php:783
840
  msgid "Local Business"
841
  msgstr ""
842
 
843
+ #: lib/functions/KcSeoOptions.php:798
844
  msgid "Business Logo"
845
  msgstr ""
846
 
847
+ #: lib/functions/KcSeoOptions.php:809
 
 
 
 
848
  msgid "Address locality"
849
  msgstr ""
850
 
851
+ #: lib/functions/KcSeoOptions.php:811
852
  msgid "City (i.e Kansas city)"
853
  msgstr ""
854
 
855
+ #: lib/functions/KcSeoOptions.php:814
856
  msgid "Address region"
857
  msgstr ""
858
 
859
+ #: lib/functions/KcSeoOptions.php:816
860
  msgid "State (i.e. MO)"
861
  msgstr ""
862
 
863
+ #: lib/functions/KcSeoOptions.php:819
864
  msgid "Postal code"
865
  msgstr ""
866
 
867
+ #: lib/functions/KcSeoOptions.php:823
868
  msgid "Street address"
869
  msgstr ""
870
 
871
+ #: lib/functions/KcSeoOptions.php:835
 
 
 
 
872
  msgid "Book"
873
  msgstr ""
874
 
875
+ #: lib/functions/KcSeoOptions.php:839
876
  msgid "Course"
877
  msgstr ""
878
 
879
+ #: lib/functions/KcSeoOptions.php:843
880
  msgid "Job Posting"
881
  msgstr ""
882
 
883
+ #: lib/functions/KcSeoOptions.php:847
884
  msgid "Movie"
885
  msgstr ""
886
 
887
+ #: lib/functions/KcSeoOptions.php:859
888
  msgid "TVEpisode"
889
  msgstr ""
890
 
891
+ #: lib/functions/KcSeoOptions.php:1313 lib/functions/KcSeoOptions.php:1331
892
+ msgid "Facebook"
893
+ msgstr ""
894
+
895
+ #: lib/functions/KcSeoOptions.php:1314 lib/functions/KcSeoOptions.php:1332
896
+ msgid "Twitter"
897
+ msgstr ""
898
+
899
+ #: lib/functions/KcSeoOptions.php:1315 lib/functions/KcSeoOptions.php:1333
900
+ msgid "Google+"
901
+ msgstr ""
902
+
903
+ #: lib/functions/KcSeoOptions.php:1316 lib/functions/KcSeoOptions.php:1334
904
+ msgid "Instagram"
905
+ msgstr ""
906
+
907
+ #: lib/functions/KcSeoOptions.php:1317 lib/functions/KcSeoOptions.php:1335
908
+ msgid "Youtube"
909
+ msgstr ""
910
+
911
+ #: lib/functions/KcSeoOptions.php:1318 lib/functions/KcSeoOptions.php:1336
912
+ msgid "LinkedIn"
913
+ msgstr ""
914
+
915
+ #: lib/functions/KcSeoOptions.php:1319 lib/functions/KcSeoOptions.php:1337
916
+ msgid "Myspace"
917
+ msgstr ""
918
+
919
+ #: lib/functions/KcSeoOptions.php:1320 lib/functions/KcSeoOptions.php:1338
920
+ msgid "Pinterest"
921
+ msgstr ""
922
+
923
+ #: lib/functions/KcSeoOptions.php:1321 lib/functions/KcSeoOptions.php:1339
924
+ msgid "SoundCloud"
925
+ msgstr ""
926
+
927
+ #: lib/functions/KcSeoOptions.php:1322 lib/functions/KcSeoOptions.php:1340
928
+ msgid "Tumblr"
929
+ msgstr ""
930
+
931
+ #: lib/functions/KcSeoOptions.php:1323 lib/functions/KcSeoOptions.php:1341
932
+ msgid "Wikidata"
933
+ msgstr ""
934
+
935
+ #: lib/models/KcSeoSchemaModel.php:590
936
+ msgid "Required"
937
+ msgstr ""
938
+
939
+ #: lib/models/KcSeoSchemaModel.php:591
940
+ msgid "Recommended"
941
+ msgstr ""
942
+
943
+ #: lib/views/schema-options.php:13
944
+ msgid ""
945
+ "General settings for WP SEO Structured Data Schema by <a href=\"https://"
946
+ "wpsemplugins.com/\">WPSEMPlugins.com</a>"
947
  msgstr ""
948
 
949
+ #: lib/views/schema-options.php:35
950
  msgid "Site Type"
951
  msgstr ""
952
 
953
+ #: lib/views/schema-options.php:38
954
  msgid "Select one type"
955
  msgstr ""
956
 
957
+ #: lib/views/schema-options.php:78
958
  msgid "Organization or Business name"
959
  msgstr ""
960
 
961
+ #: lib/views/schema-options.php:85
962
  msgid "Site Image"
963
  msgstr ""
964
 
965
+ #: lib/views/schema-options.php:122
966
  msgid "Site Telephone"
967
  msgstr ""
968
 
969
+ #: lib/views/schema-options.php:127
970
  msgid "The telephone number."
971
  msgstr ""
972
 
973
+ #: lib/views/schema-options.php:131
974
  msgid "Additional Type"
975
  msgstr ""
976
 
977
+ #: lib/views/schema-options.php:138
978
  msgid "Add \"Additional Type\""
979
  msgstr ""
980
 
981
+ #: lib/views/schema-options.php:142
982
  msgid ""
983
+ "Product Ontology is an extension to schema using WikiPedia definitions that "
984
+ "enables you to further define a type by adding an \"AdditionalType” "
985
+ "attribute.Example for a Tailor (which is not available\n"
986
+ " as a schema “Type”): Pick "
987
+ "LocalBusiness as a generic Type, then add additional type as follows:"
988
  msgstr ""
989
 
990
+ #: lib/views/schema-options.php:156
991
  msgid "Restaurant Information"
992
  msgstr ""
993
 
994
+ #: lib/views/schema-options.php:167
995
  msgid "Others local business info"
996
  msgstr ""
997
 
998
+ #: lib/views/schema-options.php:177
999
  msgid "Operation Hours"
1000
  msgstr ""
1001
 
1002
+ #: lib/views/schema-options.php:204
1003
  msgid "GeoCoordinates"
1004
  msgstr ""
1005
 
1006
+ #: lib/views/schema-options.php:207
1007
  msgid "Latitude"
1008
  msgstr ""
1009
 
1010
+ #: lib/views/schema-options.php:214
1011
  msgid "Longitude"
1012
  msgstr ""
1013
 
1014
+ #: lib/views/schema-options.php:221
1015
  msgid "Person"
1016
  msgstr ""
1017
 
1018
+ #: lib/views/schema-options.php:231
1019
  msgid "Work For"
1020
  msgstr ""
1021
 
1022
+ #: lib/views/schema-options.php:239
1023
  msgid "Job Title"
1024
  msgstr ""
1025
 
1026
+ #: lib/views/schema-options.php:251
1027
  msgid "Add your personal photo here"
1028
  msgstr ""
1029
 
1030
+ #: lib/views/schema-options.php:262
1031
  msgid "Birth date"
1032
  msgstr ""
1033
 
1034
+ #: lib/views/schema-options.php:273
1035
  msgid "Address Country"
1036
  msgstr ""
1037
 
1038
+ #: lib/views/schema-options.php:288
1039
  msgid "Address Locality"
1040
  msgstr ""
1041
 
1042
+ #: lib/views/schema-options.php:295
1043
  msgid "Address Region"
1044
  msgstr ""
1045
 
1046
+ #: lib/views/schema-options.php:302
1047
  msgid "Postal Code"
1048
  msgstr ""
1049
 
1050
+ #: lib/views/schema-options.php:308
1051
  msgid "Street Address"
1052
  msgstr ""
1053
 
1054
+ #: lib/views/schema-options.php:317
1055
  msgid "Add New Address"
1056
  msgstr ""
1057
 
1058
+ #: lib/views/schema-options.php:324
1059
  msgid "Organization Logo"
1060
  msgstr ""
1061
 
1062
+ #: lib/views/schema-options.php:327 lib/views/schema-options.php:390
1063
  msgid "Social Profile"
1064
  msgstr ""
1065
 
1066
+ #: lib/views/schema-options.php:330
1067
  msgid "Corporate Contacts"
1068
  msgstr ""
1069
 
1070
+ #: lib/views/schema-options.php:336
1071
  msgid "Select Organization Logo"
1072
  msgstr ""
1073
 
1074
+ #: lib/views/schema-options.php:380
1075
  msgid "Company Name"
1076
  msgstr ""
1077
 
1078
+ #: lib/views/schema-options.php:387
1079
  msgid "Social Profiles"
1080
  msgstr ""
1081
 
1082
+ #: lib/views/schema-options.php:416
1083
  msgid "Add Social Profile"
1084
  msgstr ""
1085
 
1086
+ #: lib/views/schema-options.php:424
1087
  msgid "Contacts"
1088
  msgstr ""
1089
 
1090
+ #: lib/views/schema-options.php:443
1091
  msgid "Contact Phone"
1092
  msgstr ""
1093
 
1094
+ #: lib/views/schema-options.php:447
1095
  msgid "Please follow the format below"
1096
  msgstr ""
1097
 
1098
+ #: lib/views/schema-options.php:458
1099
  msgid "Contact Email"
1100
  msgstr ""
1101
 
1102
+ #: lib/views/schema-options.php:465
1103
  msgid "Contact Option"
1104
  msgstr ""
1105
 
1106
+ #: lib/views/schema-options.php:469
1107
  msgid "Select an option"
1108
  msgstr ""
1109
 
1110
+ #: lib/views/schema-options.php:472
1111
  msgid "TollFree"
1112
  msgstr ""
1113
 
1114
+ #: lib/views/schema-options.php:476
1115
  msgid "HearingImpairedSupported"
1116
  msgstr ""
1117
 
1118
+ #: lib/views/schema-options.php:482
1119
  msgid "Area Served"
1120
  msgstr ""
1121
 
1122
+ #: lib/views/schema-options.php:500
1123
  msgid "Available language"
1124
  msgstr ""
1125
 
1126
+ #: lib/views/schema-options.php:518
1127
  msgid "Site Schema"
1128
  msgstr ""
1129
 
1130
+ #: lib/views/schema-options.php:521
1131
  msgid "Disable Site Schema"
1132
  msgstr ""
1133
 
1134
+ #: lib/views/schema-options.php:529
1135
  msgid "Enable Site link Search Box"
1136
  msgstr ""
1137
 
1138
+ #: lib/views/schema-options.php:534
1139
  msgid "Note: Preferred Name markup may no longer be supported by Google"
1140
  msgstr ""
1141
 
1142
+ #: lib/views/schema-options.php:538
1143
  msgid "Site Name:"
1144
  msgstr ""
1145
 
1146
+ #: lib/views/schema-options.php:545
1147
  msgid "Site Alternative Name:"
1148
  msgstr ""
1149
 
1150
+ #: lib/views/schema-options.php:552
1151
  msgid "Site Url:"
1152
  msgstr ""
1153
 
1154
+ #: lib/views/schema-options.php:560 lib/views/settings.php:105
1155
  msgid "Save Changes"
1156
  msgstr ""
1157
 
1158
+ #: lib/views/settings.php:6
1159
  msgid "Schema Settings"
1160
  msgstr ""
1161
 
1162
+ #: lib/views/settings.php:13
1163
  msgid "Business / Org Schema"
1164
  msgstr ""
1165
 
1166
+ #: lib/views/settings.php:17
1167
  msgid ""
1168
  "Home page\n"
1169
  " only"
1170
  msgstr ""
1171
 
1172
+ #: lib/views/settings.php:21
1173
  msgid ""
1174
  "Sitewide (Apply General Settings schema\n"
1175
  " sitewide)"
1176
  msgstr ""
1177
 
1178
+ #: lib/views/settings.php:26
1179
  msgid "Turn off (Turn off global schema)"
1180
  msgstr ""
1181
 
1182
+ #: lib/views/settings.php:31
1183
+ msgid "Post Type"
1184
+ msgstr ""
1185
+
1186
+ #: lib/views/settings.php:45
1187
+ msgid "Site Navigation Element Schema"
1188
+ msgstr ""
1189
+
1190
+ #: lib/views/settings.php:49 lib/views/settings.php:74
1191
+ msgid "Publisher Name"
1192
+ msgstr ""
1193
+
1194
+ #: lib/views/settings.php:54
1195
+ msgid "Select one menu"
1196
+ msgstr ""
1197
+
1198
+ #: lib/views/settings.php:65
1199
+ msgid ""
1200
+ "Please deselect the navigation menu if you want to deactivate site "
1201
+ "navigation\n"
1202
+ " schema."
1203
+ msgstr ""
1204
+
1205
+ #: lib/views/settings.php:70
1206
+ msgid "Publisher Information"
1207
+ msgstr ""
1208
+
1209
+ #: lib/views/settings.php:90
1210
+ msgid "System Settings"
1211
+ msgstr ""
1212
+
1213
+ #: lib/views/settings.php:93
1214
  msgid "Delete all data"
1215
  msgstr ""
1216
 
1217
+ #: lib/views/settings.php:98
1218
  msgid "Enable"
1219
  msgstr ""
1220
 
1221
+ #: lib/views/settings.php:99
1222
  msgid ""
1223
+ "This will delete all schema created and applied by this plugin when plugin "
1224
+ "is\n"
1225
  " deleted."
1226
  msgstr ""
1227
+
1228
+ #. Plugin URI of the plugin/theme
1229
+ #. Author URI of the plugin/theme
1230
+ msgid "https://wpsemplugins.com/"
1231
+ msgstr ""
1232
+
1233
+ #. Description of the plugin/theme
1234
+ msgid ""
1235
+ "Comprehensive JSON-LD based Structured Data solution for WordPress for "
1236
+ "adding schema for organizations, businesses, blog posts, ratings & more."
1237
+ msgstr ""
1238
+
1239
+ #. Author of the plugin/theme
1240
+ msgid "WPSEMPlugins"
1241
+ msgstr ""
lib/classes/KcSeoHelper.php CHANGED
@@ -157,8 +157,7 @@ if (!class_exists('KcSeoSettings')):
157
 
158
 
159
  if (!empty($ids)) {
160
- $schemaModel = new KcSeoSchemaModel;
161
- $schemaFields = $schemaModel->schemaTypes();
162
  foreach ($ids as $id) {
163
  foreach ($schemaFields as $schemaID => $schema) {
164
  $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
@@ -202,6 +201,7 @@ if (!class_exists('KcSeoSettings')):
202
  <li><?php _e("Recipe", "wp-seo-structured-data-schema") ?></li>
203
  <li><?php _e("TV Episode", "wp-seo-structured-data-schema") ?></li>
204
  <li><?php _e("QAPage", "wp-seo-structured-data-schema") ?></li>
 
205
  </ol>
206
  </li>
207
  </ol>
157
 
158
 
159
  if (!empty($ids)) {
160
+ $schemaFields = KcSeoOptions::getSchemaTypes();
 
161
  foreach ($ids as $id) {
162
  foreach ($schemaFields as $schemaID => $schema) {
163
  $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
201
  <li><?php _e("Recipe", "wp-seo-structured-data-schema") ?></li>
202
  <li><?php _e("TV Episode", "wp-seo-structured-data-schema") ?></li>
203
  <li><?php _e("QAPage", "wp-seo-structured-data-schema") ?></li>
204
+ <li><?php _e("Item List", "wp-seo-structured-data-schema") ?></li>
205
  </ol>
206
  </li>
207
  </ol>
lib/classes/KcSeoInit.php CHANGED
@@ -1,233 +1,222 @@
1
  <?php
2
 
3
- if (!class_exists('KcSeoInit')):
4
-
5
- class KcSeoInit {
6
-
7
- function __construct()
8
- {
9
- add_action('init', array($this, 'kcSeoScript'));
10
- add_action('admin_menu', array($this, 'kcSeo_Wp_Schema_menu'));
11
- add_action('plugins_loaded', array($this, 'kcSeo_pluginInit'));
12
- add_action('wp_ajax_kcSeoWpSchemaSettings', array($this, 'kcSeoWpSchemaSettings'));
13
- add_action('wp_ajax_kcSeoMainSettings_action', array($this, 'kcSeoMainSettings_action'));
14
- add_action('wp_ajax_newSocial', array($this, 'newSocial'));
15
- add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
16
-
17
- // for MU Site
18
- add_action('activated_plugin', array($this, 'update_queue'), 10, 2);
19
- add_action('deactivated_plugin', array($this, 'update_queue'), 10, 2);
20
-
21
- register_activation_hook(KCSEO_WP_SCHEMA_PLUGIN_ACTIVE_FILE_NAME, array($this, 'activePlugin'));
 
 
22
  // register_deactivation_hook(KCSEO_WP_SCHEMA_PLUGIN_ACTIVE_FILE_NAME, array($this, 'uninstall'));
23
- // Uninstall hook
24
-
25
- add_filter('plugin_action_links_' . KCSEO_WP_SCHEMA_PLUGIN_ACTIVE_FILE_NAME,
26
- array($this, 'schema_marketing'));
27
-
28
- }
29
-
30
- function schema_marketing($links)
31
- {
32
- $links[] = '<a target="_blank" href="' . esc_url('https://wpsemplugins.com/documentation/') . '">' . __("Documentation", "wp-seo-structured-data-schema") . '</a>';
33
- $links[] = '<a target="_blank" href="' . esc_url('https://wpsemplugins.com/downloads/wordpress-schema-plugin/') . '">' . __("Get Pro", "wp-seo-structured-data-schema") . '</a>';
34
- return $links;
35
- }
36
-
37
-
38
- function update_queue($plugin, $network_wide = null)
39
- {
40
- if (!$network_wide) {
41
- return;
42
- }
43
- list($action) = explode('_', current_filter(), 2);
44
-
45
- $action = str_replace('activated', 'activate', $action);
46
- $queue = get_site_option("network_{$action}_queue", array());
47
-
48
- $queue[$plugin] = (has_filter($action . '_' . $plugin) || has_filter($action . '_plugin'));
49
- update_site_option("network_{$action}_queue", $queue);
50
- }
51
-
52
- function admin_enqueue_scripts()
53
- {
54
- global $pagenow;
55
- // validate page
56
- $page = isset($_REQUEST['page']) ? $_REQUEST['page'] : null;
57
- if ($pagenow == 'admin.php' && ($page == 'wp-seo-schema' || $page == 'wp-seo-schema-settings')) {
58
- // scripts
59
- wp_enqueue_media();
60
- wp_enqueue_script(array(
61
- 'jquery',
62
- 'kcseo-datepicker',
63
- 'kcseo-select2-js',
64
- 'kcseo-tooltip-js',
65
- 'kcseo-admin-js',
66
- ));
67
-
68
- // styles
69
- wp_enqueue_style(array(
70
- 'kcseo-datepicker',
71
- 'kcseo-select2-css',
72
- 'kcseo-tooltip-css',
73
- 'kcseo-admin-css',
74
- ));
75
- }
76
- }
77
-
78
- function kcSeoScript()
79
- {
80
- global $KcSeoWPSchema;
81
- // register team scripts and styles
82
- $scripts = array();
83
- $styles = array();
84
- if (is_admin()) {
85
-
86
-
87
- $scripts[] = array(
88
- 'handle' => 'kcseo-select2-js',
89
- 'src' => $KcSeoWPSchema->assetsUrl . 'js/select2.min.js',
90
- 'deps' => array('jquery'),
91
- 'footer' => true
92
- );
93
- $scripts[] = array(
94
- 'handle' => 'kcseo-tooltip-js',
95
- 'src' => $KcSeoWPSchema->assetsUrl . 'js/jquery.qtip.js',
96
- 'deps' => array('jquery'),
97
- 'footer' => true
98
- );
99
-
100
- $scripts[] = array(
101
- 'handle' => 'kcseo-datepicker',
102
- 'src' => $KcSeoWPSchema->assetsUrl . 'vendor/bootstrap-datepicker/bootstrap-datepicker.min.js',
103
- 'deps' => array('jquery'),
104
- 'footer' => false
105
- );
106
- $scripts[] = array(
107
- 'handle' => 'kcseo-admin-js',
108
- 'src' => $KcSeoWPSchema->assetsUrl . 'js/admin.js',
109
- 'deps' => array('jquery'),
110
- 'footer' => true
111
- );
112
- $styles['kcseo-datepicker'] = $KcSeoWPSchema->assetsUrl . 'vendor/bootstrap-datepicker/bootstrap-datepicker3.standalone.min.css';
113
- $styles['kcseo-select2-css'] = $KcSeoWPSchema->assetsUrl . 'css/select2.min.css';
114
- $styles['kcseo-tooltip-css'] = $KcSeoWPSchema->assetsUrl . 'css/jquery.qtip.css';
115
- $styles['kcseo-admin-css'] = $KcSeoWPSchema->assetsUrl . 'css/admin.css';
116
- }
117
- foreach ($scripts as $script) {
118
- wp_register_script($script['handle'], $script['src'], $script['deps'], time(),
119
- $script['footer']); //$KcSeoWPSchema->options['version']
120
- }
121
- foreach ($styles as $k => $v) {
122
- wp_register_style($k, $v, false, $KcSeoWPSchema->options['version']);
123
- }
124
- }
125
-
126
- function newSocial()
127
- {
128
- $schemaModel = new KcSeoSchemaModel;
129
- $id = ($_REQUEST['id'] ? $_REQUEST['id'] + 1 : 0);
130
- $html = null;
131
- $html = "<div class='sfield'>";
132
- $html .= "<select name='social[$id][id]'>";
133
- foreach ($schemaModel->socialList() as $skey => $social) {
134
- $html .= "<option value='$skey'>$social</option>";
135
- }
136
- $html .= "</select>";
137
- $html .= "<input type='text' name='social[$id][link]'>";
138
- $html .= '<span class="dashicons dashicons-trash social-remove"></span>';
139
- $html .= "</div>";
140
-
141
-
142
- wp_send_json(array('data' => $html));
143
- die();
144
- }
145
-
146
- function kcSeoWpSchemaSettings()
147
- {
148
- global $KcSeoWPSchema;
149
- $error = true;
150
- $msg = null;
151
- if ($KcSeoWPSchema->verifyNonce()) {
152
- unset($_REQUEST['action']);
153
- update_option($KcSeoWPSchema->options['settings'], $_REQUEST);
154
- $error = false;
155
- $msg = __('Settings successfully updated', KCSEO_WP_SCHEMA_SLUG);
156
- } else {
157
- $msg = __('Security Error !!', KCSEO_WP_SCHEMA_SLUG);
158
- }
159
- $response = array(
160
- 'error' => $error,
161
- 'msg' => $msg
162
- );
163
- wp_send_json($response);
164
- die();
165
- }
166
-
167
- function kcSeoMainSettings_action()
168
- {
169
- global $KcSeoWPSchema;
170
- $error = true;
171
- $msg = null;
172
- if ($KcSeoWPSchema->verifyNonce()) {
173
- unset($_REQUEST['action']);
174
- unset($_REQUEST['_kcseo_nonce']);
175
- unset($_REQUEST['_wp_http_referer']);
176
- update_option($KcSeoWPSchema->options['main_settings'], $_REQUEST);
177
- $error = false;
178
- $msg = __('Settings successfully updated', KCSEO_WP_SCHEMA_SLUG);
179
- } else {
180
- $msg = __('Security Error !!', KCSEO_WP_SCHEMA_SLUG);
181
- }
182
- $response = array(
183
- 'error' => $error,
184
- 'msg' => $msg
185
- );
186
- wp_send_json($response);
187
- die();
188
- }
189
-
190
- function wp_schema_page()
191
- {
192
- global $KcSeoWPSchema;
193
- $KcSeoWPSchema->render('schema-options');
194
- }
195
-
196
- function wp_schema_setting_page()
197
- {
198
- global $KcSeoWPSchema;
199
- $KcSeoWPSchema->render('settings');
200
- }
201
-
202
- function kcSeo_Wp_Schema_menu()
203
- {
204
- global $KcSeoWPSchema;
205
- add_menu_page(__('WP SEO Structured Data Schema', "wp-seo-structured-data-schema"), __('WP SEO Schema', "wp-seo-structured-data-schema"), 'manage_options', 'wp-seo-schema',
206
- array($this, 'wp_schema_page'), $KcSeoWPSchema->assetsUrl . 'images/wp-seo-schema.png');
207
- add_submenu_page('wp-seo-schema', __('WP SEO Schema settings', "wp-seo-structured-data-schema"), __('Settings', "wp-seo-structured-data-schema"), 'manage_options',
208
- 'wp-seo-schema-settings',
209
- array($this, 'wp_schema_setting_page'));
210
-
211
- }
212
-
213
-
214
- function kcSeo_pluginInit()
215
- {
216
- load_plugin_textdomain(KCSEO_WP_SCHEMA_SLUG, false, KCSEO_WP_SCHEMA_LANGUAGE_PATH);
217
- $this->updateVariableAndFixIssue();
218
- }
219
-
220
- function activePlugin()
221
- {
222
- $this->updateVariableAndFixIssue();
223
- }
224
-
225
- function updateVariableAndFixIssue()
226
- {
227
- global $KcSeoWPSchema;
228
- $KcSeoWPSchema->fix1_2DataMigration();
229
- update_option($KcSeoWPSchema->options['installed_version'], $KcSeoWPSchema->options['version']);
230
- }
231
-
232
- }
233
  endif;
1
  <?php
2
 
3
+ if ( ! class_exists( 'KcSeoInit' ) ):
4
+
5
+ class KcSeoInit {
6
+ protected $version;
7
+
8
+ function __construct() {
9
+ global $KcSeoWPSchema;
10
+ $this->version = ( defined( 'WP_DEBUG' ) && WP_DEBUG ) ? time() : $KcSeoWPSchema->options['version'];
11
+ add_action( 'init', array( $this, 'kcSeoScript' ) );
12
+ add_action( 'admin_menu', array( $this, 'kcSeo_Wp_Schema_menu' ) );
13
+ add_action( 'plugins_loaded', array( $this, 'kcSeo_pluginInit' ) );
14
+ add_action( 'wp_ajax_kcSeoWpSchemaSettings', array( $this, 'kcSeoWpSchemaSettings' ) );
15
+ add_action( 'wp_ajax_kcSeoMainSettings_action', array( $this, 'kcSeoMainSettings_action' ) );
16
+ add_action( 'wp_ajax_newSocial', array( $this, 'newSocial' ) );
17
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
18
+
19
+ // for MU Site
20
+ add_action( 'activated_plugin', array( $this, 'update_queue' ), 10, 2 );
21
+ add_action( 'deactivated_plugin', array( $this, 'update_queue' ), 10, 2 );
22
+
23
+ register_activation_hook( KCSEO_WP_SCHEMA_PLUGIN_ACTIVE_FILE_NAME, array( $this, 'activePlugin' ) );
24
  // register_deactivation_hook(KCSEO_WP_SCHEMA_PLUGIN_ACTIVE_FILE_NAME, array($this, 'uninstall'));
25
+ // Uninstall hook
26
+
27
+ add_filter( 'plugin_action_links_' . KCSEO_WP_SCHEMA_PLUGIN_ACTIVE_FILE_NAME,
28
+ array( $this, 'schema_marketing' ) );
29
+
30
+ }
31
+
32
+ function schema_marketing( $links ) {
33
+ $links[] = '<a target="_blank" href="' . esc_url( 'https://wpsemplugins.com/documentation/' ) . '">' . __( "Documentation", "wp-seo-structured-data-schema" ) . '</a>';
34
+ $links[] = '<a target="_blank" href="' . esc_url( 'https://wpsemplugins.com/downloads/wordpress-schema-plugin/' ) . '">' . __( "Get Pro", "wp-seo-structured-data-schema" ) . '</a>';
35
+
36
+ return $links;
37
+ }
38
+
39
+
40
+ function update_queue( $plugin, $network_wide = null ) {
41
+ if ( ! $network_wide ) {
42
+ return;
43
+ }
44
+ list( $action ) = explode( '_', current_filter(), 2 );
45
+
46
+ $action = str_replace( 'activated', 'activate', $action );
47
+ $queue = get_site_option( "network_{$action}_queue", array() );
48
+
49
+ $queue[ $plugin ] = ( has_filter( $action . '_' . $plugin ) || has_filter( $action . '_plugin' ) );
50
+ update_site_option( "network_{$action}_queue", $queue );
51
+ }
52
+
53
+ function admin_enqueue_scripts() {
54
+ global $pagenow;
55
+ // validate page
56
+ $page = isset( $_REQUEST['page'] ) ? $_REQUEST['page'] : null;
57
+ if ( $pagenow == 'admin.php' && ( $page == 'wp-seo-schema' || $page == 'wp-seo-schema-settings' ) ) {
58
+ // scripts
59
+ wp_enqueue_media();
60
+ wp_enqueue_script( array(
61
+ 'jquery',
62
+ 'kcseo-datepicker',
63
+ 'kcseo-select2-js',
64
+ 'kcseo-tooltip-js',
65
+ 'kcseo-admin-js',
66
+ ) );
67
+
68
+ // styles
69
+ wp_enqueue_style( array(
70
+ 'kcseo-datepicker',
71
+ 'kcseo-select2-css',
72
+ 'kcseo-tooltip-css',
73
+ 'kcseo-admin-css',
74
+ ) );
75
+ }
76
+ }
77
+
78
+ function kcSeoScript() {
79
+ global $KcSeoWPSchema;
80
+ // register team scripts and styles
81
+ $scripts = array();
82
+ $styles = array();
83
+ if ( is_admin() ) {
84
+
85
+
86
+ $scripts[] = array(
87
+ 'handle' => 'kcseo-select2-js',
88
+ 'src' => $KcSeoWPSchema->assetsUrl . 'js/select2.min.js',
89
+ 'deps' => array( 'jquery' ),
90
+ 'footer' => true
91
+ );
92
+ $scripts[] = array(
93
+ 'handle' => 'kcseo-tooltip-js',
94
+ 'src' => $KcSeoWPSchema->assetsUrl . 'js/jquery.qtip.js',
95
+ 'deps' => array( 'jquery' ),
96
+ 'footer' => true
97
+ );
98
+
99
+ $scripts[] = array(
100
+ 'handle' => 'kcseo-datepicker',
101
+ 'src' => $KcSeoWPSchema->assetsUrl . 'vendor/bootstrap-datepicker/bootstrap-datepicker.min.js',
102
+ 'deps' => array( 'jquery' ),
103
+ 'footer' => false
104
+ );
105
+ $scripts[] = array(
106
+ 'handle' => 'kcseo-admin-js',
107
+ 'src' => $KcSeoWPSchema->assetsUrl . 'js/admin.js',
108
+ 'deps' => array( 'jquery' ),
109
+ 'footer' => true
110
+ );
111
+ $styles['kcseo-datepicker'] = $KcSeoWPSchema->assetsUrl . 'vendor/bootstrap-datepicker/bootstrap-datepicker3.standalone.min.css';
112
+ $styles['kcseo-select2-css'] = $KcSeoWPSchema->assetsUrl . 'css/select2.min.css';
113
+ $styles['kcseo-tooltip-css'] = $KcSeoWPSchema->assetsUrl . 'css/jquery.qtip.css';
114
+ $styles['kcseo-admin-css'] = $KcSeoWPSchema->assetsUrl . 'css/admin.css';
115
+ }
116
+ foreach ( $scripts as $script ) {
117
+ wp_register_script( $script['handle'], $script['src'], $script['deps'], $this->version, $script['footer'] );
118
+ }
119
+ foreach ( $styles as $k => $v ) {
120
+ wp_register_style( $k, $v, false, $this->version );
121
+ }
122
+ }
123
+
124
+ function newSocial() {
125
+ $schemaModel = new KcSeoSchemaModel;
126
+ $id = ( $_REQUEST['id'] ? $_REQUEST['id'] + 1 : 0 );
127
+ $html = null;
128
+ $html = "<div class='sfield'>";
129
+ $html .= "<select name='social[$id][id]'>";
130
+ foreach ( KcSeoOptions::getSocialList() as $skey => $social ) {
131
+ $html .= "<option value='$skey'>$social</option>";
132
+ }
133
+ $html .= "</select>";
134
+ $html .= "<input type='text' name='social[$id][link]'>";
135
+ $html .= '<span class="dashicons dashicons-trash social-remove"></span>';
136
+ $html .= "</div>";
137
+
138
+
139
+ wp_send_json( array( 'data' => $html ) );
140
+ die();
141
+ }
142
+
143
+ function kcSeoWpSchemaSettings() {
144
+ global $KcSeoWPSchema;
145
+ $error = true;
146
+ $msg = null;
147
+ if ( $KcSeoWPSchema->verifyNonce() ) {
148
+ unset( $_REQUEST['action'] );
149
+ update_option( $KcSeoWPSchema->options['settings'], $_REQUEST );
150
+ $error = false;
151
+ $msg = __( 'Settings successfully updated', KCSEO_WP_SCHEMA_SLUG );
152
+ } else {
153
+ $msg = __( 'Security Error !!', KCSEO_WP_SCHEMA_SLUG );
154
+ }
155
+ $response = array(
156
+ 'error' => $error,
157
+ 'msg' => $msg
158
+ );
159
+ wp_send_json( $response );
160
+ die();
161
+ }
162
+
163
+ function kcSeoMainSettings_action() {
164
+ global $KcSeoWPSchema;
165
+ $error = true;
166
+ $msg = null;
167
+ if ( $KcSeoWPSchema->verifyNonce() ) {
168
+ unset( $_REQUEST['action'] );
169
+ unset( $_REQUEST['_kcseo_nonce'] );
170
+ unset( $_REQUEST['_wp_http_referer'] );
171
+ update_option( $KcSeoWPSchema->options['main_settings'], $_REQUEST );
172
+ $error = false;
173
+ $msg = __( 'Settings successfully updated', KCSEO_WP_SCHEMA_SLUG );
174
+ } else {
175
+ $msg = __( 'Security Error !!', KCSEO_WP_SCHEMA_SLUG );
176
+ }
177
+ $response = array(
178
+ 'error' => $error,
179
+ 'msg' => $msg
180
+ );
181
+ wp_send_json( $response );
182
+ die();
183
+ }
184
+
185
+ function wp_schema_page() {
186
+ global $KcSeoWPSchema;
187
+ $KcSeoWPSchema->render( 'schema-options' );
188
+ }
189
+
190
+ function wp_schema_setting_page() {
191
+ global $KcSeoWPSchema;
192
+ $KcSeoWPSchema->render( 'settings' );
193
+ }
194
+
195
+ function kcSeo_Wp_Schema_menu() {
196
+ global $KcSeoWPSchema;
197
+ add_menu_page( __( 'WP SEO Structured Data Schema', "wp-seo-structured-data-schema" ), __( 'WP SEO Schema', "wp-seo-structured-data-schema" ), 'manage_options', 'wp-seo-schema',
198
+ array( $this, 'wp_schema_page' ), $KcSeoWPSchema->assetsUrl . 'images/wp-seo-schema.png' );
199
+ add_submenu_page( 'wp-seo-schema', __( 'WP SEO Schema settings', "wp-seo-structured-data-schema" ), __( 'Settings', "wp-seo-structured-data-schema" ), 'manage_options',
200
+ 'wp-seo-schema-settings',
201
+ array( $this, 'wp_schema_setting_page' ) );
202
+
203
+ }
204
+
205
+
206
+ function kcSeo_pluginInit() {
207
+ load_plugin_textdomain( KCSEO_WP_SCHEMA_SLUG, false, KCSEO_WP_SCHEMA_LANGUAGE_PATH );
208
+ $this->updateVariableAndFixIssue();
209
+ }
210
+
211
+ function activePlugin() {
212
+ $this->updateVariableAndFixIssue();
213
+ }
214
+
215
+ function updateVariableAndFixIssue() {
216
+ global $KcSeoWPSchema;
217
+ $KcSeoWPSchema->fix1_2DataMigration();
218
+ update_option( $KcSeoWPSchema->options['installed_version'], $KcSeoWPSchema->options['version'] );
219
+ }
220
+
221
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
222
  endif;
lib/classes/KcSeoMetaData.php CHANGED
@@ -1,134 +1,154 @@
1
  <?php
2
 
3
- if (!class_exists('KcSeoMetaData')):
4
 
5
- class KcSeoMetaData
6
- {
7
 
8
- function __construct() {
9
- add_action('admin_enqueue_scripts', array($this, 'admin_enqueue_scripts'));
10
- add_action('save_post', array($this, 'save_KcSeo_schema_data'), 10, 3);
11
- }
12
 
13
- function admin_enqueue_scripts() {
14
- global $pagenow, $typenow, $KcSeoWPSchema;
15
- // validate page
16
- $pt = $KcSeoWPSchema->kcSeoPostTypes();
17
- if (!in_array($pagenow, array('post.php', 'post-new.php'))) return;
18
- if (!in_array($typenow, $pt)) return;
 
 
 
 
19
 
20
- // scripts
21
- wp_enqueue_script(array(
22
- 'jquery',
23
- 'kcseo-datepicker',
24
- 'kcseo-select2-js',
25
- 'kcseo-admin-js',
26
- ));
27
 
28
- // styles
29
- wp_enqueue_style(array(
30
- 'kcseo-datepicker',
31
- 'kcseo-select2-css',
32
- 'kcseo-admin-css',
33
- ));
34
 
35
- add_action('admin_head', array($this, 'admin_head'));
36
- }
37
 
38
- function admin_head() {
39
- global $KcSeoWPSchema;
40
- $pt = $KcSeoWPSchema->kcSeoPostTypes();
41
- foreach ($pt as $postType) {
42
- add_meta_box(
43
- 'kcseo-wordpres-seo-structured-data-schema-meta-box',
44
- __('WP SEO Structured Data Schema by <a href="https://wpsemplugins.com/">WPSEMPlugins.com</a>', KCSEO_WP_SCHEMA_SLUG),
45
- array($this, 'meta_box_wp_schema'),
46
- $postType,
47
- 'normal',
48
- 'high'
49
- );
50
- }
51
 
52
- }
53
 
54
- function meta_box_wp_schema($post) {
55
- global $KcSeoWPSchema;
56
- wp_nonce_field($KcSeoWPSchema->nonceText(), '_kcseo_nonce');
57
- $schemas = new KcSeoSchemaModel();
58
- $html = null;
59
- $html .= "<div class='schema-tips'>";
60
- $html .= "<p><span>Tip:</span> " . __("For more detailed information on how to configure this plugin, please visit:", "wp-seo-structured-data-schema") . " <a href='https://wpsemplugins.com/wordpress-seo-structured-data-schema-plugin/'>https://wpsemplugins.com/wordpress-seo-structured-data-schema-plugin/</a></p>";
61
- $html .= "<p><span>Tip:</span> " . __("Once you save these structured data schema settings, validate this page url here:", "wp-seo-structured-data-schema") . " <a href='https://developers.google.com/structured-data/testing-tool/'>https://developers.google.com/structured-data/testing-tool/</a></p>";
62
- $html .= "</div>";
63
- $html .= "<div class='schema-holder'>";
64
- $html .= '<div id="meta-tab-holder" class="rt-tab-container">';
65
- $htmlMenu = null;
66
- $htmlCont = null;
67
- $htmlMenu .= "<ul class='rt-tab-nav'>";
68
- $schemaFields = $schemas->schemaTypes();
69
- foreach ($schemaFields as $schemaID => $schema) {
70
- $tabId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
71
- $htmlMenu .= '<li><a href="#' . $tabId . '">' . $schema['title'] . '</a></li>';
72
- $htmlCont .= "<div id='{$tabId}' class='rt-tab-content'>";
73
- $htmlCont .= "<div class='kc-top-toolbar'><span class='disabled button button-primary'>" . __("Auto Fill", "wp-seo-structured-data-schema-pro") . "</span><span class='kcseo-pro-label'>" . __("PRO", "wp-seo-structured-data-schema-pro") . "</span></div>";
74
- $metaData = get_post_meta($post->ID, $tabId, true);
75
- $metaData = (is_array($metaData) ? $metaData : array());
76
- if(!empty($schema['fields'])){
77
- foreach ($schema['fields'] as $fieldId => $data) {
78
- $data['fieldId'] = $fieldId;
79
- $data['id'] = $tabId . "_" . $fieldId;
80
- $data['name'] = $tabId . "[{$fieldId}]";
81
- $data['value'] = (!empty($metaData[$fieldId]) ? $metaData[$fieldId] : null);
82
- $htmlCont .= $schemas->get_field($data);
83
- }
84
- }
85
- if (!empty($schema['pro']) && $schema['pro']) {
86
- $htmlCont .= "<div class='kcseo-pro-feature'>" . __("This is a Pro version feature.", "wp-seo-structured-data-schema-pro") . "<a href='https://wpsemplugins.com/downloads/wordpress-schema-plugin/' target='_blank'>(more info)</a></div>";
87
- }
88
- $htmlCont .= "</div>";
89
- }
90
- $htmlMenu .= "</ul>";
91
- $html .= $htmlMenu . $htmlCont;
92
- $html .= "</div>";
93
- $html .= "</div>";
94
- echo $html;
95
- }
 
 
 
 
 
96
 
97
- function save_KcSeo_schema_data($post_id, $post, $update) {
98
- if (defined('DOING_AUTOSAVE') && DOING_AUTOSAVE) return $post_id;
99
- global $KcSeoWPSchema;
100
- $nonce = !empty($_REQUEST['_kcseo_nonce']) ? $_REQUEST['_kcseo_nonce'] : null;
101
- if (!wp_verify_nonce($nonce, $KcSeoWPSchema->nonceText())) return $post_id;
 
 
 
 
102
 
103
- // Check permissions
104
- if (!empty($_GET['post_type'])) {
105
- if (!current_user_can('edit_' . $_GET['post_type'], $post_id)) return $post_id;
106
- }
107
- $pt = $KcSeoWPSchema->kcSeoPostTypes();
108
- if (!in_array($post->post_type, $pt)) return $post_id;
 
 
 
 
109
 
110
- $meta = array();
111
- $schemaModel = new KcSeoSchemaModel;
112
- $schemaFields = $schemaModel->schemaTypes();
113
- foreach ($schemaFields as $schemaID => $schema) {
114
- $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
115
- $data = array();
116
- if(!empty($schema['fields'])) {
117
- foreach ($schema['fields'] as $fieldId => $fieldData) {
118
- $value = (!empty($_REQUEST[$schemaMetaId][$fieldId]) ? $_REQUEST[$schemaMetaId][$fieldId] : null);
119
- $value = $KcSeoWPSchema->sanitize($fieldData, $value);
120
- $data[$fieldId] = $value;
121
- }
122
- }
123
- $meta[$schemaMetaId] = $data;
124
- }
125
- if (count($meta) > 0) {
126
- foreach ($meta as $mKey => $mValue) {
127
- update_post_meta($post_id, $mKey, $mValue);
128
- }
129
- }
130
- }
 
 
 
 
131
 
132
- }
133
 
134
  endif;
1
  <?php
2
 
3
+ if ( ! class_exists( 'KcSeoMetaData' ) ):
4
 
5
+ class KcSeoMetaData {
 
6
 
7
+ function __construct() {
8
+ add_action( 'admin_enqueue_scripts', array( $this, 'admin_enqueue_scripts' ) );
9
+ add_action( 'save_post', array( $this, 'save_KcSeo_schema_data' ), 10, 3 );
10
+ }
11
 
12
+ function admin_enqueue_scripts() {
13
+ global $pagenow, $typenow, $KcSeoWPSchema;
14
+ // validate page
15
+ $pt = $KcSeoWPSchema->kcSeoPostTypes();
16
+ if ( ! in_array( $pagenow, array( 'post.php', 'post-new.php' ) ) ) {
17
+ return;
18
+ }
19
+ if ( ! in_array( $typenow, $pt ) ) {
20
+ return;
21
+ }
22
 
23
+ // scripts
24
+ wp_enqueue_script( array(
25
+ 'jquery',
26
+ 'kcseo-datepicker',
27
+ 'kcseo-select2-js',
28
+ 'kcseo-admin-js',
29
+ ) );
30
 
31
+ // styles
32
+ wp_enqueue_style( array(
33
+ 'kcseo-datepicker',
34
+ 'kcseo-select2-css',
35
+ 'kcseo-admin-css',
36
+ ) );
37
 
38
+ add_action( 'admin_head', array( $this, 'admin_head' ) );
39
+ }
40
 
41
+ function admin_head() {
42
+ global $KcSeoWPSchema;
43
+ $pt = $KcSeoWPSchema->kcSeoPostTypes();
44
+ foreach ( $pt as $postType ) {
45
+ add_meta_box(
46
+ 'kcseo-wordpres-seo-structured-data-schema-meta-box',
47
+ __( 'WP SEO Structured Data Schema by <a href="https://wpsemplugins.com/">WPSEMPlugins.com</a>', KCSEO_WP_SCHEMA_SLUG ),
48
+ array( $this, 'meta_box_wp_schema' ),
49
+ $postType,
50
+ 'normal',
51
+ 'high'
52
+ );
53
+ }
54
 
55
+ }
56
 
57
+ function meta_box_wp_schema( $post ) {
58
+ global $KcSeoWPSchema;
59
+ wp_nonce_field( $KcSeoWPSchema->nonceText(), '_kcseo_nonce' );
60
+ $_kcseo_ative_tab = get_post_meta( $post->ID, '_kcseo_ative_tab', true );
61
+ $schemas = new KcSeoSchemaModel();
62
+ $html = null;
63
+ $html .= "<div class='schema-tips'>";
64
+ $html .= "<p><span>Tip:</span> " . __( "For more detailed information on how to configure this plugin, please visit:", "wp-seo-structured-data-schema" ) . " <a href='https://wpsemplugins.com/wordpress-seo-structured-data-schema-plugin/'>https://wpsemplugins.com/wordpress-seo-structured-data-schema-plugin/</a></p>";
65
+ $html .= "<p><span>Tip:</span> " . __( "Once you save these structured data schema settings, validate this page url here:", "wp-seo-structured-data-schema" ) . " <a href='https://developers.google.com/structured-data/testing-tool/'>https://developers.google.com/structured-data/testing-tool/</a></p>";
66
+ $html .= "</div>";
67
+ $html .= "<div class='schema-holder'>";
68
+ $html .= '<div id="meta-tab-holder" class="rt-tab-container">';
69
+ $htmlMenu = null;
70
+ $htmlCont = null;
71
+ $htmlMenu .= "<ul class='rt-tab-nav'>";
72
+ $schemaFields = KcSeoOptions::getSchemaTypes();
73
+ $i = 0;
74
+ foreach ( $schemaFields as $schemaID => $schema ) {
75
+ $tabId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
76
+ $activeClass = ( ( ! $_kcseo_ative_tab && $i === 0 ) || $tabId === $_kcseo_ative_tab ) ? ' active' : null;
77
+ $i ++;
78
+ $htmlMenu .= '<li data-id="' . $tabId . '" class="' . $activeClass . '"><a href="#' . $tabId . '">' . $schema['title'] . '</a></li>';
79
+ $htmlCont .= "<div id='{$tabId}' class='rt-tab-content{$activeClass}'>";
80
+ $htmlCont .= "<div class='kc-top-toolbar'><span class='disabled button button-primary'>" . __( "Auto Fill", "wp-seo-structured-data-schema-pro" ) . "</span><span class='kcseo-pro-label'>" . __( "PRO", "wp-seo-structured-data-schema-pro" ) . "</span></div>";
81
+ $metaData = get_post_meta( $post->ID, $tabId, true );
82
+ $metaData = ( is_array( $metaData ) ? $metaData : array() );
83
+ if ( ! empty( $schema['fields'] ) ) {
84
+ foreach ( $schema['fields'] as $fieldId => $data ) {
85
+ $data['fieldId'] = $fieldId;
86
+ $data['id'] = $tabId . "_" . $fieldId;
87
+ $data['name'] = $tabId . "[{$fieldId}]";
88
+ $data['value'] = ( ! empty( $metaData[ $fieldId ] ) ? $metaData[ $fieldId ] : null );
89
+ $htmlCont .= $schemas->get_field( $data );
90
+ }
91
+ }
92
+ if ( ! empty( $schema['pro'] ) && $schema['pro'] ) {
93
+ $htmlCont .= "<div class='kcseo-pro-feature'>" . __( "This is a Pro version feature.", "wp-seo-structured-data-schema-pro" ) . "<a href='https://wpsemplugins.com/downloads/wordpress-schema-plugin/' target='_blank'>(more info)</a></div>";
94
+ }
95
+ $htmlCont .= "</div>";
96
+ }
97
+ $htmlMenu .= "</ul>";
98
+ $html .= $htmlMenu . $htmlCont;
99
+ $html .= '<input type="hidden" id="_kcseo_ative_tab" name="_kcseo_ative_tab" value="' . $_kcseo_ative_tab . '" />';
100
+ $html .= "</div>";
101
+ $html .= "</div>";
102
+ echo $html;
103
+ }
104
 
105
+ function save_KcSeo_schema_data( $post_id, $post, $update ) {
106
+ if ( defined( 'DOING_AUTOSAVE' ) && DOING_AUTOSAVE ) {
107
+ return $post_id;
108
+ }
109
+ global $KcSeoWPSchema;
110
+ $nonce = ! empty( $_REQUEST['_kcseo_nonce'] ) ? $_REQUEST['_kcseo_nonce'] : null;
111
+ if ( ! wp_verify_nonce( $nonce, $KcSeoWPSchema->nonceText() ) ) {
112
+ return $post_id;
113
+ }
114
 
115
+ // Check permissions
116
+ if ( ! empty( $_GET['post_type'] ) ) {
117
+ if ( ! current_user_can( 'edit_' . $_GET['post_type'], $post_id ) ) {
118
+ return $post_id;
119
+ }
120
+ }
121
+ $pt = $KcSeoWPSchema->kcSeoPostTypes();
122
+ if ( ! in_array( $post->post_type, $pt ) ) {
123
+ return $post_id;
124
+ }
125
 
126
+ $meta = array();
127
+ $schemaModel = new KcSeoSchemaModel;
128
+ $schemaFields = KcSeoOptions::getSchemaTypes();
129
+ foreach ( $schemaFields as $schemaID => $schema ) {
130
+ $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
131
+ $data = array();
132
+ if ( ! empty( $schema['fields'] ) ) {
133
+ foreach ( $schema['fields'] as $fieldId => $fieldData ) {
134
+ $value = ( ! empty( $_REQUEST[ $schemaMetaId ][ $fieldId ] ) ? $_REQUEST[ $schemaMetaId ][ $fieldId ] : null );
135
+ $value = $KcSeoWPSchema->sanitize( $fieldData, $value );
136
+ $data[ $fieldId ] = $value;
137
+ }
138
+ }
139
+ $meta[ $schemaMetaId ] = $data;
140
+ }
141
+ /* _kcseo_ative_tab */
142
+ if ( isset( $_POST['_kcseo_ative_tab'] ) ) {
143
+ $meta['_kcseo_ative_tab'] = sanitize_text_field( $_POST['_kcseo_ative_tab'] );
144
+ }
145
+ if ( count( $meta ) > 0 ) {
146
+ foreach ( $meta as $mKey => $mValue ) {
147
+ update_post_meta( $post_id, $mKey, $mValue );
148
+ }
149
+ }
150
+ }
151
 
152
+ }
153
 
154
  endif;
lib/classes/KcSeoOutput.php CHANGED
@@ -5,9 +5,10 @@ if (!class_exists('KcSeoOutput')):
5
  class KcSeoOutput
6
  {
7
  function __construct() {
8
- add_action('wp_footer', array($this, 'footer'), 1);
9
- add_action('kcseo_footer', array($this, 'debug_mark'), 2);
10
- add_action('kcseo_footer', array($this, 'load_schema'), 3);
 
11
  }
12
 
13
  private function is_premium() {
@@ -204,7 +205,7 @@ if (!class_exists('KcSeoOutput')):
204
 
205
  if (is_single() || is_page()) {
206
  $post = get_queried_object();
207
- foreach ($schemaModel->schemaTypes() as $schemaID => $schema) {
208
  $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
209
  $metaData = get_post_meta($post->ID, $schemaMetaId, true);
210
  $metaData = (is_array($metaData) ? $metaData : array());
5
  class KcSeoOutput
6
  {
7
  function __construct() {
8
+ add_action('wp_footer', array($this, 'footer'), 99);
9
+ add_action('amp_post_template_footer', array($this, 'footer'), 999); // AMP support
10
+ add_action('kcseo_footer', array($this, 'debug_mark'), 2);
11
+ add_action('kcseo_footer', array($this, 'load_schema'), 3);
12
  }
13
 
14
  private function is_premium() {
205
 
206
  if (is_single() || is_page()) {
207
  $post = get_queried_object();
208
+ foreach (KcSeoOptions::getSchemaTypes() as $schemaID => $schema) {
209
  $schemaMetaId = $KcSeoWPSchema->KcSeoPrefix . $schemaID;
210
  $metaData = get_post_meta($post->ID, $schemaMetaId, true);
211
  $metaData = (is_array($metaData) ? $metaData : array());
lib/functions/KcSeoOptions.php ADDED
@@ -0,0 +1,1347 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class KcSeoOptions
4
+ {
5
+
6
+ static function getSchemaTypes() {
7
+ $schemas = array(
8
+ 'article' => array(
9
+ 'pro' => false,
10
+ 'title' => __("Article", "wp-seo-structured-data-schema"),
11
+ 'fields' => array(
12
+ 'active' => array(
13
+ 'type' => 'checkbox'
14
+ ),
15
+ 'headline' => array(
16
+ 'title' => __('Headline', "wp-seo-structured-data-schema"),
17
+ 'type' => 'text',
18
+ 'desc' => __('Article title', "wp-seo-structured-data-schema"),
19
+ 'required' => true
20
+ ),
21
+ 'mainEntityOfPage' => array(
22
+ 'title' => __('Page URL', "wp-seo-structured-data-schema"),
23
+ 'type' => 'url',
24
+ 'desc' => __('The canonical URL of the article page', "wp-seo-structured-data-schema"),
25
+ 'required' => true
26
+ ),
27
+ 'author' => array(
28
+ 'title' => __('Author Name', "wp-seo-structured-data-schema"),
29
+ 'type' => 'text',
30
+ 'desc' => __('Author display name', "wp-seo-structured-data-schema"),
31
+ 'required' => true
32
+ ),
33
+ 'image' => array(
34
+ 'title' => __('Article Feature Image', "wp-seo-structured-data-schema"),
35
+ 'type' => 'image',
36
+ 'required' => true,
37
+ 'desc' => __('Images should be at least 696 pixels wide.<br>Images should be in .jpg, .png, or. gif format.', "wp-seo-structured-data-schema")
38
+ ),
39
+ 'datePublished' => array(
40
+ 'title' => __('Published date', "wp-seo-structured-data-schema"),
41
+ 'type' => 'text',
42
+ 'class' => 'kcseo-date',
43
+ 'required' => true,
44
+ 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema")
45
+ ),
46
+ 'dateModified' => array(
47
+ 'title' => __('Modified date', "wp-seo-structured-data-schema"),
48
+ 'type' => 'text',
49
+ 'class' => 'kcseo-date',
50
+ 'required' => true,
51
+ 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema")
52
+ ),
53
+ 'publisher' => array(
54
+ 'title' => __('Publisher', "wp-seo-structured-data-schema"),
55
+ 'type' => 'text',
56
+ 'desc' => __('Publisher name or Organization name', "wp-seo-structured-data-schema"),
57
+ 'required' => true
58
+ ),
59
+ 'publisherImage' => array(
60
+ 'title' => __('Publisher Logo', "wp-seo-structured-data-schema"),
61
+ 'type' => 'image',
62
+ 'desc' => __('Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>', "wp-seo-structured-data-schema"),
63
+ 'required' => true
64
+ ),
65
+ 'description' => array(
66
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
67
+ 'type' => 'textarea',
68
+ 'desc' => __('Short description', "wp-seo-structured-data-schema")
69
+ ),
70
+ 'articleBody' => array(
71
+ 'title' => __('Article body', "wp-seo-structured-data-schema"),
72
+ 'type' => 'textarea',
73
+ 'desc' => __('Article content', "wp-seo-structured-data-schema")
74
+ ),
75
+ 'alternativeHeadline' => array(
76
+ 'title' => __('Alternative headline', "wp-seo-structured-data-schema"),
77
+ 'type' => 'text',
78
+ 'desc' => __('A secondary headline for the article.', "wp-seo-structured-data-schema")
79
+ ),
80
+ )
81
+ ),
82
+ 'blog_posting' => array(
83
+ 'pro' => false,
84
+ 'title' => __('Blog Posting', "wp-seo-structured-data-schema"),
85
+ 'fields' => array(
86
+ 'active' => array(
87
+ 'type' => 'checkbox'
88
+ ),
89
+ 'headline' => array(
90
+ 'title' => __('Headline', "wp-seo-structured-data-schema"),
91
+ 'type' => 'text',
92
+ 'desc' => __('Blog posting title', "wp-seo-structured-data-schema"),
93
+ 'required' => true
94
+ ),
95
+ 'mainEntityOfPage' => array(
96
+ 'title' => __('Page URL', "wp-seo-structured-data-schema"),
97
+ 'type' => 'url',
98
+ 'desc' => __('The canonical URL of the article page', "wp-seo-structured-data-schema"),
99
+ 'required' => true
100
+ ),
101
+ 'author' => array(
102
+ 'title' => __('Author name', "wp-seo-structured-data-schema"),
103
+ 'type' => 'text',
104
+ 'desc' => __('Author display name', "wp-seo-structured-data-schema"),
105
+ 'required' => true
106
+ ),
107
+ 'image' => array(
108
+ 'title' => __('Feature Image', "wp-seo-structured-data-schema"),
109
+ 'type' => 'image',
110
+ 'desc' => __("The representative image of the article. Only a marked-up image that directly belongs to the article should be specified.<br> Images should be at least 696 pixels wide. <br>Images should be in .jpg, .png, or. gif format.", "wp-seo-structured-data-schema"),
111
+ 'required' => true
112
+ ),
113
+ 'datePublished' => array(
114
+ 'title' => __('Published date', "wp-seo-structured-data-schema"),
115
+ 'type' => 'text',
116
+ 'class' => 'kcseo-date',
117
+ 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema"),
118
+ 'required' => true
119
+ ),
120
+ 'dateModified' => array(
121
+ 'title' => __('Modified date', "wp-seo-structured-data-schema"),
122
+ 'type' => 'text',
123
+ 'class' => 'kcseo-date',
124
+ 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema"),
125
+ 'required' => true
126
+ ),
127
+ 'publisher' => array(
128
+ 'title' => __('Publisher', "wp-seo-structured-data-schema"),
129
+ 'type' => 'text',
130
+ 'desc' => __('Publisher name or Organization name', "wp-seo-structured-data-schema"),
131
+ 'required' => true
132
+ ),
133
+ 'publisherImage' => array(
134
+ 'title' => __('Publisher Logo', "wp-seo-structured-data-schema"),
135
+ 'type' => 'image',
136
+ 'desc' => __("Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>", "wp-seo-structured-data-schema"),
137
+ 'required' => true
138
+ ),
139
+ 'description' => array(
140
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
141
+ 'type' => 'textarea',
142
+ 'desc' => __('Short description', "wp-seo-structured-data-schema")
143
+ ),
144
+ 'articleBody' => array(
145
+ 'title' => __('Article body', "wp-seo-structured-data-schema"),
146
+ 'type' => 'textarea',
147
+ 'desc' => __('Article content', "wp-seo-structured-data-schema")
148
+ )
149
+ )
150
+ ),
151
+ 'news_article' => array(
152
+ 'pro' => false,
153
+ 'title' => __('News Article', "wp-seo-structured-data-schema"),
154
+ 'fields' => array(
155
+ 'active' => array(
156
+ 'type' => 'checkbox'
157
+ ),
158
+ 'headline' => array(
159
+ 'title' => __('Headline', "wp-seo-structured-data-schema"),
160
+ 'type' => 'text',
161
+ 'desc' => __('Article title', "wp-seo-structured-data-schema"),
162
+ 'required' => true
163
+ ),
164
+ 'mainEntityOfPage' => array(
165
+ 'title' => __('Page URL', "wp-seo-structured-data-schema"),
166
+ 'type' => 'url',
167
+ 'desc' => __('The canonical URL of the article page', "wp-seo-structured-data-schema"),
168
+ 'required' => true
169
+ ),
170
+ 'author' => array(
171
+ 'title' => __('Author', "wp-seo-structured-data-schema"),
172
+ 'type' => 'text',
173
+ 'desc' => __('Author display name', "wp-seo-structured-data-schema"),
174
+ 'required' => true
175
+ ),
176
+ 'image' => array(
177
+ 'title' => __('Image', "wp-seo-structured-data-schema"),
178
+ 'type' => 'image',
179
+ 'desc' => __("The representative image of the article. Only a marked-up image that directly belongs to the article should be specified.<br> Images should be at least 696 pixels wide. <br>Images should be in .jpg, .png, or. gif format.", "wp-seo-structured-data-schema"),
180
+ 'required' => true
181
+ ),
182
+ 'datePublished' => array(
183
+ 'title' => __('Published date', "wp-seo-structured-data-schema"),
184
+ 'type' => 'text',
185
+ 'class' => 'kcseo-date',
186
+ 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema"),
187
+ 'required' => true
188
+ ),
189
+ 'dateModified' => array(
190
+ 'title' => __('Modified date', "wp-seo-structured-data-schema"),
191
+ 'type' => 'text',
192
+ 'class' => 'kcseo-date',
193
+ 'required' => true,
194
+ 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema")
195
+ ),
196
+ 'publisher' => array(
197
+ 'title' => __('Publisher', "wp-seo-structured-data-schema"),
198
+ 'type' => 'text',
199
+ 'desc' => __('Publisher name or Organization name', "wp-seo-structured-data-schema"),
200
+ 'required' => true
201
+ ),
202
+ 'publisherImage' => array(
203
+ 'title' => __('Publisher Logo', "wp-seo-structured-data-schema"),
204
+ 'type' => 'image',
205
+ 'desc' => __('Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>', "wp-seo-structured-data-schema"),
206
+ 'required' => true
207
+ ),
208
+ 'description' => array(
209
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
210
+ 'type' => 'textarea',
211
+ 'desc' => __('Short description', "wp-seo-structured-data-schema")
212
+ ),
213
+ 'articleBody' => array(
214
+ 'title' => __('Article body', "wp-seo-structured-data-schema"),
215
+ 'type' => 'textarea',
216
+ 'desc' => __('Article body content', "wp-seo-structured-data-schema")
217
+ )
218
+ )
219
+ ),
220
+ 'event' => array(
221
+ 'pro' => false,
222
+ 'title' => __('Event', "wp-seo-structured-data-schema"),
223
+ 'fields' => array(
224
+ 'active' => array(
225
+ 'type' => 'checkbox'
226
+ ),
227
+ 'name' => array(
228
+ 'title' => __('Name', "wp-seo-structured-data-schema"),
229
+ 'type' => 'text',
230
+ 'required' => true,
231
+ 'desc' => __("The name of the event.", "wp-seo-structured-data-schema")
232
+ ),
233
+ 'locationName' => array(
234
+ 'title' => __('Location name', "wp-seo-structured-data-schema"),
235
+ 'type' => 'text',
236
+ 'required' => true,
237
+ 'desc' => __("Event Location name", "wp-seo-structured-data-schema")
238
+ ),
239
+ 'locationAddress' => array(
240
+ 'title' => __('Location address', "wp-seo-structured-data-schema"),
241
+ 'type' => 'text',
242
+ 'required' => true,
243
+ 'desc' => __("The location of for example where the event is happening, an organization is located, or where an action takes place.", "wp-seo-structured-data-schema")
244
+ ),
245
+ 'startDate' => array(
246
+ 'title' => __('Start date', "wp-seo-structured-data-schema"),
247
+ 'type' => 'text',
248
+ 'class' => 'kcseo-date',
249
+ 'required' => true,
250
+ 'desc' => __("Event start date", "wp-seo-structured-data-schema")
251
+ ),
252
+ 'endDate' => array(
253
+ 'title' => __('End date', "wp-seo-structured-data-schema"),
254
+ 'type' => 'text',
255
+ 'recommended' => true,
256
+ 'class' => 'kcseo-date',
257
+ 'desc' => __("Event end date", "wp-seo-structured-data-schema")
258
+ ),
259
+ 'description' => array(
260
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
261
+ 'type' => 'textarea',
262
+ 'recommended' => true,
263
+ 'desc' => __("Event description", "wp-seo-structured-data-schema")
264
+ ),
265
+ 'performerName' => array(
266
+ 'title' => __('Performer Name', "wp-seo-structured-data-schema"),
267
+ 'type' => 'text',
268
+ 'recommended' => true,
269
+ 'desc' => __("The performer's name.", "wp-seo-structured-data-schema")
270
+ ),
271
+ 'image' => array(
272
+ 'title' => __('Image URL', "wp-seo-structured-data-schema"),
273
+ 'type' => 'url',
274
+ 'recommended' => true,
275
+ 'desc' => __("URL of an image or logo for the event or tour", "wp-seo-structured-data-schema")
276
+ ),
277
+ 'price' => array(
278
+ 'title' => __('Price', "wp-seo-structured-data-schema"),
279
+ 'type' => 'number',
280
+ 'recommended' => true,
281
+ 'attr' => 'step="any"',
282
+ 'desc' => __("This is highly recommended. The lowest available price, including service charges and fees, of this type of ticket. <span class='required'>Not required but (Recommended)</span>", "wp-seo-structured-data-schema")
283
+ ),
284
+ 'priceCurrency' => array(
285
+ 'title' => __('Price currency', "wp-seo-structured-data-schema"),
286
+ 'type' => 'text',
287
+ 'desc' => __("The 3-letter currency code. (USD)", "wp-seo-structured-data-schema")
288
+ ),
289
+ 'availability' => array(
290
+ 'title' => 'Availability',
291
+ 'type' => 'select',
292
+ 'recommended' => true,
293
+ 'empty' => "Select one",
294
+ 'options' => array(
295
+ 'http://schema.org/InStock' => 'InStock',
296
+ 'http://schema.org/SoldOut' => 'SoldOut',
297
+ 'http://schema.org/PreOrder' => 'PreOrder',
298
+ ),
299
+ ),
300
+ 'validFrom' => array(
301
+ 'title' => __('Valid From', "wp-seo-structured-data-schema-pro"),
302
+ 'type' => 'text',
303
+ 'recommended' => true,
304
+ 'class' => 'kcseo-date',
305
+ 'desc' => __(sprintf("The date and time when tickets go on sale (only required on date-restricted offers), in <a href='%s' target='_blank'>ISO-8601 format</a>", 'https://en.wikipedia.org/wiki/ISO_8601'), "wp-seo-structured-data-schema-pro")
306
+ ),
307
+ 'url' => array(
308
+ 'title' => 'URL',
309
+ 'recommended' => true,
310
+ 'type' => 'url',
311
+ 'placeholder' => 'URL',
312
+ 'desc' => __("A link to the event's details page. <span class='required'>Not required but (Recommended)</span>", "wp-seo-structured-data-schema")
313
+ ),
314
+ )
315
+ ),
316
+ 'product' => array(
317
+ 'pro' => false,
318
+ 'title' => __('Product', "wp-seo-structured-data-schema"),
319
+ 'fields' => array(
320
+ 'active' => array(
321
+ 'type' => 'checkbox'
322
+ ),
323
+ 'name' => array(
324
+ 'title' => __('Name', "wp-seo-structured-data-schema"),
325
+ 'type' => 'text',
326
+ 'required' => true,
327
+ 'desc' => __("The name of the product.", "wp-seo-structured-data-schema")
328
+ ),
329
+ 'image' => array(
330
+ 'title' => __('Image', "wp-seo-structured-data-schema"),
331
+ 'type' => 'image',
332
+ 'desc' => __("The URL of a product photo. Pictures clearly showing the product, e.g. against a white background, are preferred.", "wp-seo-structured-data-schema")
333
+ ),
334
+ 'description' => array(
335
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
336
+ 'type' => 'textarea',
337
+ 'desc' => __("Product description.", "wp-seo-structured-data-schema")
338
+ ),
339
+ 'brand' => array(
340
+ 'title' => __('Brand', "wp-seo-structured-data-schema"),
341
+ 'type' => 'text',
342
+ 'desc' => __("The brand of the product.", "wp-seo-structured-data-schema")
343
+ ),
344
+ 'reviewRatingValue' => array(
345
+ 'title' => __('Review rating value', "wp-seo-structured-data-schema-pro"),
346
+ 'type' => 'number',
347
+ 'recommended' => true,
348
+ 'attr' => 'step="any"',
349
+ 'desc' => __("Rating value. (1 , 2.5, 3, 5 etc)", "wp-seo-structured-data-schema-pro")
350
+ ),
351
+ 'reviewBestRating' => array(
352
+ 'title' => __('Review Best rating', "wp-seo-structured-data-schema-pro"),
353
+ 'type' => 'number',
354
+ 'recommended' => true,
355
+ 'attr' => 'step="any"',
356
+ ),
357
+ 'reviewWorstRating' => array(
358
+ 'title' => __('Review Worst rating', "wp-seo-structured-data-schema-pro"),
359
+ 'type' => 'number',
360
+ 'recommended' => true,
361
+ 'attr' => 'step="any"',
362
+ ),
363
+ 'reviewAuthor' => array(
364
+ 'title' => __('Review author', "wp-seo-structured-data-schema-pro"),
365
+ 'type' => 'text'
366
+ ),
367
+ 'ratingValue' => array(
368
+ 'title' => __('Rating value', "wp-seo-structured-data-schema"),
369
+ 'type' => 'number',
370
+ 'attr' => 'step="any"',
371
+ 'desc' => __("Rating value. (1 , 2.5, 3, 5 etc)", "wp-seo-structured-data-schema")
372
+ ),
373
+ 'reviewCount' => array(
374
+ 'title' => __('Total review count', "wp-seo-structured-data-schema"),
375
+ 'type' => 'number',
376
+ 'attr' => 'step="any"',
377
+ 'desc' => __("Review rating value. <span class='required'>This is required if (Rating value) is given</span>", "wp-seo-structured-data-schema")
378
+ ),
379
+ 'price' => array(
380
+ 'title' => __('Price', "wp-seo-structured-data-schema"),
381
+ 'type' => 'number',
382
+ 'attr' => 'step="any"',
383
+ 'desc' => __("The lowest available price, including service charges and fees, of this type of ticket.", "wp-seo-structured-data-schema")
384
+ ),
385
+ 'priceValidUntil' => array(
386
+ 'title' => __('PriceValidUntil', "wp-seo-structured-data-schema-pro"),
387
+ 'type' => 'text',
388
+ 'recommended' => true,
389
+ 'class' => 'kcseo-date',
390
+ 'desc' => __("The date (in ISO 8601 date format) after which the price will no longer be available.", "wp-seo-structured-data-schema-pro")
391
+ ),
392
+ 'priceCurrency' => array(
393
+ 'title' => __('Price currency', "wp-seo-structured-data-schema"),
394
+ 'type' => 'text',
395
+ 'desc' => __("The 3-letter currency code.", "wp-seo-structured-data-schema")
396
+ ),
397
+ 'availability' => array(
398
+ 'title' => 'Availability',
399
+ 'type' => 'select',
400
+ 'empty' => "Select one",
401
+ 'options' => array(
402
+ 'http://schema.org/InStock' => 'InStock',
403
+ 'http://schema.org/InStoreOnly' => 'InStoreOnly',
404
+ 'http://schema.org/OutOfStock' => 'OutOfStock',
405
+ 'http://schema.org/SoldOut' => 'SoldOut',
406
+ 'http://schema.org/OnlineOnly' => 'OnlineOnly',
407
+ 'http://schema.org/LimitedAvailability' => 'LimitedAvailability',
408
+ 'http://schema.org/Discontinued' => 'Discontinued',
409
+ 'http://schema.org/PreOrder' => 'PreOrder',
410
+ ),
411
+ 'desc' => __("Select a availability type", "wp-seo-structured-data-schema")
412
+ ),
413
+ 'itemCondition' => array(
414
+ 'title' => 'Product condition',
415
+ 'type' => 'select',
416
+ 'empty' => "Select one",
417
+ 'options' => array(
418
+ 'http://schema.org/NewCondition' => 'NewCondition',
419
+ 'http://schema.org/UsedCondition' => 'UsedCondition',
420
+ 'http://schema.org/DamagedCondition' => 'DamagedCondition',
421
+ 'http://schema.org/RefurbishedCondition' => 'RefurbishedCondition',
422
+ ),
423
+ 'desc' => __("Select a condition", "wp-seo-structured-data-schema")
424
+ ),
425
+ 'url' => array(
426
+ 'title' => __('Product URL', "wp-seo-structured-data-schema"),
427
+ 'type' => 'url',
428
+ 'desc' => __("A URL to the product web page (that includes the Offer). (Don't use offerURL for markup that appears on the product page itself.)", "wp-seo-structured-data-schema")
429
+ ),
430
+ )
431
+ ),
432
+ 'video' => array(
433
+ 'pro' => false,
434
+ 'title' => __('Video', "wp-seo-structured-data-schema"),
435
+ 'fields' => array(
436
+ 'active' => array(
437
+ 'type' => 'checkbox'
438
+ ),
439
+ 'name' => array(
440
+ 'title' => __('Name', "wp-seo-structured-data-schema"),
441
+ 'type' => 'text',
442
+ 'required' => true,
443
+ 'desc' => __("The title of the video", "wp-seo-structured-data-schema")
444
+ ),
445
+ 'description' => array(
446
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
447
+ 'type' => 'textarea',
448
+ 'required' => true,
449
+ 'desc' => __("The description of the video", "wp-seo-structured-data-schema")
450
+ ),
451
+ 'thumbnailUrl' => array(
452
+ 'title' => 'Thumbnail URL',
453
+ 'type' => 'url',
454
+ 'placeholder' => "URL",
455
+ 'required' => true,
456
+ 'desc' => __("A URL pointing to the video thumbnail image file. Images must be at least 160x90 pixels and at most 1920x1080 pixels.", "wp-seo-structured-data-schema")
457
+ ),
458
+ 'uploadDate' => array(
459
+ 'title' => __('Updated date', "wp-seo-structured-data-schema"),
460
+ 'type' => 'text',
461
+ 'class' => 'kcseo-date',
462
+ 'desc' => __('2015-02-05T08:00:00+08:00', "wp-seo-structured-data-schema")
463
+ ),
464
+ 'duration' => array(
465
+ 'title' => __('Duration', "wp-seo-structured-data-schema"),
466
+ 'type' => 'text',
467
+ 'desc' => __("The duration of the video in ISO 8601 format.(PT1M33S)", "wp-seo-structured-data-schema")
468
+ ),
469
+ 'contentUrl' => array(
470
+ 'title' => 'Content URL',
471
+ 'type' => 'url',
472
+ 'placeholder' => 'URL',
473
+ 'desc' => __("A URL pointing to the actual video media file. This file should be in .mpg, .mpeg, .mp4, .m4v, .mov, .wmv, .asf, .avi, .ra, .ram, .rm, .flv, or other video file format.", "wp-seo-structured-data-schema")
474
+ ),
475
+ 'embedUrl' => array(
476
+ 'title' => 'Embed URL',
477
+ 'placeholder' => 'URL',
478
+ 'type' => 'url',
479
+ 'desc' => __("A URL pointing to a player for the specific video. Usually this is the information in the src element of an < embed> tag.Example: Dailymotion: http://www.dailymotion.com/swf/x1o2g.", "wp-seo-structured-data-schema")
480
+ ),
481
+ 'interactionCount' => array(
482
+ 'title' => __('Interaction count', "wp-seo-structured-data-schema"),
483
+ 'type' => 'text',
484
+ 'desc' => __("The number of times the video has been viewed.", "wp-seo-structured-data-schema")
485
+ ),
486
+ 'expires' => array(
487
+ 'title' => __('Expires', "wp-seo-structured-data-schema"),
488
+ 'type' => 'text',
489
+ 'class' => 'kcseo-date',
490
+ 'desc' => __("Like this: 2015-12-25", "wp-seo-structured-data-schema")
491
+ ),
492
+ )
493
+ ),
494
+ 'service' => array(
495
+ 'pro' => false,
496
+ 'title' => __('Service', "wp-seo-structured-data-schema"),
497
+ 'fields' => array(
498
+ 'active' => array(
499
+ 'type' => 'checkbox'
500
+ ),
501
+ 'name' => array(
502
+ 'title' => __('Name', "wp-seo-structured-data-schema"),
503
+ 'type' => 'text',
504
+ 'required' => true,
505
+ 'desc' => __("The name of the Service.", "wp-seo-structured-data-schema")
506
+ ),
507
+ 'serviceType' => array(
508
+ 'title' => __('Service type', "wp-seo-structured-data-schema"),
509
+ 'type' => 'text',
510
+ 'required' => true,
511
+ 'desc' => __("The type of service being offered, e.g. veterans' benefits, emergency relief, etc.", "wp-seo-structured-data-schema")
512
+ ),
513
+ 'additionalType' => array(
514
+ 'title' => 'Additional type(URL)',
515
+ 'type' => 'url',
516
+ 'placeholder' => 'URL',
517
+ 'desc' => __("An additional type for the service, typically used for adding more specific types from external vocabularies in microdata syntax.", "wp-seo-structured-data-schema")
518
+ ),
519
+ 'award' => array(
520
+ 'title' => __('Award', "wp-seo-structured-data-schema"),
521
+ 'type' => 'text',
522
+ 'desc' => __("An award won by or for this service.", "wp-seo-structured-data-schema")
523
+ ),
524
+ 'category' => array(
525
+ 'title' => __('Category', "wp-seo-structured-data-schema"),
526
+ 'type' => 'text',
527
+ 'desc' => __("A category for the service.", "wp-seo-structured-data-schema")
528
+ ),
529
+ 'providerMobility' => array(
530
+ 'title' => __('Provider mobility', "wp-seo-structured-data-schema"),
531
+ 'type' => 'text',
532
+ 'desc' => __("Indicates the mobility of a provided service (e.g. 'static', 'dynamic').", "wp-seo-structured-data-schema")
533
+ ),
534
+ 'description' => array(
535
+ 'title' => 'Description',
536
+ 'type' => 'textarea',
537
+ 'require' => true,
538
+ 'desc' => __("A short description of the service.", "wp-seo-structured-data-schema")
539
+ ),
540
+ 'image' => array(
541
+ 'title' => 'Image URL',
542
+ 'type' => 'url',
543
+ 'require' => false,
544
+ 'desc' => __("An image of the service. This should be a URL.", "wp-seo-structured-data-schema")
545
+ ),
546
+ 'mainEntityOfPage' => array(
547
+ 'title' => 'Main entity of page URL',
548
+ 'type' => 'url',
549
+ 'require' => false,
550
+ 'desc' => __("Indicates a page (or other CreativeWork) for which this thing is the main entity being described.", "wp-seo-structured-data-schema")
551
+ ),
552
+ 'sameAs' => array(
553
+ 'title' => 'Same as URL',
554
+ 'type' => 'url',
555
+ 'placeholder' => 'URL',
556
+ 'desc' => __("URL of a reference Web page that unambiguously indicates the service's identity. E.g. the URL of the service's Wikipedia page, Freebase page, or official website.", "wp-seo-structured-data-schema")
557
+ ),
558
+ 'url' => array(
559
+ 'title' => 'Url of the service',
560
+ 'type' => 'url',
561
+ 'placeholder' => 'URL',
562
+ 'desc' => __("URL of the service.", "wp-seo-structured-data-schema")
563
+ ),
564
+ 'alternateName' => array(
565
+ 'title' => __('Alternate name', "wp-seo-structured-data-schema"),
566
+ 'type' => 'text',
567
+ 'desc' => __('An alias for the service.', "wp-seo-structured-data-schema")
568
+ ),
569
+ )
570
+ ),
571
+ 'review' => array(
572
+ 'pro' => false,
573
+ 'title' => __('Review', "wp-seo-structured-data-schema"),
574
+ 'fields' => array(
575
+ 'active' => array(
576
+ 'type' => 'checkbox'
577
+ ),
578
+ 'itemName' => array(
579
+ 'title' => __('Name of the reviewed item', "wp-seo-structured-data-schema"),
580
+ 'type' => 'text',
581
+ 'required' => true,
582
+ 'desc' => __("The item that is being reviewed.", "wp-seo-structured-data-schema")
583
+ ),
584
+ 'reviewBody' => array(
585
+ 'title' => __('Review body', "wp-seo-structured-data-schema"),
586
+ 'type' => 'textarea',
587
+ 'required' => true,
588
+ 'desc' => __("The actual body of the review.", "wp-seo-structured-data-schema")
589
+ ),
590
+ 'name' => array(
591
+ 'title' => __('Review name', "wp-seo-structured-data-schema"),
592
+ 'type' => 'text',
593
+ 'required' => true,
594
+ 'desc' => __("A particular name for the review.", "wp-seo-structured-data-schema")
595
+ ),
596
+ 'author' => array(
597
+ 'title' => __('Author', "wp-seo-structured-data-schema"),
598
+ 'type' => 'text',
599
+ 'required' => true,
600
+ 'author' => 'Author name',
601
+ 'desc' => __("The author of the review. The reviewer’s name needs to be a valid name.", "wp-seo-structured-data-schema")
602
+ ),
603
+ 'datePublished' => array(
604
+ 'title' => __('Date of Published', "wp-seo-structured-data-schema"),
605
+ 'type' => 'text',
606
+ 'class' => 'kcseo-date',
607
+ 'desc' => __("Like this: 2015-12-25", "wp-seo-structured-data-schema")
608
+ ),
609
+ 'ratingValue' => array(
610
+ 'title' => __('Rating value', "wp-seo-structured-data-schema"),
611
+ 'type' => 'number',
612
+ 'attr' => 'step="any"',
613
+ 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
614
+ ),
615
+ 'bestRating' => array(
616
+ 'title' => __('Best rating', "wp-seo-structured-data-schema"),
617
+ 'type' => 'number',
618
+ 'attr' => 'step="any"',
619
+ 'desc' => __("The highest value allowed in this rating system.", "wp-seo-structured-data-schema")
620
+ ),
621
+ 'worstRating' => array(
622
+ 'title' => __('Worst rating', "wp-seo-structured-data-schema"),
623
+ 'type' => 'number',
624
+ 'attr' => 'step="any"',
625
+ 'desc' => __("The lowest value allowed in this rating system. * Required if the rating system is not on a 5-point scale. If worstRating is omitted, 1 is assumed.", "wp-seo-structured-data-schema")
626
+ ),
627
+ 'publisher' => array(
628
+ 'title' => __('Name of the organization', "wp-seo-structured-data-schema"),
629
+ 'type' => 'text',
630
+ 'desc' => __('The publisher of the review.', "wp-seo-structured-data-schema")
631
+ )
632
+ )
633
+ ),
634
+ 'aggregate_rating' => array(
635
+ 'pro' => false,
636
+ 'title' => __('Aggregate Ratings', "wp-seo-structured-data-schema"),
637
+ 'fields' => array(
638
+ 'active' => array(
639
+ 'type' => 'checkbox'
640
+ ),
641
+ 'schema_type' => array(
642
+ 'title' => __('Schema type', "wp-seo-structured-data-schema"),
643
+ 'type' => 'schema_type',
644
+ 'required' => true,
645
+ 'options' => self::getSiteTypes(),
646
+ 'empty' => "Select one",
647
+ 'desc' => __("Use the most appropriate schema type for what is being reviewed.", "wp-seo-structured-data-schema")
648
+ ),
649
+ 'name' => array(
650
+ 'title' => __('Name of the item', "wp-seo-structured-data-schema"),
651
+ 'type' => 'text',
652
+ 'required' => true,
653
+ 'desc' => __("The item that is being rated.", "wp-seo-structured-data-schema")
654
+ ),
655
+ 'image' => array(
656
+ 'title' => 'Image',
657
+ 'type' => 'image',
658
+ 'required' => true,
659
+ 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder'
660
+ ),
661
+ 'priceRange' => array(
662
+ 'title' => 'Price Range',
663
+ 'recommended' => true,
664
+ 'type' => 'text',
665
+ 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder',
666
+ 'desc' => __("The price range of the business, for example $$$.", "wp-seo-structured-data-schema")
667
+ ),
668
+ 'telephone' => array(
669
+ 'title' => 'Telephone',
670
+ 'recommended' => true,
671
+ 'type' => 'text',
672
+ 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder'
673
+ ),
674
+ 'address' => array(
675
+ 'title' => 'Address',
676
+ 'recommended' => true,
677
+ 'type' => 'text',
678
+ 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder',
679
+ ),
680
+ 'description' => array(
681
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
682
+ 'type' => 'textarea',
683
+ 'desc' => __("Description for thr review", "wp-seo-structured-data-schema")
684
+ ),
685
+ 'ratingCount' => array(
686
+ 'title' => __('Rating Count', "wp-seo-structured-data-schema"),
687
+ 'type' => 'number',
688
+ 'attr' => 'step="any"',
689
+ 'required' => true,
690
+ 'desc' => __("The total number of ratings for the item on your site. <span class='required'>* At least one of ratingCount or reviewCount is required.</span>", "wp-seo-structured-data-schema")
691
+ ),
692
+ 'reviewCount' => array(
693
+ 'title' => __('Review Count', "wp-seo-structured-data-schema"),
694
+ 'type' => 'number',
695
+ 'attr' => 'step="any"',
696
+ 'required' => true,
697
+ 'desc' => __("Specifies the number of people who provided a review with or without an accompanying rating. At least one of ratingCount or reviewCount is required.", "wp-seo-structured-data-schema")
698
+ ),
699
+ 'ratingValue' => array(
700
+ 'title' => __('Rating Value', "wp-seo-structured-data-schema"),
701
+ 'type' => 'number',
702
+ 'attr' => 'step="any"',
703
+ 'required' => true,
704
+ 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
705
+ ),
706
+ 'ratingValue' => array(
707
+ 'title' => __('Rating Value', "wp-seo-structured-data-schema"),
708
+ 'attr' => 'step="any"',
709
+ 'type' => 'number',
710
+ 'required' => true,
711
+ 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
712
+ ),
713
+ 'bestRating' => array(
714
+ 'title' => __('Best Rating', "wp-seo-structured-data-schema"),
715
+ 'type' => 'number',
716
+ 'attr' => 'step="any"',
717
+ 'required' => true,
718
+ 'desc' => __("The highest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If bestRating is omitted, 5 is assumed.", "wp-seo-structured-data-schema")
719
+ ),
720
+ 'worstRating' => array(
721
+ 'title' => __('Worst Rating', "wp-seo-structured-data-schema"),
722
+ 'type' => 'number',
723
+ 'attr' => 'step="any"',
724
+ 'required' => true,
725
+ 'desc' => __("The lowest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If worstRating is omitted, 1 is assumed.", "wp-seo-structured-data-schema")
726
+ )
727
+ )
728
+ ),
729
+ 'restaurant' => array(
730
+ 'pro' => false,
731
+ 'title' => __('Restaurant', "wp-seo-structured-data-schema"),
732
+ 'fields' => array(
733
+ 'active' => array(
734
+ 'type' => 'checkbox'
735
+ ),
736
+ 'name' => array(
737
+ 'title' => __('Name of the Restaurant', "wp-seo-structured-data-schema"),
738
+ 'type' => 'text',
739
+ 'required' => true
740
+ ),
741
+ 'description' => array(
742
+ 'title' => __('Description of the Restaurant', "wp-seo-structured-data-schema"),
743
+ 'type' => 'textarea',
744
+ ),
745
+ 'openingHours' => array(
746
+ 'title' => __('Opening Hours', "wp-seo-structured-data-schema"),
747
+ 'type' => 'textarea',
748
+ 'desc' => __('Mo,Tu,We,Th,Fr,Sa,Su 11:30-23:00', "wp-seo-structured-data-schema")
749
+ ),
750
+ 'telephone' => array(
751
+ 'title' => __('Telephone', "wp-seo-structured-data-schema"),
752
+ 'type' => 'text',
753
+ 'desc' => __('+155501003333', "wp-seo-structured-data-schema")
754
+ ),
755
+ 'menu' => array(
756
+ 'title' => __('Menu', "wp-seo-structured-data-schema"),
757
+ 'type' => 'text',
758
+ 'desc' => __('http://example.com/menu', "wp-seo-structured-data-schema")
759
+ ),
760
+ 'image' => array(
761
+ 'title' => __('Image', "wp-seo-structured-data-schema"),
762
+ 'type' => 'image',
763
+ 'required' => true
764
+ ),
765
+ 'address' => array(
766
+ 'title' => __('Address', "wp-seo-structured-data-schema"),
767
+ 'type' => 'textarea'
768
+ ),
769
+ 'priceRange' => array(
770
+ 'title' => __('Price Range', "wp-seo-structured-data-schema"),
771
+ 'type' => 'text',
772
+ 'desc' => __('The price range of the business, for example $$$', "wp-seo-structured-data-schema")
773
+ ),
774
+ 'servesCuisine' => array(
775
+ 'title' => __('Serves Cuisine', "wp-seo-structured-data-schema"),
776
+ 'type' => 'text',
777
+ 'desc' => __('The cuisine of the restaurant.', "wp-seo-structured-data-schema")
778
+ )
779
+ )
780
+ ),
781
+ 'localBusiness' => array(
782
+ 'pro' => false,
783
+ 'title' => __('Local Business', "wp-seo-structured-data-schema"),
784
+ 'fields' => array(
785
+ 'active' => array(
786
+ 'type' => 'checkbox'
787
+ ),
788
+ 'name' => array(
789
+ 'title' => __('Name', "wp-seo-structured-data-schema"),
790
+ 'type' => 'text',
791
+ 'required' => true
792
+ ),
793
+ 'description' => array(
794
+ 'title' => __('Description', "wp-seo-structured-data-schema"),
795
+ 'type' => 'textarea',
796
+ ),
797
+ 'image' => array(
798
+ 'title' => __('Business Logo', "wp-seo-structured-data-schema"),
799
+ 'type' => 'image',
800
+ 'required' => true
801
+ ),
802
+ 'priceRange' => array(
803
+ 'title' => __('Price Range', "wp-seo-structured-data-schema"),
804
+ 'type' => 'text',
805
+ 'recommended' => true,
806
+ 'desc' => __("The price range of the business, for example $$$.", "wp-seo-structured-data-schema")
807
+ ),
808
+ 'addressLocality' => array(
809
+ 'title' => __('Address locality', "wp-seo-structured-data-schema"),
810
+ 'type' => 'text',
811
+ 'desc' => __('City (i.e Kansas city)', "wp-seo-structured-data-schema")
812
+ ),
813
+ 'addressRegion' => array(
814
+ 'title' => __('Address region', "wp-seo-structured-data-schema"),
815
+ 'type' => 'text',
816
+ 'desc' => __('State (i.e. MO)', "wp-seo-structured-data-schema")
817
+ ),
818
+ 'postalCode' => array(
819
+ 'title' => __('Postal code', "wp-seo-structured-data-schema"),
820
+ 'type' => 'text',
821
+ ),
822
+ 'streetAddress' => array(
823
+ 'title' => __('Street address', "wp-seo-structured-data-schema"),
824
+ 'type' => 'text',
825
+ ),
826
+ 'telephone' => array(
827
+ 'title' => __('Telephone', "wp-seo-structured-data-schema"),
828
+ 'type' => 'text',
829
+ 'recommended' => true,
830
+ )
831
+ )
832
+ ),
833
+ 'book' => array(
834
+ 'pro' => true,
835
+ 'title' => __("Book", "wp-seo-structured-data-schema"),
836
+ ),
837
+ 'course' => array(
838
+ 'pro' => true,
839
+ 'title' => __("Course", "wp-seo-structured-data-schema"),
840
+ ),
841
+ 'JobPosting' => array(
842
+ 'pro' => true,
843
+ 'title' => __("Job Posting", "wp-seo-structured-data-schema"),
844
+ ),
845
+ 'movie' => array(
846
+ 'pro' => true,
847
+ 'title' => __("Movie", "wp-seo-structured-data-schema"),
848
+ ),
849
+ 'music' => array(
850
+ 'pro' => true,
851
+ 'title' => __("Music", "wp-seo-structured-data-schema"),
852
+ ),
853
+ 'recipe' => array(
854
+ 'pro' => true,
855
+ 'title' => __("Recipe", "wp-seo-structured-data-schema"),
856
+ ),
857
+ 'TVEpisode' => array(
858
+ 'pro' => true,
859
+ 'title' => __("TVEpisode", "wp-seo-structured-data-schema"),
860
+ ),
861
+ 'question' => array(
862
+ 'pro' => true,
863
+ 'title' => __("QAPage", "wp-seo-structured-data-schema"),
864
+ ),
865
+ 'itemList' => array(
866
+ 'pro' => true,
867
+ 'title' => __("Item List", "wp-seo-structured-data-schema"),
868
+ )
869
+ );
870
+
871
+ return apply_filters('kcseo_schema_types', $schemas);
872
+ }
873
+
874
+ static function getSiteTypes() {
875
+ $siteTypes = array(
876
+ 'Organization',
877
+ 'LocalBusiness' => array(
878
+ 'AnimalShelter',
879
+ 'AutomotiveBusiness' => array(
880
+ 'AutoBodyShop',
881
+ 'AutoDealer',
882
+ 'AutoPartsStore',
883
+ 'AutoRental',
884
+ 'AutoRepair',
885
+ 'AutoWash',
886
+ 'GasStation',
887
+ 'MotorcycleDealer',
888
+ 'MotorcycleRepair'
889
+ ),
890
+ 'ChildCare',
891
+ 'DryCleaningOrLaundry',
892
+ 'EmergencyService',
893
+ 'EmploymentAgency',
894
+ 'EntertainmentBusiness' => array(
895
+ 'AdultEntertainment',
896
+ 'AmusementPark',
897
+ 'ArtGallery',
898
+ 'Casino',
899
+ 'ComedyClub',
900
+ 'MovieTheater',
901
+ 'NightClub',
902
+
903
+ ),
904
+ 'FinancialService' => array(
905
+ 'AccountingService',
906
+ 'AutomatedTeller',
907
+ 'BankOrCreditUnion',
908
+ 'InsuranceAgency',
909
+ ),
910
+ 'FoodEstablishment' => array(
911
+ 'Bakery',
912
+ 'BarOrPub',
913
+ 'Brewery',
914
+ 'CafeOrCoffeeShop',
915
+ 'FastFoodRestaurant',
916
+ 'IceCreamShop',
917
+ 'Restaurant',
918
+ 'Winery',
919
+ ),
920
+ 'GovernmentOffice',
921
+ 'HealthAndBeautyBusiness' => array(
922
+ 'BeautySalon',
923
+ 'DaySpa',
924
+ 'HairSalon',
925
+ 'HealthClub',
926
+ 'NailSalon',
927
+ 'TattooParlor',
928
+ ),
929
+ 'HomeAndConstructionBusiness' => array(
930
+ 'Electrician',
931
+ 'GeneralContractor',
932
+ 'HVACBusiness',
933
+ 'HousePainter',
934
+ 'Locksmith',
935
+ 'MovingCompany',
936
+ 'Plumber',
937
+ 'RoofingContractor',
938
+ ),
939
+ 'InternetCafe',
940
+ 'LegalService' => array(
941
+ 'Attorney',
942
+ 'Notary',
943
+ ),
944
+ 'Library',
945
+ 'MedicalBusiness' => array(
946
+ 'CommunityHealth',
947
+ 'Dentist',
948
+ 'Dermatology',
949
+ 'DietNutrition',
950
+ 'Emergency',
951
+ 'Geriatric',
952
+ 'Gynecologic',
953
+ 'MedicalClinic',
954
+ 'Midwifery',
955
+ 'Nursing',
956
+ 'Obstetric',
957
+ 'Oncologic',
958
+ 'Optician',
959
+ 'Optometric',
960
+ 'Otolaryngologic',
961
+ 'Pediatric',
962
+ 'Pharmacy',
963
+ 'Physician',
964
+ 'Physiotherapy',
965
+ 'PlasticSurgery',
966
+ 'Podiatric',
967
+ 'PrimaryCare',
968
+ 'Psychiatric',
969
+ 'PublicHealth',
970
+ ),
971
+ 'LodgingBusiness' => array(
972
+ 'BedAndBreakfast',
973
+ 'Campground',
974
+ 'Hostel',
975
+ 'Hotel',
976
+ 'Motel',
977
+ 'Resort',
978
+ ),
979
+ 'ProfessionalService',
980
+ 'RadioStation',
981
+ 'RealEstateAgent',
982
+ 'RecyclingCenter',
983
+ 'SelfStorage',
984
+ 'ShoppingCenter',
985
+ 'SportsActivityLocation' => array(
986
+ 'BowlingAlley',
987
+ 'ExerciseGym',
988
+ 'GolfCourse',
989
+ 'HealthClub',
990
+ 'PublicSwimmingPool',
991
+ 'SkiResort',
992
+ 'SportsClub',
993
+ 'StadiumOrArena',
994
+ 'TennisComplex',
995
+ ),
996
+ 'Store' => array(
997
+ 'AutoPartsStore',
998
+ 'BikeStore',
999
+ 'BookStore',
1000
+ 'ClothingStore',
1001
+ 'ComputerStore',
1002
+ 'ConvenienceStore',
1003
+ 'DepartmentStore',
1004
+ 'ElectronicsStore',
1005
+ 'Florist',
1006
+ 'FurnitureStore',
1007
+ 'GardenStore',
1008
+ 'GroceryStore',
1009
+ 'HardwareStore',
1010
+ 'HobbyShop',
1011
+ 'HomeGoodsStore',
1012
+ 'JewelryStore',
1013
+ 'LiquorStore',
1014
+ 'MensClothingStore',
1015
+ 'MobilePhoneStore',
1016
+ 'MovieRentalStore',
1017
+ 'MusicStore',
1018
+ 'OfficeEquipmentStore',
1019
+ 'OutletStore',
1020
+ 'PawnShop',
1021
+ 'PetStore',
1022
+ 'ShoeStore',
1023
+ 'SportingGoodsStore',
1024
+ 'TireShop',
1025
+ 'ToyStore',
1026
+ 'WholesaleStore'
1027
+ ),
1028
+ 'TelevisionStation',
1029
+ 'TouristInformationCenter',
1030
+ 'TravelAgency'
1031
+ )
1032
+ );
1033
+
1034
+ return apply_filters('kcseo_site_types', $siteTypes);
1035
+ }
1036
+
1037
+ static function getCountryList() {
1038
+ $countryList = array(
1039
+ "AF" => "Afghanistan",
1040
+ "AX" => "Aland Islands",
1041
+ "AL" => "Albania",
1042
+ "DZ" => "Algeria",
1043
+ "AS" => "American Samoa",
1044
+ "AD" => "Andorra",
1045
+ "AO" => "Angola",
1046
+ "AI" => "Anguilla",
1047
+ "AQ" => "Antarctica",
1048
+ "AG" => "Antigua and Barbuda",
1049
+ "AR" => "Argentina",
1050
+ "AM" => "Armenia",
1051
+ "AW" => "Aruba",
1052
+ "AU" => "Australia",
1053
+ "AT" => "Austria",
1054
+ "AZ" => "Azerbaijan",
1055
+ "BS" => "Bahamas",
1056
+ "BH" => "Bahrain",
1057
+ "BD" => "Bangladesh",
1058
+ "BB" => "Barbados",
1059
+ "BY" => "Belarus",
1060
+ "BE" => "Belgium",
1061
+ "BZ" => "Belize",
1062
+ "BJ" => "Benin",
1063
+ "BM" => "Bermuda",
1064
+ "BT" => "Bhutan",
1065
+ "BO" => "Bolivia, Plurinational State of",
1066
+ "BQ" => "Bonaire, Sint Eustatius and Saba",
1067
+ "BA" => "Bosnia and Herzegovina",
1068
+ "BW" => "Botswana",
1069
+ "BV" => "Bouvet Island",
1070
+ "BR" => "Brazil",
1071
+ "IO" => "British Indian Ocean Territory",
1072
+ "BN" => "Brunei Darussalam",
1073
+ "BG" => "Bulgaria",
1074
+ "BF" => "Burkina Faso",
1075
+ "BI" => "Burundi",
1076
+ "KH" => "Cambodia",
1077
+ "CM" => "Cameroon",
1078
+ "CA" => "Canada",
1079
+ "CV" => "Cape Verde",
1080
+ "KY" => "Cayman Islands",
1081
+ "CF" => "Central African Republic",
1082
+ "TD" => "Chad",
1083
+ "CL" => "Chile",
1084
+ "CN" => "China",
1085
+ "CX" => "Christmas Island",
1086
+ "CC" => "Cocos (Keeling) Islands",
1087
+ "CO" => "Colombia",
1088
+ "KM" => "Comoros",
1089
+ "CG" => "Congo",
1090
+ "CD" => "Congo, the Democratic Republic of the",
1091
+ "CK" => "Cook Islands",
1092
+ "CR" => "Costa Rica",
1093
+ "CI" => "Côte d Ivoire",
1094
+ "HR" => "Croatia",
1095
+ "CU" => "Cuba",
1096
+ "CW" => "Curaçao",
1097
+ "CY" => "Cyprus",
1098
+ "CZ" => "Czech Republic",
1099
+ "DK" => "Denmark",
1100
+ "DJ" => "Djibouti",
1101
+ "DM" => "Dominica",
1102
+ "DO" => "Dominican Republic",
1103
+ "EC" => "Ecuador",
1104
+ "EG" => "Egypt",
1105
+ "SV" => "El Salvador",
1106
+ "GQ" => "Equatorial Guinea",
1107
+ "ER" => "Eritrea",
1108
+ "EE" => "Estonia",
1109
+ "ET" => "Ethiopia",
1110
+ "FK" => "Falkland Islands (Malvinas)",
1111
+ "FO" => "Faroe Islands",
1112
+ "FJ" => "Fiji",
1113
+ "FI" => "Finland",
1114
+ "FR" => "France",
1115
+ "GF" => "French Guiana",
1116
+ "PF" => "French Polynesia",
1117
+ "TF" => "French Southern Territories",
1118
+ "GA" => "Gabon",
1119
+ "GM" => "Gambia",
1120
+ "GE" => "Georgia",
1121
+ "DE" => "Germany",
1122
+ "GH" => "Ghana",
1123
+ "GI" => "Gibraltar",
1124
+ "GR" => "Greece",
1125
+ "GL" => "Greenland",
1126
+ "GD" => "Grenada",
1127
+ "GP" => "Guadeloupe",
1128
+ "GU" => "Guam",
1129
+ "GT" => "Guatemala",
1130
+ "GG" => "Guernsey",
1131
+ "GN" => "Guinea",
1132
+ "GW" => "Guinea-Bissau",
1133
+ "GY" => "Guyana",
1134
+ "HT" => "Haiti",
1135
+ "HM" => "Heard Island and McDonald Islands",
1136
+ "VA" => "Holy See (Vatican City State)",
1137
+ "HN" => "Honduras",
1138
+ "HK" => "Hong Kong",
1139
+ "HU" => "Hungary",
1140
+ "IS" => "Iceland",
1141
+ "IN" => "India",
1142
+ "ID" => "Indonesia",
1143
+ "IR" => "Iran, Islamic Republic of",
1144
+ "IQ" => "Iraq",
1145
+ "IE" => "Ireland",
1146
+ "IM" => "Isle of Man",
1147
+ "IL" => "Israel",
1148
+ "IT" => "Italy",
1149
+ "JM" => "Jamaica",
1150
+ "JP" => "Japan",
1151
+ "JE" => "Jersey",
1152
+ "JO" => "Jordan",
1153
+ "KZ" => "Kazakhstan",
1154
+ "KE" => "Kenya",
1155
+ "KI" => "Kiribati",
1156
+ "KP" => "Korea, Democratic People's Republic of",
1157
+ "KR" => "Korea, Republic of,",
1158
+ "KW" => "Kuwait",
1159
+ "KG" => "Kyrgyzstan",
1160
+ "LA" => "Lao Peoples Democratic Republic",
1161
+ "LV" => "Latvia",
1162
+ "LB" => "Lebanon",
1163
+ "LS" => "Lesotho",
1164
+ "LR" => "Liberia",
1165
+ "LY" => "Libya",
1166
+ "LI" => "Liechtenstein",
1167
+ "LT" => "Lithuania",
1168
+ "LU" => "Luxembourg",
1169
+ "MO" => "Macao",
1170
+ "MK" => "Macedonia, the former Yugoslav Republic of",
1171
+ "MG" => "Madagascar",
1172
+ "MW" => "Malawi",
1173
+ "MY" => "Malaysia",
1174
+ "MV" => "Maldives",
1175
+ "ML" => "Mali",
1176
+ "MT" => "Malta",
1177
+ "MH" => "Marshall Islands",
1178
+ "MQ" => "Martinique",
1179
+ "MR" => "Mauritania",
1180
+ "MU" => "Mauritius",
1181
+ "YT" => "Mayotte",
1182
+ "MX" => "Mexico",
1183
+ "FM" => "Micronesia, Federated States of",
1184
+ "MD" => "Moldova, Republic of",
1185
+ "MC" => "Monaco",
1186
+ "MN" => "Mongolia",
1187
+ "ME" => "Montenegro",
1188
+ "MS" => "Montserrat",
1189
+ "MA" => "Morocco",
1190
+ "MZ" => "Mozambique",
1191
+ "MM" => "Myanmar",
1192
+ "NA" => "Namibia",
1193
+ "NR" => "Nauru",
1194
+ "NP" => "Nepal",
1195
+ "NL" => "Netherlands",
1196
+ "NC" => "New Caledonia",
1197
+ "NZ" => "New Zealand",
1198
+ "NI" => "Nicaragua",
1199
+ "NE" => "Niger",
1200
+ "NG" => "Nigeria",
1201
+ "NU" => "Niue",
1202
+ "NF" => "Norfolk Island",
1203
+ "MP" => "Northern Mariana Islands",
1204
+ "NO" => "Norway",
1205
+ "OM" => "Oman",
1206
+ "PK" => "Pakistan",
1207
+ "PW" => "Palau",
1208
+ "PS" => "Palestine, State of",
1209
+ "PA" => "Panama",
1210
+ "PG" => "Papua New Guinea",
1211
+ "PY" => "Paraguay",
1212
+ "PE" => "Peru",
1213
+ "PH" => "Philippines",
1214
+ "PN" => "Pitcairn",
1215
+ "PL" => "Poland",
1216
+ "PT" => "Portugal",
1217
+ "PR" => "Puerto Rico",
1218
+ "QA" => "Qatar",
1219
+ "RE" => "Reunion",
1220
+ "RO" => "Romania",
1221
+ "RU" => "Russian Federation",
1222
+ "RW" => "Rwanda",
1223
+ "BL" => "Saint Barthélemy",
1224
+ "SH" => "Saint Helena, Ascension and Tristan da Cunha",
1225
+ "KN" => "Saint Kitts and Nevis",
1226
+ "LC" => "Saint Lucia",
1227
+ "MF" => "Saint Martin (French part)",
1228
+ "PM" => "Saint Pierre and Miquelon",
1229
+ "VC" => "Saint Vincent and the Grenadines",
1230
+ "WS" => "Samoa",
1231
+ "SM" => "San Marino",
1232
+ "ST" => "Sao Tome and Principe",
1233
+ "SA" => "Saudi Arabia",
1234
+ "SN" => "Senegal",
1235
+ "RS" => "Serbia",
1236
+ "SC" => "Seychelles",
1237
+ "SL" => "Sierra Leone",
1238
+ "SG" => "Singapore",
1239
+ "SX" => "Sint Maarten (Dutch part)",
1240
+ "SK" => "Slovakia",
1241
+ "SI" => "Slovenia",
1242
+ "SB" => "Solomon Islands",
1243
+ "SO" => "Somalia",
1244
+ "ZA" => "South Africa",
1245
+ "GS" => "South Georgia and the South Sandwich Islands",
1246
+ "SS" => "South Sudan",
1247
+ "ES" => "Spain",
1248
+ "LK" => "Sri Lanka",
1249
+ "SD" => "Sudan",
1250
+ "SR" => "Suriname",
1251
+ "SJ" => "Svalbard and Jan Mayen",
1252
+ "SZ" => "Swaziland",
1253
+ "SE" => "Sweden",
1254
+ "CH" => "Switzerland",
1255
+ "SY" => "Syrian Arab Republic",
1256
+ "TW" => "Taiwan, Province of China",
1257
+ "TJ" => "Tajikistan",
1258
+ "TZ" => "Tanzania, United Republic of",
1259
+ "TH" => "Thailand",
1260
+ "TL" => "Timor-Leste",
1261
+ "TG" => "Togo",
1262
+ "TK" => "Tokelau",
1263
+ "TO" => "Tonga",
1264
+ "TT" => "Trinidad and Tobago",
1265
+ "TN" => "Tunisia",
1266
+ "TR" => "Turkey",
1267
+ "TM" => "Turkmenistan",
1268
+ "TC" => "Turks and Caicos Islands",
1269
+ "TV" => "Tuvalu",
1270
+ "UG" => "Uganda",
1271
+ "UA" => "Ukraine",
1272
+ "AE" => "United Arab Emirates",
1273
+ "GB" => "United Kingdom",
1274
+ "US" => "United States",
1275
+ "UM" => "United States Minor Outlying Islands",
1276
+ "UY" => "Uruguay",
1277
+ "UZ" => "Uzbekistan",
1278
+ "VU" => "Vanuatu",
1279
+ "VE" => "Venezuela, Bolivarian Republic of",
1280
+ "VN" => "Viet Nam",
1281
+ "VG" => "Virgin Islands, British",
1282
+ "VI" => "Virgin Islands, U.S.",
1283
+ "WF" => "Wallis and Futuna",
1284
+ "EH" => "Western Sahara",
1285
+ "YE" => "Yemen",
1286
+ "ZM" => "Zambia",
1287
+ "ZW" => "Zimbabwe",
1288
+ );
1289
+
1290
+ return apply_filters('kcseo_country_list', $countryList);
1291
+ }
1292
+
1293
+ static function getContactTypes() {
1294
+ $contact_types = array(
1295
+ "Customer Service",
1296
+ "Technical Support",
1297
+ "Billing Support",
1298
+ "Bill Payment",
1299
+ "Sales",
1300
+ "Reservations",
1301
+ "Credit Card Support",
1302
+ "Emergency",
1303
+ "Baggage Tracking",
1304
+ "Roadside Assistance",
1305
+ "Package Tracking"
1306
+ );
1307
+
1308
+ return apply_filters('kcseo_contact_types', $contact_types);
1309
+ }
1310
+
1311
+ static function getLanguageList() {
1312
+ $language_list = array(
1313
+ 'facebook' => __('Facebook'),
1314
+ 'twitter' => __('Twitter'),
1315
+ 'google-plus' => __('Google+'),
1316
+ 'instagram' => __('Instagram'),
1317
+ 'youtube' => __('Youtube'),
1318
+ 'linkedin' => __('LinkedIn'),
1319
+ 'myspace' => __('Myspace'),
1320
+ 'pinterest' => __('Pinterest'),
1321
+ 'soundcloud' => __('SoundCloud'),
1322
+ 'tumblr' => __('Tumblr'),
1323
+ 'wikidata' => __('Wikidata'),
1324
+ );
1325
+
1326
+ return apply_filters('kcseo_language_list', $language_list);
1327
+ }
1328
+
1329
+ static function getSocialList() {
1330
+ $socialList = array(
1331
+ 'facebook' => __('Facebook'),
1332
+ 'twitter' => __('Twitter'),
1333
+ 'google-plus' => __('Google+'),
1334
+ 'instagram' => __('Instagram'),
1335
+ 'youtube' => __('Youtube'),
1336
+ 'linkedin' => __('LinkedIn'),
1337
+ 'myspace' => __('Myspace'),
1338
+ 'pinterest' => __('Pinterest'),
1339
+ 'soundcloud' => __('SoundCloud'),
1340
+ 'tumblr' => __('Tumblr'),
1341
+ 'wikidata' => __('Wikidata'),
1342
+ );
1343
+
1344
+ return apply_filters('kcseo_social_list', $socialList);
1345
+ }
1346
+
1347
+ }
lib/models/KcSeoSchemaModel.php CHANGED
@@ -1,345 +1,372 @@
1
  <?php
2
 
3
- if (!class_exists('KcSeoSchemaModel')):
4
- class KcSeoSchemaModel
5
- {
6
-
7
- function __construct() {
8
-
9
- }
10
-
11
- function schemaOutput($schemaID, $metaData) {
12
- $html = null;
13
-
14
- if ($schemaID) {
15
- global $KcSeoWPSchema;
16
- switch ($schemaID) {
17
- case "article":
18
- $article = array();
19
- $article["@context"] = "http://schema.org";
20
- $article["@type"] = "Article";
21
- if (!empty($metaData['headline'])) {
22
- $article["headline"] = $KcSeoWPSchema->sanitizeOutPut($metaData['headline']);
23
- }
24
- if (!empty($metaData['mainEntityOfPage'])) {
25
- $article["mainEntityOfPage"] = array(
26
- "@type" => "WebPage",
27
- "@id" => $KcSeoWPSchema->sanitizeOutPut($metaData["mainEntityOfPage"])
28
- );
29
- }
30
- if (!empty($metaData['author'])) {
31
- $article["author"] = array(
32
- "@type" => "Person",
33
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['author'])
34
- );
35
- }
36
- if (!empty($metaData['publisher'])) {
37
- if (!empty($metaData['publisherImage'])) {
38
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['publisherImage']));
39
- $plA = array(
40
- "@type" => "ImageObject",
41
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
42
- "height" => $img['height'],
43
- "width" => $img['width']
44
- );
45
- } else {
46
- $plA = array();
47
- }
48
- $article["publisher"] = array(
49
- "@type" => "Organization",
50
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['publisher']),
51
- "logo" => $plA
52
- );
53
- }
54
- if (!empty($metaData['alternativeHeadline'])) {
55
- $article["alternativeHeadline"] = $KcSeoWPSchema->sanitizeOutPut($metaData['alternativeHeadline']);
56
- }
57
- if (!empty($metaData['image'])) {
58
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
59
- $article["image"] = array(
60
- "@type" => "ImageObject",
61
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
62
- "height" => $img['height'],
63
- "width" => $img['width']
64
- );
65
- }
66
- if (!empty($metaData['datePublished'])) {
67
- $article["datePublished"] = $KcSeoWPSchema->sanitizeOutPut($metaData['datePublished']);
68
- }
69
- if (!empty($metaData['dateModified'])) {
70
- $article["dateModified"] = $KcSeoWPSchema->sanitizeOutPut($metaData['dateModified']);
71
- }
72
- if (!empty($metaData['description'])) {
73
- $article["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
74
- 'textarea');
75
- }
76
- if (!empty($metaData['articleBody'])) {
77
- $article["articleBody"] = $KcSeoWPSchema->sanitizeOutPut($metaData['articleBody'],
78
- 'textarea');
79
- }
80
- $html .= $this->get_jsonEncode($article);
81
- break;
82
-
83
- case "news_article":
84
- $newsArticle = array();
85
- $newsArticle["@context"] = "http://schema.org";
86
- $newsArticle["@type"] = "NewsArticle";
87
- if (!empty($metaData['headline'])) {
88
- $newsArticle["headline"] = $KcSeoWPSchema->sanitizeOutPut($metaData['headline']);
89
- }
90
- if (!empty($metaData['mainEntityOfPage'])) {
91
- $newsArticle["mainEntityOfPage"] = array(
92
- "@type" => "WebPage",
93
- "@id" => $KcSeoWPSchema->sanitizeOutPut($metaData["mainEntityOfPage"])
94
- );
95
- }
96
- if (!empty($metaData['author'])) {
97
- $newsArticle["author"] = array(
98
- "@type" => "Person",
99
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['author'])
100
- );
101
- }
102
- if (!empty($metaData['image'])) {
103
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
104
- $newsArticle["image"] = array(
105
- "@type" => "ImageObject",
106
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
107
- "height" => $img['height'],
108
- "width" => $img['width']
109
- );
110
- }
111
- if (!empty($metaData['datePublished'])) {
112
- $newsArticle["datePublished"] = $KcSeoWPSchema->sanitizeOutPut($metaData['datePublished']);
113
- }
114
- if (!empty($metaData['dateModified'])) {
115
- $newsArticle["dateModified"] = $KcSeoWPSchema->sanitizeOutPut($metaData['dateModified']);
116
- }
117
- if (!empty($metaData['publisher'])) {
118
- if (!empty($metaData['publisherImage'])) {
119
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['publisherImage']));
120
- $plA = array(
121
- "@type" => "ImageObject",
122
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
123
- "height" => $img['height'],
124
- "width" => $img['width']
125
- );
126
- } else {
127
- $plA = array();
128
- }
129
- $newsArticle["publisher"] = array(
130
- "@type" => "Organization",
131
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['publisher']),
132
- "logo" => $plA
133
- );
134
- }
135
- if (!empty($metaData['description'])) {
136
- $newsArticle["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
137
- 'textarea');
138
- }
139
- if (!empty($metaData['articleBody'])) {
140
- $newsArticle["articleBody"] = $KcSeoWPSchema->sanitizeOutPut($metaData['articleBody'],
141
- 'textarea');
142
- }
143
- $html .= $this->get_jsonEncode($newsArticle);
144
- break;
145
-
146
- case "blog_posting":
147
- $blogPosting = array();
148
- $blogPosting["@context"] = "http://schema.org";
149
- $blogPosting["@type"] = "BlogPosting";
150
- if (!empty($metaData['headline'])) {
151
- $blogPosting["headline"] = $KcSeoWPSchema->sanitizeOutPut($metaData['headline']);
152
- }
153
- if (!empty($metaData['mainEntityOfPage'])) {
154
- $blogPosting["mainEntityOfPage"] = array(
155
- "@type" => "WebPage",
156
- "@id" => $KcSeoWPSchema->sanitizeOutPut($metaData["mainEntityOfPage"])
157
- );
158
- }
159
- if (!empty($metaData['author'])) {
160
- $blogPosting["author"] = array(
161
- "@type" => "Person",
162
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['author'])
163
- );
164
- }
165
- if (!empty($metaData['image'])) {
166
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
167
- $blogPosting["image"] = array(
168
- "@type" => "ImageObject",
169
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
170
- "height" => $img['height'],
171
- "width" => $img['width']
172
- );
173
- }
174
- if (!empty($metaData['datePublished'])) {
175
- $blogPosting["datePublished"] = $KcSeoWPSchema->sanitizeOutPut($metaData['datePublished']);
176
- }
177
- if (!empty($metaData['dateModified'])) {
178
- $blogPosting["dateModified"] = $KcSeoWPSchema->sanitizeOutPut($metaData['dateModified']);
179
- }
180
- if (!empty($metaData['publisher'])) {
181
- if (!empty($metaData['publisherImage'])) {
182
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['publisherImage']));
183
- $plA = array(
184
- "@type" => "ImageObject",
185
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
186
- "height" => $img['height'],
187
- "width" => $img['width']
188
- );
189
- } else {
190
- $plA = array();
191
- }
192
- $blogPosting["publisher"] = array(
193
- "@type" => "Organization",
194
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['publisher']),
195
- "logo" => $plA
196
- );
197
- }
198
- if (!empty($metaData['description'])) {
199
- $blogPosting["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
200
- 'textarea');
201
- }
202
- if (!empty($metaData['articleBody'])) {
203
- $blogPosting["articleBody"] = $KcSeoWPSchema->sanitizeOutPut($metaData['articleBody'],
204
- 'textarea');
205
- }
206
- $html .= $this->get_jsonEncode($blogPosting);
207
- break;
208
-
209
- case 'event':
210
- $event = array();
211
- $event["@context"] = "http://schema.org";
212
- $event["@type"] = "Event";
213
- if (!empty($metaData['name'])) {
214
- $event["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
215
- }
216
- if (!empty($metaData['startDate'])) {
217
- $event["startDate"] = $KcSeoWPSchema->sanitizeOutPut($metaData['startDate']);
218
- }
219
- if (!empty($metaData['endDate'])) {
220
- $event["endDate"] = $KcSeoWPSchema->sanitizeOutPut($metaData['endDate']);
221
- }
222
- if (!empty($metaData['description'])) {
223
- $event["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
224
- 'textarea');
225
- }
226
- if (!empty($metaData['performerName'])) {
227
- $event["performer"] = array(
228
- "@type" => "Person",
229
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['performerName'])
230
- );
231
- }
232
- if (!empty($metaData['image'])) {
233
- $event["image"] = $KcSeoWPSchema->sanitizeOutPut($metaData['image'], 'url');
234
- }
235
- if (!empty($metaData['locationName'])) {
236
- $event["location"] = array(
237
- "@type" => "Place",
238
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['locationName']),
239
- "address" => $KcSeoWPSchema->sanitizeOutPut($metaData['locationAddress'])
240
- );
241
- }
242
- if (!empty($metaData['price'])) {
243
- $event["offers"] = array(
244
- "@type" => "Offer",
245
- "price" => $KcSeoWPSchema->sanitizeOutPut($metaData['price']),
246
- "priceCurrency" => !empty($metaData['priceCurrency']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['priceCurrency']) : null,
247
- "url" => !empty($metaData['url']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['url'],
248
- 'url') : null
249
- );
250
- }
251
- if (!empty($metaData['url'])) {
252
- $event["url"] = $KcSeoWPSchema->sanitizeOutPut($metaData['url'], 'url');
253
- }
254
- $html .= $this->get_jsonEncode($event);
255
- break;
256
-
257
- case 'product':
258
- $product = array();
259
- $product["@context"] = "http://schema.org";
260
- $product["@type"] = "Product";
261
- if (!empty($metaData['name'])) {
262
- $product["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
263
- }
264
- if (!empty($metaData['image'])) {
265
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
266
- $product["image"] = $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url');
267
- }
268
- if (!empty($metaData['description'])) {
269
- $product["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description']);
270
- }
271
- if (!empty($metaData['brand'])) {
272
- $product["brand"] = array(
273
- "@type" => "Thing",
274
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['brand'])
275
- );
276
- }
277
- if (!empty($metaData['ratingValue'])) {
278
- $product["aggregateRating"] = array(
279
- "@type" => "AggregateRating",
280
- "ratingValue" => !empty($metaData['ratingValue']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['ratingValue']) : null,
281
- "reviewCount" => !empty($metaData['reviewCount']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['reviewCount']) : null
282
- );
283
- }
284
- if (!empty($metaData['price'])) {
285
- $product["offers"] = array(
286
- "@type" => "Offer",
287
- "price" => $KcSeoWPSchema->sanitizeOutPut($metaData['price']),
288
- "priceCurrency" => !empty($metaData['priceCurrency']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['priceCurrency']) : null,
289
- "itemCondition" => !empty($metaData['itemCondition']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['itemCondition']) : null,
290
- "availability" => !empty($metaData['availability']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['availability']) : null,
291
- "url" => !empty($metaData['url']) ? $KcSeoWPSchema->sanitizeOutPut($metaData['url']) : null
292
- );
293
- }
294
- $html .= $this->get_jsonEncode($product);
295
- break;
296
-
297
- case 'video':
298
- $video = array();
299
- $video["@context"] = "http://schema.org";
300
- $video["@type"] = "VideoObject";
301
- if (!empty($metaData['name'])) {
302
- $video["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
303
- }
304
- if (!empty($metaData['description'])) {
305
- $video["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
306
- 'textarea');
307
- }
308
- if (!empty($metaData['description'])) {
309
- $video["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description']);
310
- }
311
- if (!empty($metaData['thumbnailUrl'])) {
312
- $video["thumbnailUrl"] = $KcSeoWPSchema->sanitizeOutPut($metaData['thumbnailUrl'], 'url');
313
- }
314
- if (!empty($metaData['uploadDate'])) {
315
- $video["uploadDate"] = $KcSeoWPSchema->sanitizeOutPut($metaData['uploadDate']);
316
- }
317
- if (!empty($metaData['duration'])) {
318
- $video["duration"] = $KcSeoWPSchema->sanitizeOutPut($metaData['duration']);
319
- }
320
- if (!empty($metaData['contentUrl'])) {
321
- $video["contentUrl"] = $KcSeoWPSchema->sanitizeOutPut($metaData['contentUrl'], 'url');
322
- }
323
- if (!empty($metaData['interactionCount'])) {
324
- $video["interactionCount"] = $KcSeoWPSchema->sanitizeOutPut($metaData['interactionCount']);
325
- }
326
- if (!empty($metaData['expires'])) {
327
- $video["expires"] = $KcSeoWPSchema->sanitizeOutPut($metaData['expires']);
328
- }
329
- $html .= $this->get_jsonEncode($video);
330
- break;
331
-
332
- case 'service':
333
- $service = array();
334
- $service["@context"] = "http://schema.org";
335
- $service["@type"] = "Service";
336
- if (!empty($metaData['name'])) {
337
- $service["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
338
- }
339
- if (!empty($metaData['serviceType'])) {
340
- $service["serviceType"] = $KcSeoWPSchema->sanitizeOutPut($metaData['serviceType']);
341
- }
342
- /*
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
343
  if ( ! empty( $metaData['locationName'] ) ) {
344
  $service["location"] = array(
345
  "@type" => "Place",
@@ -347,1723 +374,371 @@ if (!class_exists('KcSeoSchemaModel')):
347
  "address" => $KcSeoWPSchema->sanitizeOutPut( $metaData['locationAddress'] )
348
  );
349
  }*/
350
- if (!empty($metaData['award'])) {
351
- $service["award"] = $KcSeoWPSchema->sanitizeOutPut($metaData['award']);
352
- }
353
- if (!empty($metaData['category'])) {
354
- $service["category"] = $KcSeoWPSchema->sanitizeOutPut($metaData['category']);
355
- }
356
- if (!empty($metaData['providerMobility'])) {
357
- $service["providerMobility"] = $KcSeoWPSchema->sanitizeOutPut($metaData['providerMobility']);
358
- }
359
- if (!empty($metaData['additionalType'])) {
360
- $service["additionalType"] = $KcSeoWPSchema->sanitizeOutPut($metaData['additionalType']);
361
- }
362
- if (!empty($metaData['alternateName'])) {
363
- $service["alternateName"] = $KcSeoWPSchema->sanitizeOutPut($metaData['alternateName']);
364
- }
365
- if (!empty($metaData['image'])) {
366
- $service["image"] = $KcSeoWPSchema->sanitizeOutPut($metaData['image']);
367
- }
368
- if (!empty($metaData['mainEntityOfPage'])) {
369
- $service["mainEntityOfPage"] = $KcSeoWPSchema->sanitizeOutPut($metaData['mainEntityOfPage']);
370
- }
371
- if (!empty($metaData['sameAs'])) {
372
- $service["sameAs"] = $KcSeoWPSchema->sanitizeOutPut($metaData['sameAs']);
373
- }
374
- if (!empty($metaData['url'])) {
375
- $service["url"] = $KcSeoWPSchema->sanitizeOutPut($metaData['url'], 'url');
376
- }
377
- $html .= $this->get_jsonEncode($service);
378
- break;
379
-
380
- case 'review':
381
- $review = array();
382
- $review["@context"] = "http://schema.org";
383
- $review["@type"] = "Review";
384
- if (!empty($metaData['itemName'])) {
385
- $review["itemReviewed"] = array(
386
- "@type" => "Thing",
387
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['itemName'])
388
- );
389
- }
390
- if (!empty($metaData['ratingValue'])) {
391
- $review["reviewRating"] = array(
392
- "@type" => "Rating",
393
- "ratingValue" => $KcSeoWPSchema->sanitizeOutPut($metaData['ratingValue']),
394
- "bestRating" => $KcSeoWPSchema->sanitizeOutPut($metaData['bestRating']),
395
- "worstRating" => $KcSeoWPSchema->sanitizeOutPut($metaData['worstRating'])
396
- );
397
- }
398
- if (!empty($metaData['name'])) {
399
- $review["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
400
- }
401
- if (!empty($metaData['author'])) {
402
- $review["author"] = array(
403
- "@type" => "Person",
404
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['author'])
405
- );
406
- }
407
- if (!empty($metaData['reviewBody'])) {
408
- $review["reviewBody"] = $KcSeoWPSchema->sanitizeOutPut($metaData['reviewBody']);
409
- }
410
- if (!empty($metaData['datePublished'])) {
411
- $review["datePublished"] = $KcSeoWPSchema->sanitizeOutPut($metaData['datePublished']);
412
- }
413
- if (!empty($metaData['publisher'])) {
414
- $review["publisher"] = array(
415
- "@type" => "Organization",
416
- "name" => $KcSeoWPSchema->sanitizeOutPut($metaData['publisher'])
417
- );
418
- }
419
- $html .= $this->get_jsonEncode($review);
420
- break;
421
- case 'aggregate_rating':
422
- $aRating = array();
423
- $aRating["@context"] = "http://schema.org";
424
- $aRating["@type"] = !empty($metaData['schema_type']) ? $metaData['schema_type'] : "LocalBusiness";
425
- if (!empty($metaData['name'])) {
426
- $aRating["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
427
- }
428
- if (!empty($metaData['description'])) {
429
- $aRating["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
430
- 'textarea');
431
- }
432
- if ($aRating["@type"] != "Organization") {
433
- if (!empty($metaData['image'])) {
434
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
435
- $aRating["image"] = array(
436
- "@type" => "ImageObject",
437
- "url" => $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url'),
438
- "height" => $img['height'],
439
- "width" => $img['width']
440
- );
441
- }
442
- if (!empty($metaData['priceRange'])) {
443
- $aRating["priceRange"] = $KcSeoWPSchema->sanitizeOutPut($metaData['priceRange']);
444
- }
445
- if (!empty($metaData['telephone'])) {
446
- $aRating["telephone"] = $KcSeoWPSchema->sanitizeOutPut($metaData['telephone']);
447
- }
448
-
449
- if (!empty($metaData['address'])) {
450
- $aRating["address"] = $KcSeoWPSchema->sanitizeOutPut($metaData['address']);
451
- }
452
- }
453
-
454
- if (!empty($metaData['ratingValue'])) {
455
- $rValue = array();
456
- $rValue["@type"] = "AggregateRating";
457
- $rValue["ratingValue"] = $KcSeoWPSchema->sanitizeOutPut($metaData['ratingValue']);
458
- if (!empty($metaData['bestRating'])) {
459
- $rValue["bestRating"] = $KcSeoWPSchema->sanitizeOutPut($metaData['bestRating']);
460
- }
461
- if (!empty($metaData['worstRating'])) {
462
- $rValue["worstRating"] = $KcSeoWPSchema->sanitizeOutPut($metaData['worstRating']);
463
- }
464
- if (!empty($metaData['ratingCount'])) {
465
- $rValue["ratingCount"] = $KcSeoWPSchema->sanitizeOutPut($metaData['ratingCount']);
466
- }
467
-
468
- $aRating["aggregateRating"] = $rValue;
469
- }
470
- $html .= $this->get_jsonEncode($aRating);
471
- break;
472
-
473
- case 'restaurant':
474
- $restaurant = array();
475
- $restaurant["@context"] = "http://schema.org";
476
- $restaurant["@type"] = "Restaurant";
477
- if (!empty($metaData['name'])) {
478
- $restaurant["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
479
- }
480
- if (!empty($metaData['description'])) {
481
- $restaurant["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
482
- 'textarea');
483
- }
484
- if (!empty($metaData['openingHours'])) {
485
- $restaurant["openingHours"] = $KcSeoWPSchema->sanitizeOutPut($metaData['openingHours'],
486
- 'textarea');
487
- }
488
- if (!empty($metaData['telephone'])) {
489
- $restaurant["telephone"] = $KcSeoWPSchema->sanitizeOutPut($metaData['telephone']);
490
- }
491
- if (!empty($metaData['menu'])) {
492
- $restaurant["menu"] = $KcSeoWPSchema->sanitizeOutPut($metaData['menu'], 'url');
493
- }
494
- if (!empty($metaData['image'])) {
495
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
496
- $restaurant["image"] = $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url');
497
- }
498
- if (!empty($metaData['address'])) {
499
- $restaurant["address"] = $KcSeoWPSchema->sanitizeOutPut($metaData['address'], 'textarea');
500
- }
501
- if (!empty($metaData['priceRange'])) {
502
- $restaurant["priceRange"] = $KcSeoWPSchema->sanitizeOutPut($metaData['priceRange']);
503
- }
504
- if (!empty($metaData['servesCuisine'])) {
505
- $restaurant["servesCuisine"] = $KcSeoWPSchema->sanitizeOutPut($metaData['servesCuisine']);
506
- }
507
- $html .= $this->get_jsonEncode($restaurant);
508
- break;
509
-
510
- case 'localBusiness':
511
- $localBusiness = array();
512
- $localBusiness["@context"] = "http://schema.org";
513
- $localBusiness["@type"] = "LocalBusiness";
514
- if (!empty($metaData['name'])) {
515
- $localBusiness["name"] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
516
- }
517
- if (!empty($metaData['description'])) {
518
- $localBusiness["description"] = $KcSeoWPSchema->sanitizeOutPut($metaData['description'],
519
- 'textarea');
520
- }
521
- if (!empty($metaData['image'])) {
522
- $img = $KcSeoWPSchema->imageInfo(absint($metaData['image']));
523
- $localBusiness["image"] = $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url');
524
- }
525
- if (!empty($metaData['priceRange'])) {
526
- $localBusiness["priceRange"] = $KcSeoWPSchema->sanitizeOutPut($metaData['priceRange']);
527
- }
528
- if (!empty($metaData['addressLocality']) || !empty($metaData['addressRegion'])
529
- || !empty($metaData['postalCode']) || !empty($metaData['streetAddress'])) {
530
- $localBusiness["address"] = array(
531
- "@type" => "PostalAddress",
532
- "addressLocality" => $KcSeoWPSchema->sanitizeOutPut($metaData['addressLocality']),
533
- "addressRegion" => $KcSeoWPSchema->sanitizeOutPut($metaData['addressRegion']),
534
- "postalCode" => $KcSeoWPSchema->sanitizeOutPut($metaData['postalCode']),
535
- "streetAddress" => $KcSeoWPSchema->sanitizeOutPut($metaData['streetAddress'])
536
- );
537
- }
538
-
539
- if (!empty($metaData['telephone'])) {
540
- $localBusiness["telephone"] = $KcSeoWPSchema->sanitizeOutPut($metaData['telephone']);
541
- }
542
- $html .= $this->get_jsonEncode($localBusiness);
543
- break;
544
-
545
- default:
546
- break;
547
- }
548
-
549
- }
550
-
551
- return $html;
552
- }
553
-
554
- function get_field($data) {
555
- $html = null;
556
- global $KcSeoWPSchema;
557
- $id = $data['id'];
558
- $name = $data['name'];
559
- $value = $data['value'];
560
- $attr = !empty($data['attr']) ? $data['attr'] : null;
561
-
562
- $class = isset($data['class']) ? ($data['class'] ? $data['class'] : null) : null;
563
- $require = (isset($data['required']) ? ($data['required'] ? "<span class='required'>*</span>" : null) : null);
564
- $title = (isset($data['title']) ? ($data['title'] ? $data['title'] : null) : null);
565
- $desc = (isset($data['desc']) ? ($data['desc'] ? $data['desc'] : null) : null);
566
- $holderClass = (!empty($data['holderClass']) ? $data['holderClass'] : null);
567
- $html .= "<div class='field-container {$holderClass}' id='" . $id . '-container' . "'>";
568
- $html .= "<label class='field-label' for='{$id}'>{$title}{$require}</label>";
569
- $html .= "<div class='field-content' id='" . $id . '-content' . "'>";
570
- switch ($data['type']) {
571
- case 'checkbox':
572
- $checked = ($value ? "checked" : null);
573
- $html .= "<div class='kSeo-checkbox-wrapper'>";
574
- $html .= "<label for='{$id}'><input type='checkbox' id='{$id}' class='{$class}' name='{$name}' {$checked} value='1' /> Enable</label>";
575
- $html .= "</div>";
576
- break;
577
-
578
- case 'text':
579
- $html .= "<input type='text' id='{$id}' class='{$class}' name='{$name}' value='" . esc_html($value) . "' />";
580
- break;
581
-
582
- case 'number':
583
- $html .= "<input type='number' {$attr} id='{$id}' class='{$class}' name='{$name}' value='" . esc_attr($value) . "' />";
584
- break;
585
- case 'textarea':
586
- $html .= "<textarea id='{$id}' class='{$class}' name='{$name}' >" . wp_kses($value,
587
- array()) . "</textarea>";
588
- break;
589
-
590
- case 'image':
591
- $html .= '<div class="kSeo-image">';
592
- $ImageId = !empty($value) ? absint($value) : 0;
593
- $image = $ingInfo = null;
594
- if ($ImageId) {
595
- $image = wp_get_attachment_image($ImageId, "thumbnail");
596
- $imgData = $KcSeoWPSchema->imageInfo($ImageId);
597
- $ingInfo .= "<span><strong>URL: </strong>{$imgData['url']}</span>";
598
- $ingInfo .= "<span><strong>Width: </strong>{$imgData['width']}px</span>";
599
- $ingInfo .= "<span><strong>Height: </strong>{$imgData['height']}px</span>";
600
- }
601
- $html .= "<div class='kSeo-image-wrapper'>";
602
- $html .= '<span class="kSeoImgAdd"><span class="dashicons dashicons-plus-alt"></span></span>';
603
- $html .= '<span class="kSeoImgRemove ' . ($image ? null : "kSeo-hidden") . '"><span class="dashicons dashicons-trash"></span></span>';
604
- $html .= '<div class="kSeo-image-preview">' . $image . '</div>';
605
- $html .= "<input type='hidden' name='{$name}' value='" . absint($ImageId) . "' />";
606
- $html .= "</div>";
607
- $html .= "<div class='image-info'>{$ingInfo}</div>";
608
- $html .= '</div>';
609
- break;
610
- case 'select':
611
- $html .= "<select name='{$name}' class='select2 {$class}' id='{$id}'>";
612
- if (!empty($data['empty'])) {
613
- $html .= "<option value=''>{$data['empty']}</option>";
614
- }
615
- if (!empty($data['options']) && is_array($data['options'])) {
616
- if ($this->isAssoc($data['options'])) {
617
- foreach ($data['options'] as $optKey => $optValue) {
618
- $slt = ($optKey == $value ? "selected" : null);
619
- $html .= "<option value='" . esc_attr($optKey) . "' {$slt}>" . esc_html($optValue) . "</option>";
620
- }
621
- } else {
622
- foreach ($data['options'] as $optValue) {
623
- $slt = ($optValue == $value ? "selected" : null);
624
- $html .= "<option value='" . esc_attr($optValue) . "' {$slt}>" . esc_html($optValue) . "</option>";
625
- }
626
- }
627
- }
628
- $html .= "</select>";
629
- break;
630
- case 'schema_type':
631
- $html .= "<select name='{$name}' class='select2 {$class}' id='{$id}'>";
632
- if (!empty($data['empty'])) {
633
- $html .= "<option value=''>{$data['empty']}</option>";
634
- }
635
-
636
- foreach ($data['options'] as $key => $site) {
637
- if (is_array($site)) {
638
- $slt = ($key == $value ? "selected" : null);
639
- $html .= "<option value='$key' $slt>&nbsp;&nbsp;&nbsp;$key</option>";
640
- foreach ($site as $inKey => $inSite) {
641
- if (is_array($inSite)) {
642
- $slt = ($inKey == $value ? "selected" : null);
643
- $html .= "<option value='$inKey' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inKey</option>";
644
- foreach ($inSite as $inInKey => $inInSite) {
645
- if (is_array($inInSite)) {
646
- $slt = ($inInKey == $value ? "selected" : null);
647
- $html .= "<option value='$inInKey' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inInKey</option>";
648
- foreach ($inInSite as $iSite) {
649
- $slt = ($iSite == $value ? "selected" : null);
650
- $html .= "<option value='$iSite' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$iSite</option>";
651
- }
652
- } else {
653
- $slt = ($inInSite == $value ? "selected" : null);
654
- $html .= "<option value='$inInSite' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inInSite</option>";
655
- }
656
- }
657
- } else {
658
- $slt = ($inSite == $value ? "selected" : null);
659
- $html .= "<option value='$inSite' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inSite</option>";
660
- }
661
- }
662
- } else {
663
- $slt = ($site == $value ? "selected" : null);
664
- $html .= "<option value='$site' $slt>$site</option>";
665
- }
666
- }
667
- $html .= "</select>";
668
- break;
669
- default:
670
- $html .= "<input id='{$id}' type='{$data['type']}' value='" . esc_attr($value) . "' name='$name' />";
671
- break;
672
-
673
- }
674
- $html .= "<p class='description'>{$desc}</p>";
675
- $html .= "</div>";
676
- $html .= "</div>";
677
-
678
- return $html;
679
- }
680
-
681
- public function schemaTypes() {
682
- return array(
683
- 'article' => array(
684
- 'pro' => false,
685
- 'title' => __("Article", "wp-seo-structured-data-schema"),
686
- 'fields' => array(
687
- 'active' => array(
688
- 'type' => 'checkbox'
689
- ),
690
- 'headline' => array(
691
- 'title' => __('Headline', "wp-seo-structured-data-schema"),
692
- 'type' => 'text',
693
- 'desc' => __('Article title', "wp-seo-structured-data-schema"),
694
- 'required' => true
695
- ),
696
- 'mainEntityOfPage' => array(
697
- 'title' => __('Page URL', "wp-seo-structured-data-schema"),
698
- 'type' => 'url',
699
- 'desc' => __('The canonical URL of the article page', "wp-seo-structured-data-schema"),
700
- 'required' => true
701
- ),
702
- 'author' => array(
703
- 'title' => __('Author Name', "wp-seo-structured-data-schema"),
704
- 'type' => 'text',
705
- 'desc' => __('Author display name', "wp-seo-structured-data-schema"),
706
- 'required' => true
707
- ),
708
- 'image' => array(
709
- 'title' => __('Article Feature Image', "wp-seo-structured-data-schema"),
710
- 'type' => 'image',
711
- 'required' => true,
712
- 'desc' => __('Images should be at least 696 pixels wide.<br>Images should be in .jpg, .png, or. gif format.', "wp-seo-structured-data-schema")
713
- ),
714
- 'datePublished' => array(
715
- 'title' => __('Published date', "wp-seo-structured-data-schema"),
716
- 'type' => 'text',
717
- 'class' => 'kcseo-date',
718
- 'required' => true,
719
- 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema")
720
- ),
721
- 'dateModified' => array(
722
- 'title' => __('Modified date', "wp-seo-structured-data-schema"),
723
- 'type' => 'text',
724
- 'class' => 'kcseo-date',
725
- 'required' => true,
726
- 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema")
727
- ),
728
- 'publisher' => array(
729
- 'title' => __('Publisher', "wp-seo-structured-data-schema"),
730
- 'type' => 'text',
731
- 'desc' => __('Publisher name or Organization name', "wp-seo-structured-data-schema"),
732
- 'required' => true
733
- ),
734
- 'publisherImage' => array(
735
- 'title' => __('Publisher Logo', "wp-seo-structured-data-schema"),
736
- 'type' => 'image',
737
- 'desc' => __('Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>', "wp-seo-structured-data-schema"),
738
- 'required' => true
739
- ),
740
- 'description' => array(
741
- 'title' => __('Description', "wp-seo-structured-data-schema"),
742
- 'type' => 'textarea',
743
- 'desc' => __('Short description', "wp-seo-structured-data-schema")
744
- ),
745
- 'articleBody' => array(
746
- 'title' => __('Article body', "wp-seo-structured-data-schema"),
747
- 'type' => 'textarea',
748
- 'desc' => __('Article content', "wp-seo-structured-data-schema")
749
- ),
750
- 'alternativeHeadline' => array(
751
- 'title' => __('Alternative headline', "wp-seo-structured-data-schema"),
752
- 'type' => 'text',
753
- 'desc' => __('A secondary headline for the article.', "wp-seo-structured-data-schema")
754
- ),
755
- )
756
- ),
757
- 'blog_posting' => array(
758
- 'pro' => false,
759
- 'title' => __('Blog Posting', "wp-seo-structured-data-schema"),
760
- 'fields' => array(
761
- 'active' => array(
762
- 'type' => 'checkbox'
763
- ),
764
- 'headline' => array(
765
- 'title' => __('Headline', "wp-seo-structured-data-schema"),
766
- 'type' => 'text',
767
- 'desc' => __('Blog posting title', "wp-seo-structured-data-schema"),
768
- 'required' => true
769
- ),
770
- 'mainEntityOfPage' => array(
771
- 'title' => __('Page URL', "wp-seo-structured-data-schema"),
772
- 'type' => 'url',
773
- 'desc' => __('The canonical URL of the article page', "wp-seo-structured-data-schema"),
774
- 'required' => true
775
- ),
776
- 'author' => array(
777
- 'title' => __('Author name', "wp-seo-structured-data-schema"),
778
- 'type' => 'text',
779
- 'desc' => __('Author display name', "wp-seo-structured-data-schema"),
780
- 'required' => true
781
- ),
782
- 'image' => array(
783
- 'title' => __('Feature Image', "wp-seo-structured-data-schema"),
784
- 'type' => 'image',
785
- 'desc' => __("The representative image of the article. Only a marked-up image that directly belongs to the article should be specified.<br> Images should be at least 696 pixels wide. <br>Images should be in .jpg, .png, or. gif format.", "wp-seo-structured-data-schema"),
786
- 'required' => true
787
- ),
788
- 'datePublished' => array(
789
- 'title' => __('Published date', "wp-seo-structured-data-schema"),
790
- 'type' => 'text',
791
- 'class' => 'kcseo-date',
792
- 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema"),
793
- 'required' => true
794
- ),
795
- 'dateModified' => array(
796
- 'title' => __('Modified date', "wp-seo-structured-data-schema"),
797
- 'type' => 'text',
798
- 'class' => 'kcseo-date',
799
- 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema"),
800
- 'required' => true
801
- ),
802
- 'publisher' => array(
803
- 'title' => __('Publisher', "wp-seo-structured-data-schema"),
804
- 'type' => 'text',
805
- 'desc' => __('Publisher name or Organization name', "wp-seo-structured-data-schema"),
806
- 'required' => true
807
- ),
808
- 'publisherImage' => array(
809
- 'title' => __('Publisher Logo', "wp-seo-structured-data-schema"),
810
- 'type' => 'image',
811
- 'desc' => __("Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>", "wp-seo-structured-data-schema"),
812
- 'required' => true
813
- ),
814
- 'description' => array(
815
- 'title' => __('Description', "wp-seo-structured-data-schema"),
816
- 'type' => 'textarea',
817
- 'desc' => __('Short description', "wp-seo-structured-data-schema")
818
- ),
819
- 'articleBody' => array(
820
- 'title' => __('Article body', "wp-seo-structured-data-schema"),
821
- 'type' => 'textarea',
822
- 'desc' => __('Article content', "wp-seo-structured-data-schema")
823
- )
824
- )
825
- ),
826
- 'news_article' => array(
827
- 'pro' => false,
828
- 'title' => __('News Article', "wp-seo-structured-data-schema"),
829
- 'fields' => array(
830
- 'active' => array(
831
- 'type' => 'checkbox'
832
- ),
833
- 'headline' => array(
834
- 'title' => __('Headline', "wp-seo-structured-data-schema"),
835
- 'type' => 'text',
836
- 'desc' => __('Article title', "wp-seo-structured-data-schema"),
837
- 'required' => true
838
- ),
839
- 'mainEntityOfPage' => array(
840
- 'title' => __('Page URL', "wp-seo-structured-data-schema"),
841
- 'type' => 'url',
842
- 'desc' => __('The canonical URL of the article page', "wp-seo-structured-data-schema"),
843
- 'required' => true
844
- ),
845
- 'author' => array(
846
- 'title' => __('Author', "wp-seo-structured-data-schema"),
847
- 'type' => 'text',
848
- 'desc' => __('Author display name', "wp-seo-structured-data-schema"),
849
- 'required' => true
850
- ),
851
- 'image' => array(
852
- 'title' => __('Image', "wp-seo-structured-data-schema"),
853
- 'type' => 'image',
854
- 'desc' => __("The representative image of the article. Only a marked-up image that directly belongs to the article should be specified.<br> Images should be at least 696 pixels wide. <br>Images should be in .jpg, .png, or. gif format.", "wp-seo-structured-data-schema"),
855
- 'required' => true
856
- ),
857
- 'datePublished' => array(
858
- 'title' => __('Published date', "wp-seo-structured-data-schema"),
859
- 'type' => 'text',
860
- 'class' => 'kcseo-date',
861
- 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema"),
862
- 'required' => true
863
- ),
864
- 'dateModified' => array(
865
- 'title' => __('Modified date', "wp-seo-structured-data-schema"),
866
- 'type' => 'text',
867
- 'class' => 'kcseo-date',
868
- 'required' => true,
869
- 'desc' => __('Like this: 2015-12-25', "wp-seo-structured-data-schema")
870
- ),
871
- 'publisher' => array(
872
- 'title' => __('Publisher', "wp-seo-structured-data-schema"),
873
- 'type' => 'text',
874
- 'desc' => __('Publisher name or Organization name', "wp-seo-structured-data-schema"),
875
- 'required' => true
876
- ),
877
- 'publisherImage' => array(
878
- 'title' => __('Publisher Logo', "wp-seo-structured-data-schema"),
879
- 'type' => 'image',
880
- 'desc' => __('Logos should have a wide aspect ratio, not a square icon.<br>Logos should be no wider than 600px, and no taller than 60px.<br>Always retain the original aspect ratio of the logo when resizing. Ideally, logos are exactly 60px tall with width <= 600px. If maintaining a height of 60px would cause the width to exceed 600px, downscale the logo to exactly 600px wide and reduce the height accordingly below 60px to maintain the original aspect ratio.<br>', "wp-seo-structured-data-schema"),
881
- 'required' => true
882
- ),
883
- 'description' => array(
884
- 'title' => __('Description', "wp-seo-structured-data-schema"),
885
- 'type' => 'textarea',
886
- 'desc' => __('Short description', "wp-seo-structured-data-schema")
887
- ),
888
- 'articleBody' => array(
889
- 'title' => __('Article body', "wp-seo-structured-data-schema"),
890
- 'type' => 'textarea',
891
- 'desc' => __('Article body content', "wp-seo-structured-data-schema")
892
- )
893
- )
894
- ),
895
- 'event' => array(
896
- 'pro' => false,
897
- 'title' => __('Event', "wp-seo-structured-data-schema"),
898
- 'fields' => array(
899
- 'active' => array(
900
- 'type' => 'checkbox'
901
- ),
902
- 'name' => array(
903
- 'title' => __('Name', "wp-seo-structured-data-schema"),
904
- 'type' => 'text',
905
- 'required' => true,
906
- 'desc' => __("The name of the event.", "wp-seo-structured-data-schema")
907
- ),
908
- 'locationName' => array(
909
- 'title' => __('Location name', "wp-seo-structured-data-schema"),
910
- 'type' => 'text',
911
- 'required' => true,
912
- 'desc' => __("Event Location name", "wp-seo-structured-data-schema")
913
- ),
914
- 'locationAddress' => array(
915
- 'title' => __('Location address', "wp-seo-structured-data-schema"),
916
- 'type' => 'text',
917
- 'required' => true,
918
- 'desc' => __("The location of for example where the event is happening, an organization is located, or where an action takes place.", "wp-seo-structured-data-schema")
919
- ),
920
- 'startDate' => array(
921
- 'title' => __('Start date', "wp-seo-structured-data-schema"),
922
- 'type' => 'text',
923
- 'class' => 'kcseo-date',
924
- 'required' => true,
925
- 'desc' => __("Event start date", "wp-seo-structured-data-schema")
926
- ),
927
- 'endDate' => array(
928
- 'title' => __('End date (Recommended)', "wp-seo-structured-data-schema"),
929
- 'type' => 'text',
930
- 'class' => 'kcseo-date',
931
- 'desc' => __("Event end date", "wp-seo-structured-data-schema")
932
- ),
933
- 'description' => array(
934
- 'title' => __('Description (Recommended)', "wp-seo-structured-data-schema"),
935
- 'type' => 'textarea',
936
- 'desc' => __("Event description", "wp-seo-structured-data-schema")
937
- ),
938
- 'performerName' => array(
939
- 'title' => __('Performer Name (Recommended)', "wp-seo-structured-data-schema"),
940
- 'type' => 'text',
941
- 'desc' => __("The performer's name.", "wp-seo-structured-data-schema")
942
- ),
943
- 'image' => array(
944
- 'title' => __('Image URL (Recommended)', "wp-seo-structured-data-schema"),
945
- 'type' => 'url',
946
- 'desc' => __("URL of an image or logo for the event or tour", "wp-seo-structured-data-schema")
947
- ),
948
- 'price' => array(
949
- 'title' => __('Price (Recommended)', "wp-seo-structured-data-schema"),
950
- 'type' => 'number',
951
- 'attr' => 'step="any"',
952
- 'desc' => __("This is highly recommended. The lowest available price, including service charges and fees, of this type of ticket. <span class='required'>Not required but (Recommended)</span>", "wp-seo-structured-data-schema")
953
- ),
954
- 'priceCurrency' => array(
955
- 'title' => __('Price currency', "wp-seo-structured-data-schema"),
956
- 'type' => 'text',
957
- 'desc' => __("The 3-letter currency code. (USD)", "wp-seo-structured-data-schema")
958
- ),
959
- 'url' => array(
960
- 'title' => 'URL (Recommended)',
961
- 'type' => 'url',
962
- 'placeholder' => 'URL',
963
- 'desc' => __("A link to the event's details page. <span class='required'>Not required but (Recommended)</span>", "wp-seo-structured-data-schema")
964
- ),
965
- )
966
- ),
967
- 'product' => array(
968
- 'pro' => false,
969
- 'title' => __('Product', "wp-seo-structured-data-schema"),
970
- 'fields' => array(
971
- 'active' => array(
972
- 'type' => 'checkbox'
973
- ),
974
- 'name' => array(
975
- 'title' => __('Name', "wp-seo-structured-data-schema"),
976
- 'type' => 'text',
977
- 'required' => true,
978
- 'desc' => __("The name of the product.", "wp-seo-structured-data-schema")
979
- ),
980
- 'image' => array(
981
- 'title' => __('Image', "wp-seo-structured-data-schema"),
982
- 'type' => 'image',
983
- 'desc' => __("The URL of a product photo. Pictures clearly showing the product, e.g. against a white background, are preferred.", "wp-seo-structured-data-schema")
984
- ),
985
- 'description' => array(
986
- 'title' => __('Description', "wp-seo-structured-data-schema"),
987
- 'type' => 'textarea',
988
- 'desc' => __("Product description.", "wp-seo-structured-data-schema")
989
- ),
990
- 'brand' => array(
991
- 'title' => __('Brand', "wp-seo-structured-data-schema"),
992
- 'type' => 'text',
993
- 'desc' => __("The brand of the product.", "wp-seo-structured-data-schema")
994
- ),
995
- 'ratingValue' => array(
996
- 'title' => __('Ratting value', "wp-seo-structured-data-schema"),
997
- 'type' => 'number',
998
- 'attr' => 'step="any"',
999
- 'desc' => __("Rating value. (1 , 2.5, 3, 5 etc)", "wp-seo-structured-data-schema")
1000
- ),
1001
- 'reviewCount' => array(
1002
- 'title' => __('Total review count', "wp-seo-structured-data-schema"),
1003
- 'type' => 'number',
1004
- 'attr' => 'step="any"',
1005
- 'desc' => __("Rating ratting value. <span class='required'>This is required if (Ratting value) is given</span>", "wp-seo-structured-data-schema")
1006
- ),
1007
- 'price' => array(
1008
- 'title' => __('Price', "wp-seo-structured-data-schema"),
1009
- 'type' => 'number',
1010
- 'attr' => 'step="any"',
1011
- 'desc' => __("The lowest available price, including service charges and fees, of this type of ticket.", "wp-seo-structured-data-schema")
1012
- ),
1013
- 'priceCurrency' => array(
1014
- 'title' => __('Price currency', "wp-seo-structured-data-schema"),
1015
- 'type' => 'text',
1016
- 'desc' => __("The 3-letter currency code.", "wp-seo-structured-data-schema")
1017
- ),
1018
- 'availability' => array(
1019
- 'title' => 'Availability',
1020
- 'type' => 'select',
1021
- 'empty' => "Select one",
1022
- 'options' => array(
1023
- 'http://schema.org/InStock' => 'InStock',
1024
- 'http://schema.org/InStoreOnly' => 'InStoreOnly',
1025
- 'http://schema.org/OutOfStock' => 'OutOfStock',
1026
- 'http://schema.org/SoldOut' => 'SoldOut',
1027
- 'http://schema.org/OnlineOnly' => 'OnlineOnly',
1028
- 'http://schema.org/LimitedAvailability' => 'LimitedAvailability',
1029
- 'http://schema.org/Discontinued' => 'Discontinued',
1030
- 'http://schema.org/PreOrder' => 'PreOrder',
1031
- ),
1032
- 'desc' => __("Select a availability type", "wp-seo-structured-data-schema")
1033
- ),
1034
- 'itemCondition' => array(
1035
- 'title' => 'Product condition',
1036
- 'type' => 'select',
1037
- 'empty' => "Select one",
1038
- 'options' => array(
1039
- 'http://schema.org/NewCondition' => 'NewCondition',
1040
- 'http://schema.org/UsedCondition' => 'UsedCondition',
1041
- 'http://schema.org/DamagedCondition' => 'DamagedCondition',
1042
- 'http://schema.org/RefurbishedCondition' => 'RefurbishedCondition',
1043
- ),
1044
- 'desc' => __("Select a condition", "wp-seo-structured-data-schema")
1045
- ),
1046
- 'url' => array(
1047
- 'title' => __('Product URL', "wp-seo-structured-data-schema"),
1048
- 'type' => 'url',
1049
- 'desc' => __("A URL to the product web page (that includes the Offer). (Don't use offerURL for markup that appears on the product page itself.)", "wp-seo-structured-data-schema")
1050
- ),
1051
- )
1052
- ),
1053
- 'video' => array(
1054
- 'pro' => false,
1055
- 'title' => __('Video', "wp-seo-structured-data-schema"),
1056
- 'fields' => array(
1057
- 'active' => array(
1058
- 'type' => 'checkbox'
1059
- ),
1060
- 'name' => array(
1061
- 'title' => __('Name', "wp-seo-structured-data-schema"),
1062
- 'type' => 'text',
1063
- 'required' => true,
1064
- 'desc' => __("The title of the video", "wp-seo-structured-data-schema")
1065
- ),
1066
- 'description' => array(
1067
- 'title' => __('Description', "wp-seo-structured-data-schema"),
1068
- 'type' => 'textarea',
1069
- 'required' => true,
1070
- 'desc' => __("The description of the video", "wp-seo-structured-data-schema")
1071
- ),
1072
- 'thumbnailUrl' => array(
1073
- 'title' => 'Thumbnail URL',
1074
- 'type' => 'url',
1075
- 'placeholder' => "URL",
1076
- 'required' => true,
1077
- 'desc' => __("A URL pointing to the video thumbnail image file. Images must be at least 160x90 pixels and at most 1920x1080 pixels.", "wp-seo-structured-data-schema")
1078
- ),
1079
- 'uploadDate' => array(
1080
- 'title' => __('Updated date', "wp-seo-structured-data-schema"),
1081
- 'type' => 'text',
1082
- 'class' => 'kcseo-date',
1083
- 'desc' => __('2015-02-05T08:00:00+08:00', "wp-seo-structured-data-schema")
1084
- ),
1085
- 'duration' => array(
1086
- 'title' => __('Duration', "wp-seo-structured-data-schema"),
1087
- 'type' => 'text',
1088
- 'desc' => __("The duration of the video in ISO 8601 format.(PT1M33S)", "wp-seo-structured-data-schema")
1089
- ),
1090
- 'contentUrl' => array(
1091
- 'title' => 'Content URL',
1092
- 'type' => 'url',
1093
- 'placeholder' => 'URL',
1094
- 'desc' => __("A URL pointing to the actual video media file. This file should be in .mpg, .mpeg, .mp4, .m4v, .mov, .wmv, .asf, .avi, .ra, .ram, .rm, .flv, or other video file format.", "wp-seo-structured-data-schema")
1095
- ),
1096
- 'embedUrl' => array(
1097
- 'title' => 'Embed URL',
1098
- 'placeholder' => 'URL',
1099
- 'type' => 'url',
1100
- 'desc' => __("A URL pointing to a player for the specific video. Usually this is the information in the src element of an < embed> tag.Example: Dailymotion: http://www.dailymotion.com/swf/x1o2g.", "wp-seo-structured-data-schema")
1101
- ),
1102
- 'interactionCount' => array(
1103
- 'title' => __('Interaction count', "wp-seo-structured-data-schema"),
1104
- 'type' => 'text',
1105
- 'desc' => __("The number of times the video has been viewed.", "wp-seo-structured-data-schema")
1106
- ),
1107
- 'expires' => array(
1108
- 'title' => __('Expires', "wp-seo-structured-data-schema"),
1109
- 'type' => 'text',
1110
- 'class' => 'kcseo-date',
1111
- 'desc' => __("Like this: 2015-12-25", "wp-seo-structured-data-schema")
1112
- ),
1113
- )
1114
- ),
1115
- 'service' => array(
1116
- 'pro' => false,
1117
- 'title' => __('Service', "wp-seo-structured-data-schema"),
1118
- 'fields' => array(
1119
- 'active' => array(
1120
- 'type' => 'checkbox'
1121
- ),
1122
- 'name' => array(
1123
- 'title' => __('Name', "wp-seo-structured-data-schema"),
1124
- 'type' => 'text',
1125
- 'required' => true,
1126
- 'desc' => __("The name of the Service.", "wp-seo-structured-data-schema")
1127
- ),
1128
- 'serviceType' => array(
1129
- 'title' => __('Service type', "wp-seo-structured-data-schema"),
1130
- 'type' => 'text',
1131
- 'required' => true,
1132
- 'desc' => __("The type of service being offered, e.g. veterans' benefits, emergency relief, etc.", "wp-seo-structured-data-schema")
1133
- ),
1134
- 'additionalType' => array(
1135
- 'title' => 'Additional type(URL)',
1136
- 'type' => 'url',
1137
- 'placeholder' => 'URL',
1138
- 'desc' => __("An additional type for the service, typically used for adding more specific types from external vocabularies in microdata syntax.", "wp-seo-structured-data-schema")
1139
- ),
1140
- 'award' => array(
1141
- 'title' => __('Award', "wp-seo-structured-data-schema"),
1142
- 'type' => 'text',
1143
- 'desc' => __("An award won by or for this service.", "wp-seo-structured-data-schema")
1144
- ),
1145
- 'category' => array(
1146
- 'title' => __('Category', "wp-seo-structured-data-schema"),
1147
- 'type' => 'text',
1148
- 'desc' => __("A category for the service.", "wp-seo-structured-data-schema")
1149
- ),
1150
- 'providerMobility' => array(
1151
- 'title' => __('Provider mobility', "wp-seo-structured-data-schema"),
1152
- 'type' => 'text',
1153
- 'desc' => __("Indicates the mobility of a provided service (e.g. 'static', 'dynamic').", "wp-seo-structured-data-schema")
1154
- ),
1155
- 'description' => array(
1156
- 'title' => 'Description',
1157
- 'type' => 'textarea',
1158
- 'require' => true,
1159
- 'desc' => __("A short description of the service.", "wp-seo-structured-data-schema")
1160
- ),
1161
- 'image' => array(
1162
- 'title' => 'Image URL',
1163
- 'type' => 'url',
1164
- 'require' => false,
1165
- 'desc' => __("An image of the service. This should be a URL.", "wp-seo-structured-data-schema")
1166
- ),
1167
- 'mainEntityOfPage' => array(
1168
- 'title' => 'Main entity of page URL',
1169
- 'type' => 'url',
1170
- 'require' => false,
1171
- 'desc' => __("Indicates a page (or other CreativeWork) for which this thing is the main entity being described.", "wp-seo-structured-data-schema")
1172
- ),
1173
- 'sameAs' => array(
1174
- 'title' => 'Same as URL',
1175
- 'type' => 'url',
1176
- 'placeholder' => 'URL',
1177
- 'desc' => __("URL of a reference Web page that unambiguously indicates the service's identity. E.g. the URL of the service's Wikipedia page, Freebase page, or official website.", "wp-seo-structured-data-schema")
1178
- ),
1179
- 'url' => array(
1180
- 'title' => 'Url of the service',
1181
- 'type' => 'url',
1182
- 'placeholder' => 'URL',
1183
- 'desc' => __("URL of the service.", "wp-seo-structured-data-schema")
1184
- ),
1185
- 'alternateName' => array(
1186
- 'title' => __('Alternate name', "wp-seo-structured-data-schema"),
1187
- 'type' => 'text',
1188
- 'desc' => __('An alias for the service.', "wp-seo-structured-data-schema")
1189
- ),
1190
- )
1191
- ),
1192
- 'review' => array(
1193
- 'pro' => false,
1194
- 'title' => __('Review', "wp-seo-structured-data-schema"),
1195
- 'fields' => array(
1196
- 'active' => array(
1197
- 'type' => 'checkbox'
1198
- ),
1199
- 'itemName' => array(
1200
- 'title' => __('Name of the reviewed item', "wp-seo-structured-data-schema"),
1201
- 'type' => 'text',
1202
- 'required' => true,
1203
- 'desc' => __("The item that is being reviewed.", "wp-seo-structured-data-schema")
1204
- ),
1205
- 'reviewBody' => array(
1206
- 'title' => __('Review body', "wp-seo-structured-data-schema"),
1207
- 'type' => 'textarea',
1208
- 'required' => true,
1209
- 'desc' => __("The actual body of the review.", "wp-seo-structured-data-schema")
1210
- ),
1211
- 'name' => array(
1212
- 'title' => __('Review name', "wp-seo-structured-data-schema"),
1213
- 'type' => 'text',
1214
- 'required' => true,
1215
- 'desc' => __("A particular name for the review.", "wp-seo-structured-data-schema")
1216
- ),
1217
- 'author' => array(
1218
- 'title' => __('Author', "wp-seo-structured-data-schema"),
1219
- 'type' => 'text',
1220
- 'required' => true,
1221
- 'author' => 'Author name',
1222
- 'desc' => __("The author of the review. The reviewer’s name needs to be a valid name.", "wp-seo-structured-data-schema")
1223
- ),
1224
- 'datePublished' => array(
1225
- 'title' => __('Date of Published', "wp-seo-structured-data-schema"),
1226
- 'type' => 'text',
1227
- 'class' => 'kcseo-date',
1228
- 'desc' => __("Like this: 2015-12-25", "wp-seo-structured-data-schema")
1229
- ),
1230
- 'ratingValue' => array(
1231
- 'title' => __('Rating value', "wp-seo-structured-data-schema"),
1232
- 'type' => 'number',
1233
- 'attr' => 'step="any"',
1234
- 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
1235
- ),
1236
- 'bestRating' => array(
1237
- 'title' => __('Best rating', "wp-seo-structured-data-schema"),
1238
- 'type' => 'number',
1239
- 'attr' => 'step="any"',
1240
- 'desc' => __("The highest value allowed in this rating system.", "wp-seo-structured-data-schema")
1241
- ),
1242
- 'worstRating' => array(
1243
- 'title' => __('Worst rating', "wp-seo-structured-data-schema"),
1244
- 'type' => 'number',
1245
- 'attr' => 'step="any"',
1246
- 'desc' => __("The lowest value allowed in this rating system. * Required if the rating system is not on a 5-point scale. If worstRating is omitted, 1 is assumed.", "wp-seo-structured-data-schema")
1247
- ),
1248
- 'publisher' => array(
1249
- 'title' => __('Name of the organization', "wp-seo-structured-data-schema"),
1250
- 'type' => 'text',
1251
- 'desc' => __('The publisher of the review.', "wp-seo-structured-data-schema")
1252
- )
1253
- )
1254
- ),
1255
- 'aggregate_rating' => array(
1256
- 'pro' => false,
1257
- 'title' => __('Aggregate Ratings', "wp-seo-structured-data-schema"),
1258
- 'fields' => array(
1259
- 'active' => array(
1260
- 'type' => 'checkbox'
1261
- ),
1262
- 'schema_type' => array(
1263
- 'title' => __('Schema type', "wp-seo-structured-data-schema"),
1264
- 'type' => 'schema_type',
1265
- 'required' => true,
1266
- 'options' => $this->site_type(),
1267
- 'empty' => "Select one",
1268
- 'desc' => __("Use the most appropriate schema type for what is being reviewed.", "wp-seo-structured-data-schema")
1269
- ),
1270
- 'name' => array(
1271
- 'title' => __('Name of the item', "wp-seo-structured-data-schema"),
1272
- 'type' => 'text',
1273
- 'required' => true,
1274
- 'desc' => __("The item that is being rated.", "wp-seo-structured-data-schema")
1275
- ),
1276
- 'image' => array(
1277
- 'title' => 'Image',
1278
- 'type' => 'image',
1279
- 'required' => true,
1280
- 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder'
1281
- ),
1282
- 'priceRange' => array(
1283
- 'title' => 'Price Range (Recommended)',
1284
- 'type' => 'text',
1285
- 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder',
1286
- 'desc' => __("The price range of the business, for example $$$.", "wp-seo-structured-data-schema")
1287
- ),
1288
- 'telephone' => array(
1289
- 'title' => 'Telephone (Recommended)',
1290
- 'type' => 'text',
1291
- 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder'
1292
- ),
1293
- 'address' => array(
1294
- 'title' => 'Address (Recommended)',
1295
- 'type' => 'text',
1296
- 'holderClass' => 'kSeo-hidden aggregate-except-organization-holder',
1297
- ),
1298
- 'description' => array(
1299
- 'title' => __('Description', "wp-seo-structured-data-schema"),
1300
- 'type' => 'textarea',
1301
- 'desc' => __("Description for thr review", "wp-seo-structured-data-schema")
1302
- ),
1303
- 'ratingCount' => array(
1304
- 'title' => __('Rating Count', "wp-seo-structured-data-schema"),
1305
- 'type' => 'number',
1306
- 'attr' => 'step="any"',
1307
- 'required' => true,
1308
- 'desc' => __("The total number of ratings for the item on your site. <span class='required'>* At least one of ratingCount or reviewCount is required.</span>", "wp-seo-structured-data-schema")
1309
- ),
1310
- 'reviewCount' => array(
1311
- 'title' => __('Review Count', "wp-seo-structured-data-schema"),
1312
- 'type' => 'number',
1313
- 'attr' => 'step="any"',
1314
- 'required' => true,
1315
- 'desc' => __("Specifies the number of people who provided a review with or without an accompanying rating. At least one of ratingCount or reviewCount is required.", "wp-seo-structured-data-schema")
1316
- ),
1317
- 'ratingValue' => array(
1318
- 'title' => __('Rating Value', "wp-seo-structured-data-schema"),
1319
- 'type' => 'number',
1320
- 'attr' => 'step="any"',
1321
- 'required' => true,
1322
- 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
1323
- ),
1324
- 'ratingValue' => array(
1325
- 'title' => __('Rating Value', "wp-seo-structured-data-schema"),
1326
- 'attr' => 'step="any"',
1327
- 'type' => 'number',
1328
- 'required' => true,
1329
- 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
1330
- ),
1331
- 'bestRating' => array(
1332
- 'title' => __('Best Rating', "wp-seo-structured-data-schema"),
1333
- 'type' => 'number',
1334
- 'attr' => 'step="any"',
1335
- 'required' => true,
1336
- 'desc' => __("The highest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If bestRating is omitted, 5 is assumed.", "wp-seo-structured-data-schema")
1337
- ),
1338
- 'worstRating' => array(
1339
- 'title' => __('Worst Rating', "wp-seo-structured-data-schema"),
1340
- 'type' => 'number',
1341
- 'attr' => 'step="any"',
1342
- 'required' => true,
1343
- 'desc' => __("The lowest value allowed in this rating system. <span class='required'>* Required if the rating system is not a 5-point scale.</span> If worstRating is omitted, 1 is assumed.", "wp-seo-structured-data-schema")
1344
- )
1345
- )
1346
- ),
1347
- 'restaurant' => array(
1348
- 'pro' => false,
1349
- 'title' => __('Restaurant', "wp-seo-structured-data-schema"),
1350
- 'fields' => array(
1351
- 'active' => array(
1352
- 'type' => 'checkbox'
1353
- ),
1354
- 'name' => array(
1355
- 'title' => __('Name of the Restaurant', "wp-seo-structured-data-schema"),
1356
- 'type' => 'text',
1357
- 'required' => true
1358
- ),
1359
- 'description' => array(
1360
- 'title' => __('Description of the Restaurant', "wp-seo-structured-data-schema"),
1361
- 'type' => 'textarea',
1362
- ),
1363
- 'openingHours' => array(
1364
- 'title' => __('Opening Hours', "wp-seo-structured-data-schema"),
1365
- 'type' => 'textarea',
1366
- 'desc' => __('Mo,Tu,We,Th,Fr,Sa,Su 11:30-23:00', "wp-seo-structured-data-schema")
1367
- ),
1368
- 'telephone' => array(
1369
- 'title' => __('Opening Hours', "wp-seo-structured-data-schema"),
1370
- 'type' => 'text',
1371
- 'desc' => __('+155501003333', "wp-seo-structured-data-schema")
1372
- ),
1373
- 'menu' => array(
1374
- 'title' => __('Menu', "wp-seo-structured-data-schema"),
1375
- 'type' => 'text',
1376
- 'desc' => __('http://example.com/menu', "wp-seo-structured-data-schema")
1377
- ),
1378
- 'image' => array(
1379
- 'title' => __('Image', "wp-seo-structured-data-schema"),
1380
- 'type' => 'image',
1381
- 'required' => true
1382
- ),
1383
- 'address' => array(
1384
- 'title' => __('Address', "wp-seo-structured-data-schema"),
1385
- 'type' => 'textarea'
1386
- ),
1387
- 'priceRange' => array(
1388
- 'title' => __('Price Range', "wp-seo-structured-data-schema"),
1389
- 'type' => 'text',
1390
- 'desc' => __('The price range of the business, for example $$$', "wp-seo-structured-data-schema")
1391
- ),
1392
- 'servesCuisine' => array(
1393
- 'title' => __('Serves Cuisine', "wp-seo-structured-data-schema"),
1394
- 'type' => 'text',
1395
- 'desc' => __('The cuisine of the restaurant.', "wp-seo-structured-data-schema")
1396
- )
1397
- )
1398
- ),
1399
- 'localBusiness' => array(
1400
- 'pro' => false,
1401
- 'title' => __('Local Business', "wp-seo-structured-data-schema"),
1402
- 'fields' => array(
1403
- 'active' => array(
1404
- 'type' => 'checkbox'
1405
- ),
1406
- 'name' => array(
1407
- 'title' => __('Name', "wp-seo-structured-data-schema"),
1408
- 'type' => 'text',
1409
- 'required' => true
1410
- ),
1411
- 'description' => array(
1412
- 'title' => __('Description', "wp-seo-structured-data-schema"),
1413
- 'type' => 'textarea',
1414
- ),
1415
- 'image' => array(
1416
- 'title' => __('Business Logo', "wp-seo-structured-data-schema"),
1417
- 'type' => 'image',
1418
- 'required' => true
1419
- ),
1420
- 'priceRange' => array(
1421
- 'title' => __('Price Range (Recommended)', "wp-seo-structured-data-schema"),
1422
- 'type' => 'text',
1423
- 'desc' => __("The price range of the business, for example $$$.", "wp-seo-structured-data-schema")
1424
- ),
1425
- 'addressLocality' => array(
1426
- 'title' => __('Address locality', "wp-seo-structured-data-schema"),
1427
- 'type' => 'text',
1428
- 'desc' => __('City (i.e Kansas city)', "wp-seo-structured-data-schema")
1429
- ),
1430
- 'addressRegion' => array(
1431
- 'title' => __('Address region', "wp-seo-structured-data-schema"),
1432
- 'type' => 'text',
1433
- 'desc' => __('State (i.e. MO)', "wp-seo-structured-data-schema")
1434
- ),
1435
- 'postalCode' => array(
1436
- 'title' => __('Postal code', "wp-seo-structured-data-schema"),
1437
- 'type' => 'text',
1438
- ),
1439
- 'streetAddress' => array(
1440
- 'title' => __('Street address', "wp-seo-structured-data-schema"),
1441
- 'type' => 'text',
1442
- ),
1443
- 'telephone' => array(
1444
- 'title' => __('Telephone (Recommended)', "wp-seo-structured-data-schema"),
1445
- 'type' => 'text',
1446
- )
1447
- )
1448
- ),
1449
- 'book' => array(
1450
- 'pro' => true,
1451
- 'title' => __("Book", "wp-seo-structured-data-schema"),
1452
- ),
1453
- 'course' => array(
1454
- 'pro' => true,
1455
- 'title' => __("Course", "wp-seo-structured-data-schema"),
1456
- ),
1457
- 'JobPosting' => array(
1458
- 'pro' => true,
1459
- 'title' => __("Job Posting", "wp-seo-structured-data-schema"),
1460
- ),
1461
- 'movie' => array(
1462
- 'pro' => true,
1463
- 'title' => __("Movie", "wp-seo-structured-data-schema"),
1464
- ),
1465
- 'music' => array(
1466
- 'pro' => true,
1467
- 'title' => __("Music", "wp-seo-structured-data-schema"),
1468
- ),
1469
- 'recipe' => array(
1470
- 'pro' => true,
1471
- 'title' => __("Recipe", "wp-seo-structured-data-schema"),
1472
- ),
1473
- 'TVEpisode' => array(
1474
- 'pro' => true,
1475
- 'title' => __("TVEpisode", "wp-seo-structured-data-schema"),
1476
- ),
1477
- 'question' => array(
1478
- 'pro' => true,
1479
- 'title' => __("QAPage", "wp-seo-structured-data-schema"),
1480
- ),
1481
- );
1482
- }
1483
-
1484
- function get_jsonEncode($data = array()) {
1485
- $html = null;
1486
- /** @var TYPE_NAME $data */
1487
- if (!empty($data) && is_array($data)) {
1488
- $html .= '<script type="application/ld+json">' . json_encode($data,
1489
- JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES) . '</script>';
1490
- }
1491
-
1492
- return $html;
1493
- }
1494
-
1495
- function site_type() {
1496
- return array(
1497
- 'Organization',
1498
- 'LocalBusiness' => array(
1499
- 'AnimalShelter',
1500
- 'AutomotiveBusiness' => array(
1501
- 'AutoBodyShop',
1502
- 'AutoDealer',
1503
- 'AutoPartsStore',
1504
- 'AutoRental',
1505
- 'AutoRepair',
1506
- 'AutoWash',
1507
- 'GasStation',
1508
- 'MotorcycleDealer',
1509
- 'MotorcycleRepair'
1510
- ),
1511
- 'ChildCare',
1512
- 'DryCleaningOrLaundry',
1513
- 'EmergencyService',
1514
- 'EmploymentAgency',
1515
- 'EntertainmentBusiness' => array(
1516
- 'AdultEntertainment',
1517
- 'AmusementPark',
1518
- 'ArtGallery',
1519
- 'Casino',
1520
- 'ComedyClub',
1521
- 'MovieTheater',
1522
- 'NightClub',
1523
-
1524
- ),
1525
- 'FinancialService' => array(
1526
- 'AccountingService',
1527
- 'AutomatedTeller',
1528
- 'BankOrCreditUnion',
1529
- 'InsuranceAgency',
1530
- ),
1531
- 'FoodEstablishment' => array(
1532
- 'Bakery',
1533
- 'BarOrPub',
1534
- 'Brewery',
1535
- 'CafeOrCoffeeShop',
1536
- 'FastFoodRestaurant',
1537
- 'IceCreamShop',
1538
- 'Restaurant',
1539
- 'Winery',
1540
- ),
1541
- 'GovernmentOffice',
1542
- 'HealthAndBeautyBusiness' => array(
1543
- 'BeautySalon',
1544
- 'DaySpa',
1545
- 'HairSalon',
1546
- 'HealthClub',
1547
- 'NailSalon',
1548
- 'TattooParlor',
1549
- ),
1550
- 'HomeAndConstructionBusiness' => array(
1551
- 'Electrician',
1552
- 'GeneralContractor',
1553
- 'HVACBusiness',
1554
- 'HousePainter',
1555
- 'Locksmith',
1556
- 'MovingCompany',
1557
- 'Plumber',
1558
- 'RoofingContractor',
1559
- ),
1560
- 'InternetCafe',
1561
- 'LegalService' => array(
1562
- 'Attorney',
1563
- 'Notary',
1564
- ),
1565
- 'Library',
1566
- 'MedicalBusiness' => array(
1567
- 'CommunityHealth',
1568
- 'Dentist',
1569
- 'Dermatology',
1570
- 'DietNutrition',
1571
- 'Emergency',
1572
- 'Geriatric',
1573
- 'Gynecologic',
1574
- 'MedicalClinic',
1575
- 'Midwifery',
1576
- 'Nursing',
1577
- 'Obstetric',
1578
- 'Oncologic',
1579
- 'Optician',
1580
- 'Optometric',
1581
- 'Otolaryngologic',
1582
- 'Pediatric',
1583
- 'Pharmacy',
1584
- 'Physician',
1585
- 'Physiotherapy',
1586
- 'PlasticSurgery',
1587
- 'Podiatric',
1588
- 'PrimaryCare',
1589
- 'Psychiatric',
1590
- 'PublicHealth',
1591
- ),
1592
- 'LodgingBusiness' => array(
1593
- 'BedAndBreakfast',
1594
- 'Campground',
1595
- 'Hostel',
1596
- 'Hotel',
1597
- 'Motel',
1598
- 'Resort',
1599
- ),
1600
- 'ProfessionalService',
1601
- 'RadioStation',
1602
- 'RealEstateAgent',
1603
- 'RecyclingCenter',
1604
- 'SelfStorage',
1605
- 'ShoppingCenter',
1606
- 'SportsActivityLocation' => array(
1607
- 'BowlingAlley',
1608
- 'ExerciseGym',
1609
- 'GolfCourse',
1610
- 'HealthClub',
1611
- 'PublicSwimmingPool',
1612
- 'SkiResort',
1613
- 'SportsClub',
1614
- 'StadiumOrArena',
1615
- 'TennisComplex',
1616
- ),
1617
- 'Store' => array(
1618
- 'AutoPartsStore',
1619
- 'BikeStore',
1620
- 'BookStore',
1621
- 'ClothingStore',
1622
- 'ComputerStore',
1623
- 'ConvenienceStore',
1624
- 'DepartmentStore',
1625
- 'ElectronicsStore',
1626
- 'Florist',
1627
- 'FurnitureStore',
1628
- 'GardenStore',
1629
- 'GroceryStore',
1630
- 'HardwareStore',
1631
- 'HobbyShop',
1632
- 'HomeGoodsStore',
1633
- 'JewelryStore',
1634
- 'LiquorStore',
1635
- 'MensClothingStore',
1636
- 'MobilePhoneStore',
1637
- 'MovieRentalStore',
1638
- 'MusicStore',
1639
- 'OfficeEquipmentStore',
1640
- 'OutletStore',
1641
- 'PawnShop',
1642
- 'PetStore',
1643
- 'ShoeStore',
1644
- 'SportingGoodsStore',
1645
- 'TireShop',
1646
- 'ToyStore',
1647
- 'WholesaleStore'
1648
- ),
1649
- 'TelevisionStation',
1650
- 'TouristInformationCenter',
1651
- 'TravelAgency'
1652
- )
1653
- );
1654
- }
1655
-
1656
- function countryList() {
1657
- return array(
1658
- "AF" => "Afghanistan",
1659
- "AX" => "Aland Islands",
1660
- "AL" => "Albania",
1661
- "DZ" => "Algeria",
1662
- "AS" => "American Samoa",
1663
- "AD" => "Andorra",
1664
- "AO" => "Angola",
1665
- "AI" => "Anguilla",
1666
- "AQ" => "Antarctica",
1667
- "AG" => "Antigua and Barbuda",
1668
- "AR" => "Argentina",
1669
- "AM" => "Armenia",
1670
- "AW" => "Aruba",
1671
- "AU" => "Australia",
1672
- "AT" => "Austria",
1673
- "AZ" => "Azerbaijan",
1674
- "BS" => "Bahamas",
1675
- "BH" => "Bahrain",
1676
- "BD" => "Bangladesh",
1677
- "BB" => "Barbados",
1678
- "BY" => "Belarus",
1679
- "BE" => "Belgium",
1680
- "BZ" => "Belize",
1681
- "BJ" => "Benin",
1682
- "BM" => "Bermuda",
1683
- "BT" => "Bhutan",
1684
- "BO" => "Bolivia, Plurinational State of",
1685
- "BQ" => "Bonaire, Sint Eustatius and Saba",
1686
- "BA" => "Bosnia and Herzegovina",
1687
- "BW" => "Botswana",
1688
- "BV" => "Bouvet Island",
1689
- "BR" => "Brazil",
1690
- "IO" => "British Indian Ocean Territory",
1691
- "BN" => "Brunei Darussalam",
1692
- "BG" => "Bulgaria",
1693
- "BF" => "Burkina Faso",
1694
- "BI" => "Burundi",
1695
- "KH" => "Cambodia",
1696
- "CM" => "Cameroon",
1697
- "CA" => "Canada",
1698
- "CV" => "Cape Verde",
1699
- "KY" => "Cayman Islands",
1700
- "CF" => "Central African Republic",
1701
- "TD" => "Chad",
1702
- "CL" => "Chile",
1703
- "CN" => "China",
1704
- "CX" => "Christmas Island",
1705
- "CC" => "Cocos (Keeling) Islands",
1706
- "CO" => "Colombia",
1707
- "KM" => "Comoros",
1708
- "CG" => "Congo",
1709
- "CD" => "Congo, the Democratic Republic of the",
1710
- "CK" => "Cook Islands",
1711
- "CR" => "Costa Rica",
1712
- "CI" => "Côte d Ivoire",
1713
- "HR" => "Croatia",
1714
- "CU" => "Cuba",
1715
- "CW" => "Curaçao",
1716
- "CY" => "Cyprus",
1717
- "CZ" => "Czech Republic",
1718
- "DK" => "Denmark",
1719
- "DJ" => "Djibouti",
1720
- "DM" => "Dominica",
1721
- "DO" => "Dominican Republic",
1722
- "EC" => "Ecuador",
1723
- "EG" => "Egypt",
1724
- "SV" => "El Salvador",
1725
- "GQ" => "Equatorial Guinea",
1726
- "ER" => "Eritrea",
1727
- "EE" => "Estonia",
1728
- "ET" => "Ethiopia",
1729
- "FK" => "Falkland Islands (Malvinas)",
1730
- "FO" => "Faroe Islands",
1731
- "FJ" => "Fiji",
1732
- "FI" => "Finland",
1733
- "FR" => "France",
1734
- "GF" => "French Guiana",
1735
- "PF" => "French Polynesia",
1736
- "TF" => "French Southern Territories",
1737
- "GA" => "Gabon",
1738
- "GM" => "Gambia",
1739
- "GE" => "Georgia",
1740
- "DE" => "Germany",
1741
- "GH" => "Ghana",
1742
- "GI" => "Gibraltar",
1743
- "GR" => "Greece",
1744
- "GL" => "Greenland",
1745
- "GD" => "Grenada",
1746
- "GP" => "Guadeloupe",
1747
- "GU" => "Guam",
1748
- "GT" => "Guatemala",
1749
- "GG" => "Guernsey",
1750
- "GN" => "Guinea",
1751
- "GW" => "Guinea-Bissau",
1752
- "GY" => "Guyana",
1753
- "HT" => "Haiti",
1754
- "HM" => "Heard Island and McDonald Islands",
1755
- "VA" => "Holy See (Vatican City State)",
1756
- "HN" => "Honduras",
1757
- "HK" => "Hong Kong",
1758
- "HU" => "Hungary",
1759
- "IS" => "Iceland",
1760
- "IN" => "India",
1761
- "ID" => "Indonesia",
1762
- "IR" => "Iran, Islamic Republic of",
1763
- "IQ" => "Iraq",
1764
- "IE" => "Ireland",
1765
- "IM" => "Isle of Man",
1766
- "IL" => "Israel",
1767
- "IT" => "Italy",
1768
- "JM" => "Jamaica",
1769
- "JP" => "Japan",
1770
- "JE" => "Jersey",
1771
- "JO" => "Jordan",
1772
- "KZ" => "Kazakhstan",
1773
- "KE" => "Kenya",
1774
- "KI" => "Kiribati",
1775
- "KP" => "Korea, Democratic People's Republic of",
1776
- "KR" => "Korea, Republic of,",
1777
- "KW" => "Kuwait",
1778
- "KG" => "Kyrgyzstan",
1779
- "LA" => "Lao Peoples Democratic Republic",
1780
- "LV" => "Latvia",
1781
- "LB" => "Lebanon",
1782
- "LS" => "Lesotho",
1783
- "LR" => "Liberia",
1784
- "LY" => "Libya",
1785
- "LI" => "Liechtenstein",
1786
- "LT" => "Lithuania",
1787
- "LU" => "Luxembourg",
1788
- "MO" => "Macao",
1789
- "MK" => "Macedonia, the former Yugoslav Republic of",
1790
- "MG" => "Madagascar",
1791
- "MW" => "Malawi",
1792
- "MY" => "Malaysia",
1793
- "MV" => "Maldives",
1794
- "ML" => "Mali",
1795
- "MT" => "Malta",
1796
- "MH" => "Marshall Islands",
1797
- "MQ" => "Martinique",
1798
- "MR" => "Mauritania",
1799
- "MU" => "Mauritius",
1800
- "YT" => "Mayotte",
1801
- "MX" => "Mexico",
1802
- "FM" => "Micronesia, Federated States of",
1803
- "MD" => "Moldova, Republic of",
1804
- "MC" => "Monaco",
1805
- "MN" => "Mongolia",
1806
- "ME" => "Montenegro",
1807
- "MS" => "Montserrat",
1808
- "MA" => "Morocco",
1809
- "MZ" => "Mozambique",
1810
- "MM" => "Myanmar",
1811
- "NA" => "Namibia",
1812
- "NR" => "Nauru",
1813
- "NP" => "Nepal",
1814
- "NL" => "Netherlands",
1815
- "NC" => "New Caledonia",
1816
- "NZ" => "New Zealand",
1817
- "NI" => "Nicaragua",
1818
- "NE" => "Niger",
1819
- "NG" => "Nigeria",
1820
- "NU" => "Niue",
1821
- "NF" => "Norfolk Island",
1822
- "MP" => "Northern Mariana Islands",
1823
- "NO" => "Norway",
1824
- "OM" => "Oman",
1825
- "PK" => "Pakistan",
1826
- "PW" => "Palau",
1827
- "PS" => "Palestine, State of",
1828
- "PA" => "Panama",
1829
- "PG" => "Papua New Guinea",
1830
- "PY" => "Paraguay",
1831
- "PE" => "Peru",
1832
- "PH" => "Philippines",
1833
- "PN" => "Pitcairn",
1834
- "PL" => "Poland",
1835
- "PT" => "Portugal",
1836
- "PR" => "Puerto Rico",
1837
- "QA" => "Qatar",
1838
- "RE" => "Reunion",
1839
- "RO" => "Romania",
1840
- "RU" => "Russian Federation",
1841
- "RW" => "Rwanda",
1842
- "BL" => "Saint Barthélemy",
1843
- "SH" => "Saint Helena, Ascension and Tristan da Cunha",
1844
- "KN" => "Saint Kitts and Nevis",
1845
- "LC" => "Saint Lucia",
1846
- "MF" => "Saint Martin (French part)",
1847
- "PM" => "Saint Pierre and Miquelon",
1848
- "VC" => "Saint Vincent and the Grenadines",
1849
- "WS" => "Samoa",
1850
- "SM" => "San Marino",
1851
- "ST" => "Sao Tome and Principe",
1852
- "SA" => "Saudi Arabia",
1853
- "SN" => "Senegal",
1854
- "RS" => "Serbia",
1855
- "SC" => "Seychelles",
1856
- "SL" => "Sierra Leone",
1857
- "SG" => "Singapore",
1858
- "SX" => "Sint Maarten (Dutch part)",
1859
- "SK" => "Slovakia",
1860
- "SI" => "Slovenia",
1861
- "SB" => "Solomon Islands",
1862
- "SO" => "Somalia",
1863
- "ZA" => "South Africa",
1864
- "GS" => "South Georgia and the South Sandwich Islands",
1865
- "SS" => "South Sudan",
1866
- "ES" => "Spain",
1867
- "LK" => "Sri Lanka",
1868
- "SD" => "Sudan",
1869
- "SR" => "Suriname",
1870
- "SJ" => "Svalbard and Jan Mayen",
1871
- "SZ" => "Swaziland",
1872
- "SE" => "Sweden",
1873
- "CH" => "Switzerland",
1874
- "SY" => "Syrian Arab Republic",
1875
- "TW" => "Taiwan, Province of China",
1876
- "TJ" => "Tajikistan",
1877
- "TZ" => "Tanzania, United Republic of",
1878
- "TH" => "Thailand",
1879
- "TL" => "Timor-Leste",
1880
- "TG" => "Togo",
1881
- "TK" => "Tokelau",
1882
- "TO" => "Tonga",
1883
- "TT" => "Trinidad and Tobago",
1884
- "TN" => "Tunisia",
1885
- "TR" => "Turkey",
1886
- "TM" => "Turkmenistan",
1887
- "TC" => "Turks and Caicos Islands",
1888
- "TV" => "Tuvalu",
1889
- "UG" => "Uganda",
1890
- "UA" => "Ukraine",
1891
- "AE" => "United Arab Emirates",
1892
- "GB" => "United Kingdom",
1893
- "US" => "United States",
1894
- "UM" => "United States Minor Outlying Islands",
1895
- "UY" => "Uruguay",
1896
- "UZ" => "Uzbekistan",
1897
- "VU" => "Vanuatu",
1898
- "VE" => "Venezuela, Bolivarian Republic of",
1899
- "VN" => "Viet Nam",
1900
- "VG" => "Virgin Islands, British",
1901
- "VI" => "Virgin Islands, U.S.",
1902
- "WF" => "Wallis and Futuna",
1903
- "EH" => "Western Sahara",
1904
- "YE" => "Yemen",
1905
- "ZM" => "Zambia",
1906
- "ZW" => "Zimbabwe",
1907
- );
1908
- }
1909
-
1910
- function contactType() {
1911
- return array(
1912
- "Customer Service",
1913
- "Technical Support",
1914
- "Billing Support",
1915
- "Bill Payment",
1916
- "Sales",
1917
- "Reservations",
1918
- "Credit Card Support",
1919
- "Emergency",
1920
- "Baggage Tracking",
1921
- "Roadside Assistance",
1922
- "Package Tracking"
1923
- );
1924
- }
1925
-
1926
- function languageList() {
1927
- return array(
1928
- "Akan",
1929
- "Amharic",
1930
- "Arabic",
1931
- "Assamese",
1932
- "Awadhi",
1933
- "Azerbaijani",
1934
- "Balochi",
1935
- "Belarusian",
1936
- "Bengali",
1937
- "Bhojpuri",
1938
- "Burmese",
1939
- "Cantonese",
1940
- "Cebuano",
1941
- "Chewa",
1942
- "Chhattisgarhi",
1943
- "Chittagonian",
1944
- "Czech",
1945
- "Deccan",
1946
- "Dhundhari",
1947
- "Dutch",
1948
- "English",
1949
- "French",
1950
- "Fula",
1951
- "Gan",
1952
- "German",
1953
- "Greek",
1954
- "Gujarati",
1955
- "Haitian Creole",
1956
- "Hakka",
1957
- "Haryanvi",
1958
- "Hausa",
1959
- "Hiligaynon",
1960
- "Hindi / Urdu",
1961
- "Hmong",
1962
- "Hungarian",
1963
- "Igbo",
1964
- "Ilokano",
1965
- "Italian",
1966
- "Japanese",
1967
- "Javanese",
1968
- "Jin",
1969
- "Kannada",
1970
- "Kazakh",
1971
- "Khmer",
1972
- "Kinyarwanda",
1973
- "Kirundi",
1974
- "Konkani",
1975
- "Korean",
1976
- "Kurdish",
1977
- "Madurese",
1978
- "Magahi",
1979
- "Maithili",
1980
- "Malagasy",
1981
- "Malay/Indonesian",
1982
- "Malayalam",
1983
- "Mandarin",
1984
- "Marathi",
1985
- "Marwari",
1986
- "Min Bei",
1987
- "Min Dong",
1988
- "Min Nan",
1989
- "Mossi",
1990
- "Nepali",
1991
- "Oriya",
1992
- "Oromo",
1993
- "Pashto",
1994
- "Persian",
1995
- "Polish",
1996
- "Portuguese",
1997
- "Punjabi",
1998
- "Quechua",
1999
- "Romanian",
2000
- "Russian",
2001
- "Saraiki",
2002
- "Serbo-Croatian",
2003
- "Shona",
2004
- "Sindhi",
2005
- "Sinhalese",
2006
- "Somali",
2007
- "Spanish",
2008
- "Sundanese",
2009
- "Swahili",
2010
- "Swedish",
2011
- "Sylheti",
2012
- "Tagalog",
2013
- "Tamil",
2014
- "Telugu",
2015
- "Thai",
2016
- "Turkish",
2017
- "Ukrainian",
2018
- "Uyghur",
2019
- "Uzbek",
2020
- "Vietnamese",
2021
- "Wu",
2022
- "Xhosa",
2023
- "Xiang",
2024
- "Yoruba",
2025
- "Zulu",
2026
- );
2027
- }
2028
-
2029
- function socialList() {
2030
- return array(
2031
- 'facebook' => __('Facebook'),
2032
- 'twitter' => __('Twitter'),
2033
- 'google-plus' => __('Google+'),
2034
- 'instagram' => __('Instagram'),
2035
- 'youtube' => __('Youtube'),
2036
- 'linkedin' => __('LinkedIn'),
2037
- 'myspace' => __('Myspace'),
2038
- 'pinterest' => __('Pinterest'),
2039
- 'soundcloud' => __('SoundCloud'),
2040
- 'tumblr' => __('Tumblr'),
2041
- 'wikidata' => __('Wikidata'),
2042
- );
2043
- }
2044
-
2045
- function imgInfo($url = null) {
2046
- $img = array();
2047
- if ($url) {
2048
- $imgA = @getimagesize($url);
2049
- if (is_array($imgA) && !empty($imgA)) {
2050
- $img['width'] = $imgA[0];
2051
- $img['height'] = $imgA[1];
2052
- } else {
2053
- $img['width'] = 0;
2054
- $img['height'] = 0;
2055
- }
2056
- }
2057
-
2058
- return $img;
2059
- }
2060
-
2061
- function isAssoc($array) {
2062
- $keys = array_keys($array);
2063
-
2064
- return $keys !== array_keys($keys);
2065
- }
2066
-
2067
-
2068
- }
2069
  endif;
1
  <?php
2
 
3
+ if ( ! class_exists( 'KcSeoSchemaModel' ) ):
4
+ class KcSeoSchemaModel {
5
+
6
+ function __construct() {
7
+
8
+ }
9
+
10
+ function schemaOutput( $schemaID, $metaData ) {
11
+ $html = null;
12
+
13
+ if ( $schemaID ) {
14
+ global $KcSeoWPSchema;
15
+ switch ( $schemaID ) {
16
+ case "article":
17
+ $article = array();
18
+ $article["@context"] = "http://schema.org";
19
+ $article["@type"] = "Article";
20
+ if ( ! empty( $metaData['headline'] ) ) {
21
+ $article["headline"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['headline'] );
22
+ }
23
+ if ( ! empty( $metaData['mainEntityOfPage'] ) ) {
24
+ $article["mainEntityOfPage"] = array(
25
+ "@type" => "WebPage",
26
+ "@id" => $KcSeoWPSchema->sanitizeOutPut( $metaData["mainEntityOfPage"] )
27
+ );
28
+ }
29
+ if ( ! empty( $metaData['author'] ) ) {
30
+ $article["author"] = array(
31
+ "@type" => "Person",
32
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['author'] )
33
+ );
34
+ }
35
+ if ( ! empty( $metaData['publisher'] ) ) {
36
+ if ( ! empty( $metaData['publisherImage'] ) ) {
37
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['publisherImage'] ) );
38
+ $plA = array(
39
+ "@type" => "ImageObject",
40
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
41
+ "height" => $img['height'],
42
+ "width" => $img['width']
43
+ );
44
+ } else {
45
+ $plA = array();
46
+ }
47
+ $article["publisher"] = array(
48
+ "@type" => "Organization",
49
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['publisher'] ),
50
+ "logo" => $plA
51
+ );
52
+ }
53
+ if ( ! empty( $metaData['alternativeHeadline'] ) ) {
54
+ $article["alternativeHeadline"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['alternativeHeadline'] );
55
+ }
56
+ if ( ! empty( $metaData['image'] ) ) {
57
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
58
+ $article["image"] = array(
59
+ "@type" => "ImageObject",
60
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
61
+ "height" => $img['height'],
62
+ "width" => $img['width']
63
+ );
64
+ }
65
+ if ( ! empty( $metaData['datePublished'] ) ) {
66
+ $article["datePublished"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['datePublished'] );
67
+ }
68
+ if ( ! empty( $metaData['dateModified'] ) ) {
69
+ $article["dateModified"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['dateModified'] );
70
+ }
71
+ if ( ! empty( $metaData['description'] ) ) {
72
+ $article["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
73
+ 'textarea' );
74
+ }
75
+ if ( ! empty( $metaData['articleBody'] ) ) {
76
+ $article["articleBody"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['articleBody'],
77
+ 'textarea' );
78
+ }
79
+ $html .= $this->get_jsonEncode( $article );
80
+ break;
81
+
82
+ case "news_article":
83
+ $newsArticle = array();
84
+ $newsArticle["@context"] = "http://schema.org";
85
+ $newsArticle["@type"] = "NewsArticle";
86
+ if ( ! empty( $metaData['headline'] ) ) {
87
+ $newsArticle["headline"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['headline'] );
88
+ }
89
+ if ( ! empty( $metaData['mainEntityOfPage'] ) ) {
90
+ $newsArticle["mainEntityOfPage"] = array(
91
+ "@type" => "WebPage",
92
+ "@id" => $KcSeoWPSchema->sanitizeOutPut( $metaData["mainEntityOfPage"] )
93
+ );
94
+ }
95
+ if ( ! empty( $metaData['author'] ) ) {
96
+ $newsArticle["author"] = array(
97
+ "@type" => "Person",
98
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['author'] )
99
+ );
100
+ }
101
+ if ( ! empty( $metaData['image'] ) ) {
102
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
103
+ $newsArticle["image"] = array(
104
+ "@type" => "ImageObject",
105
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
106
+ "height" => $img['height'],
107
+ "width" => $img['width']
108
+ );
109
+ }
110
+ if ( ! empty( $metaData['datePublished'] ) ) {
111
+ $newsArticle["datePublished"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['datePublished'] );
112
+ }
113
+ if ( ! empty( $metaData['dateModified'] ) ) {
114
+ $newsArticle["dateModified"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['dateModified'] );
115
+ }
116
+ if ( ! empty( $metaData['publisher'] ) ) {
117
+ if ( ! empty( $metaData['publisherImage'] ) ) {
118
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['publisherImage'] ) );
119
+ $plA = array(
120
+ "@type" => "ImageObject",
121
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
122
+ "height" => $img['height'],
123
+ "width" => $img['width']
124
+ );
125
+ } else {
126
+ $plA = array();
127
+ }
128
+ $newsArticle["publisher"] = array(
129
+ "@type" => "Organization",
130
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['publisher'] ),
131
+ "logo" => $plA
132
+ );
133
+ }
134
+ if ( ! empty( $metaData['description'] ) ) {
135
+ $newsArticle["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
136
+ 'textarea' );
137
+ }
138
+ if ( ! empty( $metaData['articleBody'] ) ) {
139
+ $newsArticle["articleBody"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['articleBody'],
140
+ 'textarea' );
141
+ }
142
+ $html .= $this->get_jsonEncode( $newsArticle );
143
+ break;
144
+
145
+ case "blog_posting":
146
+ $blogPosting = array();
147
+ $blogPosting["@context"] = "http://schema.org";
148
+ $blogPosting["@type"] = "BlogPosting";
149
+ if ( ! empty( $metaData['headline'] ) ) {
150
+ $blogPosting["headline"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['headline'] );
151
+ }
152
+ if ( ! empty( $metaData['mainEntityOfPage'] ) ) {
153
+ $blogPosting["mainEntityOfPage"] = array(
154
+ "@type" => "WebPage",
155
+ "@id" => $KcSeoWPSchema->sanitizeOutPut( $metaData["mainEntityOfPage"] )
156
+ );
157
+ }
158
+ if ( ! empty( $metaData['author'] ) ) {
159
+ $blogPosting["author"] = array(
160
+ "@type" => "Person",
161
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['author'] )
162
+ );
163
+ }
164
+ if ( ! empty( $metaData['image'] ) ) {
165
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
166
+ $blogPosting["image"] = array(
167
+ "@type" => "ImageObject",
168
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
169
+ "height" => $img['height'],
170
+ "width" => $img['width']
171
+ );
172
+ }
173
+ if ( ! empty( $metaData['datePublished'] ) ) {
174
+ $blogPosting["datePublished"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['datePublished'] );
175
+ }
176
+ if ( ! empty( $metaData['dateModified'] ) ) {
177
+ $blogPosting["dateModified"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['dateModified'] );
178
+ }
179
+ if ( ! empty( $metaData['publisher'] ) ) {
180
+ if ( ! empty( $metaData['publisherImage'] ) ) {
181
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['publisherImage'] ) );
182
+ $plA = array(
183
+ "@type" => "ImageObject",
184
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
185
+ "height" => $img['height'],
186
+ "width" => $img['width']
187
+ );
188
+ } else {
189
+ $plA = array();
190
+ }
191
+ $blogPosting["publisher"] = array(
192
+ "@type" => "Organization",
193
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['publisher'] ),
194
+ "logo" => $plA
195
+ );
196
+ }
197
+ if ( ! empty( $metaData['description'] ) ) {
198
+ $blogPosting["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
199
+ 'textarea' );
200
+ }
201
+ if ( ! empty( $metaData['articleBody'] ) ) {
202
+ $blogPosting["articleBody"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['articleBody'],
203
+ 'textarea' );
204
+ }
205
+ $html .= $this->get_jsonEncode( $blogPosting );
206
+ break;
207
+
208
+ case 'event':
209
+ $event = array();
210
+ $event["@context"] = "http://schema.org";
211
+ $event["@type"] = "Event";
212
+ if ( ! empty( $metaData['name'] ) ) {
213
+ $event["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
214
+ }
215
+ if ( ! empty( $metaData['startDate'] ) ) {
216
+ $event["startDate"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['startDate'] );
217
+ }
218
+ if ( ! empty( $metaData['endDate'] ) ) {
219
+ $event["endDate"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['endDate'] );
220
+ }
221
+ if ( ! empty( $metaData['description'] ) ) {
222
+ $event["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
223
+ 'textarea' );
224
+ }
225
+ if ( ! empty( $metaData['performerName'] ) ) {
226
+ $event["performer"] = array(
227
+ "@type" => "Person",
228
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['performerName'] )
229
+ );
230
+ }
231
+ if ( ! empty( $metaData['image'] ) ) {
232
+ $event["image"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['image'], 'url' );
233
+ }
234
+ if ( ! empty( $metaData['locationName'] ) ) {
235
+ $event["location"] = array(
236
+ "@type" => "Place",
237
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['locationName'] ),
238
+ "address" => $KcSeoWPSchema->sanitizeOutPut( $metaData['locationAddress'] )
239
+ );
240
+ }
241
+ if ( ! empty( $metaData['price'] ) ) {
242
+ $event["offers"] = array(
243
+ "@type" => "Offer",
244
+ "price" => $KcSeoWPSchema->sanitizeOutPut( $metaData['price'] )
245
+ );
246
+ if ( ! empty( $metaData['priceCurrency'] ) ) {
247
+ $event["offers"]['priceCurrency'] = $KcSeoWPSchema->sanitizeOutPut( $metaData['priceCurrency'] );
248
+ }
249
+ if ( ! empty( $metaData['url'] ) ) {
250
+ $event["offers"]['url'] = $KcSeoWPSchema->sanitizeOutPut( $metaData['url'], 'url' );
251
+ }
252
+ if ( ! empty( $metaData['availability'] ) ) {
253
+ $event["offers"]['availability'] = $KcSeoWPSchema->sanitizeOutPut( $metaData['availability'] );
254
+ }
255
+ if ( ! empty( $metaData['validFrom'] ) ) {
256
+ $event["offers"]['validFrom'] = $KcSeoWPSchema->sanitizeOutPut( $metaData['validFrom'] );
257
+ }
258
+ }
259
+ if ( ! empty( $metaData['url'] ) ) {
260
+ $event["url"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['url'], 'url' );
261
+ }
262
+ $html .= $this->get_jsonEncode( $event );
263
+ break;
264
+
265
+ case 'product':
266
+ $product = array();
267
+ $product["@context"] = "http://schema.org";
268
+ $product["@type"] = "Product";
269
+ if ( ! empty( $metaData['name'] ) ) {
270
+ $product["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
271
+ }
272
+ if ( ! empty( $metaData['image'] ) ) {
273
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
274
+ $product["image"] = $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' );
275
+ }
276
+ if ( ! empty( $metaData['description'] ) ) {
277
+ $product["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'] );
278
+ }
279
+ if ( ! empty( $metaData['sku'] ) ) {
280
+ $product["sku"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['sku'] );
281
+ }
282
+ if ( ! empty( $metaData['brand'] ) ) {
283
+ $product["brand"] = array(
284
+ "@type" => "Thing",
285
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['brand'] )
286
+ );
287
+ }
288
+ if ( ! empty( $metaData['ratingValue'] ) ) {
289
+ $product["aggregateRating"] = array(
290
+ "@type" => "AggregateRating",
291
+ "ratingValue" => ! empty( $metaData['ratingValue'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['ratingValue'] ) : null,
292
+ "reviewCount" => ! empty( $metaData['reviewCount'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['reviewCount'] ) : null
293
+ );
294
+ }
295
+ if ( ! empty( $metaData['reviewRatingValue'] ) || ! empty( $metaData['reviewBestRating'] ) || ! empty( $metaData['reviewWorstRating'] ) ) {
296
+ $product["review"] = array(
297
+ "@type" => "Review",
298
+ "reviewRating" => array(
299
+ "@type" => "Rating",
300
+ "ratingValue" => ! empty( $metaData['reviewRatingValue'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['reviewRatingValue'] ) : null,
301
+ "bestRating" => ! empty( $metaData['reviewBestRating'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['reviewBestRating'] ) : null,
302
+ "worstRating" => ! empty( $metaData['reviewWorstRating'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['reviewWorstRating'] ) : null
303
+ ),
304
+ "author" => array(
305
+ "@type" => "Person",
306
+ "name" => ! empty( $metaData['reviewAuthor'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['reviewAuthor'] ) : null
307
+ )
308
+ );
309
+ }
310
+ if ( ! empty( $metaData['price'] ) ) {
311
+ $product["offers"] = array(
312
+ "@type" => "Offer",
313
+ "price" => $KcSeoWPSchema->sanitizeOutPut( $metaData['price'] ),
314
+ "priceValidUntil" => $KcSeoWPSchema->sanitizeOutPut( $metaData['priceValidUntil'] ),
315
+ "priceCurrency" => ! empty( $metaData['priceCurrency'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['priceCurrency'] ) : null,
316
+ "itemCondition" => ! empty( $metaData['itemCondition'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['itemCondition'] ) : null,
317
+ "availability" => ! empty( $metaData['availability'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['availability'] ) : null,
318
+ "url" => ! empty( $metaData['url'] ) ? $KcSeoWPSchema->sanitizeOutPut( $metaData['url'] ) : null
319
+ );
320
+ }
321
+ $html .= $this->get_jsonEncode( $product );
322
+ break;
323
+
324
+ case 'video':
325
+ $video = array();
326
+ $video["@context"] = "http://schema.org";
327
+ $video["@type"] = "VideoObject";
328
+ if ( ! empty( $metaData['name'] ) ) {
329
+ $video["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
330
+ }
331
+ if ( ! empty( $metaData['description'] ) ) {
332
+ $video["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
333
+ 'textarea' );
334
+ }
335
+ if ( ! empty( $metaData['description'] ) ) {
336
+ $video["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'] );
337
+ }
338
+ if ( ! empty( $metaData['thumbnailUrl'] ) ) {
339
+ $video["thumbnailUrl"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['thumbnailUrl'], 'url' );
340
+ }
341
+ if ( ! empty( $metaData['uploadDate'] ) ) {
342
+ $video["uploadDate"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['uploadDate'] );
343
+ }
344
+ if ( ! empty( $metaData['duration'] ) ) {
345
+ $video["duration"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['duration'] );
346
+ }
347
+ if ( ! empty( $metaData['contentUrl'] ) ) {
348
+ $video["contentUrl"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['contentUrl'], 'url' );
349
+ }
350
+ if ( ! empty( $metaData['interactionCount'] ) ) {
351
+ $video["interactionCount"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['interactionCount'] );
352
+ }
353
+ if ( ! empty( $metaData['expires'] ) ) {
354
+ $video["expires"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['expires'] );
355
+ }
356
+ $html .= $this->get_jsonEncode( $video );
357
+ break;
358
+
359
+ case 'service':
360
+ $service = array();
361
+ $service["@context"] = "http://schema.org";
362
+ $service["@type"] = "Service";
363
+ if ( ! empty( $metaData['name'] ) ) {
364
+ $service["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
365
+ }
366
+ if ( ! empty( $metaData['serviceType'] ) ) {
367
+ $service["serviceType"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['serviceType'] );
368
+ }
369
+ /*
370
  if ( ! empty( $metaData['locationName'] ) ) {
371
  $service["location"] = array(
372
  "@type" => "Place",
374
  "address" => $KcSeoWPSchema->sanitizeOutPut( $metaData['locationAddress'] )
375
  );
376
  }*/
377
+ if ( ! empty( $metaData['award'] ) ) {
378
+ $service["award"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['award'] );
379
+ }
380
+ if ( ! empty( $metaData['category'] ) ) {
381
+ $service["category"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['category'] );
382
+ }
383
+ if ( ! empty( $metaData['providerMobility'] ) ) {
384
+ $service["providerMobility"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['providerMobility'] );
385
+ }
386
+ if ( ! empty( $metaData['additionalType'] ) ) {
387
+ $service["additionalType"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['additionalType'] );
388
+ }
389
+ if ( ! empty( $metaData['alternateName'] ) ) {
390
+ $service["alternateName"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['alternateName'] );
391
+ }
392
+ if ( ! empty( $metaData['image'] ) ) {
393
+ $service["image"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['image'] );
394
+ }
395
+ if ( ! empty( $metaData['mainEntityOfPage'] ) ) {
396
+ $service["mainEntityOfPage"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['mainEntityOfPage'] );
397
+ }
398
+ if ( ! empty( $metaData['sameAs'] ) ) {
399
+ $service["sameAs"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['sameAs'] );
400
+ }
401
+ if ( ! empty( $metaData['url'] ) ) {
402
+ $service["url"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['url'], 'url' );
403
+ }
404
+ $html .= $this->get_jsonEncode( $service );
405
+ break;
406
+
407
+ case 'review':
408
+ $review = array();
409
+ $review["@context"] = "http://schema.org";
410
+ $review["@type"] = "Review";
411
+ if ( ! empty( $metaData['itemName'] ) ) {
412
+ $review["itemReviewed"] = array(
413
+ "@type" => "Thing",
414
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['itemName'] )
415
+ );
416
+ }
417
+ if ( ! empty( $metaData['ratingValue'] ) ) {
418
+ $review["reviewRating"] = array(
419
+ "@type" => "Rating",
420
+ "ratingValue" => $KcSeoWPSchema->sanitizeOutPut( $metaData['ratingValue'] ),
421
+ "bestRating" => $KcSeoWPSchema->sanitizeOutPut( $metaData['bestRating'] ),
422
+ "worstRating" => $KcSeoWPSchema->sanitizeOutPut( $metaData['worstRating'] )
423
+ );
424
+ }
425
+ if ( ! empty( $metaData['name'] ) ) {
426
+ $review["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
427
+ }
428
+ if ( ! empty( $metaData['author'] ) ) {
429
+ $review["author"] = array(
430
+ "@type" => "Person",
431
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['author'] )
432
+ );
433
+ }
434
+ if ( ! empty( $metaData['reviewBody'] ) ) {
435
+ $review["reviewBody"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['reviewBody'] );
436
+ }
437
+ if ( ! empty( $metaData['datePublished'] ) ) {
438
+ $review["datePublished"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['datePublished'] );
439
+ }
440
+ if ( ! empty( $metaData['publisher'] ) ) {
441
+ $review["publisher"] = array(
442
+ "@type" => "Organization",
443
+ "name" => $KcSeoWPSchema->sanitizeOutPut( $metaData['publisher'] )
444
+ );
445
+ }
446
+ $html .= $this->get_jsonEncode( $review );
447
+ break;
448
+ case 'aggregate_rating':
449
+ $aRating = array();
450
+ $aRating["@context"] = "http://schema.org";
451
+ $aRating["@type"] = ! empty( $metaData['schema_type'] ) ? $metaData['schema_type'] : "LocalBusiness";
452
+ if ( ! empty( $metaData['name'] ) ) {
453
+ $aRating["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
454
+ }
455
+ if ( ! empty( $metaData['description'] ) ) {
456
+ $aRating["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
457
+ 'textarea' );
458
+ }
459
+ if ( $aRating["@type"] != "Organization" ) {
460
+ if ( ! empty( $metaData['image'] ) ) {
461
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
462
+ $aRating["image"] = array(
463
+ "@type" => "ImageObject",
464
+ "url" => $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' ),
465
+ "height" => $img['height'],
466
+ "width" => $img['width']
467
+ );
468
+ }
469
+ if ( ! empty( $metaData['priceRange'] ) ) {
470
+ $aRating["priceRange"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['priceRange'] );
471
+ }
472
+ if ( ! empty( $metaData['telephone'] ) ) {
473
+ $aRating["telephone"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['telephone'] );
474
+ }
475
+
476
+ if ( ! empty( $metaData['address'] ) ) {
477
+ $aRating["address"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['address'] );
478
+ }
479
+ }
480
+
481
+ if ( ! empty( $metaData['ratingValue'] ) ) {
482
+ $rValue = array();
483
+ $rValue["@type"] = "AggregateRating";
484
+ $rValue["ratingValue"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['ratingValue'] );
485
+ if ( ! empty( $metaData['bestRating'] ) ) {
486
+ $rValue["bestRating"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['bestRating'] );
487
+ }
488
+ if ( ! empty( $metaData['worstRating'] ) ) {
489
+ $rValue["worstRating"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['worstRating'] );
490
+ }
491
+ if ( ! empty( $metaData['ratingCount'] ) ) {
492
+ $rValue["ratingCount"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['ratingCount'] );
493
+ }
494
+
495
+ $aRating["aggregateRating"] = $rValue;
496
+ }
497
+ $html .= $this->get_jsonEncode( $aRating );
498
+ break;
499
+
500
+ case 'restaurant':
501
+ $restaurant = array();
502
+ $restaurant["@context"] = "http://schema.org";
503
+ $restaurant["@type"] = "Restaurant";
504
+ if ( ! empty( $metaData['name'] ) ) {
505
+ $restaurant["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
506
+ }
507
+ if ( ! empty( $metaData['description'] ) ) {
508
+ $restaurant["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
509
+ 'textarea' );
510
+ }
511
+ if ( ! empty( $metaData['openingHours'] ) ) {
512
+ $restaurant["openingHours"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['openingHours'],
513
+ 'textarea' );
514
+ }
515
+ if ( ! empty( $metaData['telephone'] ) ) {
516
+ $restaurant["telephone"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['telephone'] );
517
+ }
518
+ if ( ! empty( $metaData['menu'] ) ) {
519
+ $restaurant["menu"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['menu'], 'url' );
520
+ }
521
+ if ( ! empty( $metaData['image'] ) ) {
522
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
523
+ $restaurant["image"] = $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' );
524
+ }
525
+ if ( ! empty( $metaData['address'] ) ) {
526
+ $restaurant["address"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['address'], 'textarea' );
527
+ }
528
+ if ( ! empty( $metaData['priceRange'] ) ) {
529
+ $restaurant["priceRange"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['priceRange'] );
530
+ }
531
+ if ( ! empty( $metaData['servesCuisine'] ) ) {
532
+ $restaurant["servesCuisine"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['servesCuisine'] );
533
+ }
534
+ $html .= $this->get_jsonEncode( $restaurant );
535
+ break;
536
+
537
+ case 'localBusiness':
538
+ $localBusiness = array();
539
+ $localBusiness["@context"] = "http://schema.org";
540
+ $localBusiness["@type"] = "LocalBusiness";
541
+ if ( ! empty( $metaData['name'] ) ) {
542
+ $localBusiness["name"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['name'] );
543
+ }
544
+ if ( ! empty( $metaData['description'] ) ) {
545
+ $localBusiness["description"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['description'],
546
+ 'textarea' );
547
+ }
548
+ if ( ! empty( $metaData['image'] ) ) {
549
+ $img = $KcSeoWPSchema->imageInfo( absint( $metaData['image'] ) );
550
+ $localBusiness["image"] = $KcSeoWPSchema->sanitizeOutPut( $img['url'], 'url' );
551
+ }
552
+ if ( ! empty( $metaData['priceRange'] ) ) {
553
+ $localBusiness["priceRange"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['priceRange'] );
554
+ }
555
+ if ( ! empty( $metaData['addressLocality'] ) || ! empty( $metaData['addressRegion'] )
556
+ || ! empty( $metaData['postalCode'] ) || ! empty( $metaData['streetAddress'] ) ) {
557
+ $localBusiness["address"] = array(
558
+ "@type" => "PostalAddress",
559
+ "addressLocality" => $KcSeoWPSchema->sanitizeOutPut( $metaData['addressLocality'] ),
560
+ "addressRegion" => $KcSeoWPSchema->sanitizeOutPut( $metaData['addressRegion'] ),
561
+ "postalCode" => $KcSeoWPSchema->sanitizeOutPut( $metaData['postalCode'] ),
562
+ "streetAddress" => $KcSeoWPSchema->sanitizeOutPut( $metaData['streetAddress'] )
563
+ );
564
+ }
565
+
566
+ if ( ! empty( $metaData['telephone'] ) ) {
567
+ $localBusiness["telephone"] = $KcSeoWPSchema->sanitizeOutPut( $metaData['telephone'] );
568
+ }
569
+ $html .= $this->get_jsonEncode( $localBusiness );
570
+ break;
571
+
572
+ default:
573
+ break;
574
+ }
575
+
576
+ }
577
+
578
+ return $html;
579
+ }
580
+
581
+ function get_field( $data ) {
582
+ $html = null;
583
+ global $KcSeoWPSchema;
584
+ $id = $data['id'];
585
+ $name = $data['name'];
586
+ $value = $data['value'];
587
+ $attr = ! empty( $data['attr'] ) ? $data['attr'] : null;
588
+
589
+ $class = isset( $data['class'] ) ? ( $data['class'] ? $data['class'] : null ) : null;
590
+ $require = ( isset( $data['required'] ) ? ( $data['required'] ? sprintf( '<span data-kcseo-tooltip="%s" class="required">*</span>', __( "Required", "wp-seo-structured-data-schema-pro" ) ) : null ) : null );
591
+ $recommended = ( isset( $data['recommended'] ) ? ( $data['recommended'] ? sprintf( '<span data-kcseo-tooltip="%s" class="recommended">*</span>', __( "Recommended", "wp-seo-structured-data-schema-pro" ) ) : null ) : null );
592
+ $title = ( isset( $data['title'] ) ? ( $data['title'] ? $data['title'] : null ) : null );
593
+ $desc = ( isset( $data['desc'] ) ? ( $data['desc'] ? $data['desc'] : null ) : null );
594
+ $holderClass = ( ! empty( $data['holderClass'] ) ? $data['holderClass'] : null );
595
+ $html .= "<div class='field-container {$holderClass}' id='" . $id . '-container' . "'>";
596
+ $html .= "<label class='field-label' for='{$id}'>{$title}{$require}{$recommended}</label>";
597
+ $html .= "<div class='field-content' id='" . $id . '-content' . "'>";
598
+ switch ( $data['type'] ) {
599
+ case 'checkbox':
600
+ $checked = ( $value ? "checked" : null );
601
+ $html .= "<div class='kSeo-checkbox-wrapper'>";
602
+ $html .= "<label for='{$id}'><input type='checkbox' id='{$id}' class='{$class}' name='{$name}' {$checked} value='1' /> Enable</label>";
603
+ $html .= "</div>";
604
+ break;
605
+
606
+ case 'text':
607
+ $html .= "<input type='text' id='{$id}' class='{$class}' name='{$name}' value='" . esc_html( $value ) . "' />";
608
+ break;
609
+
610
+ case 'number':
611
+ $html .= "<input type='number' {$attr} id='{$id}' class='{$class}' name='{$name}' value='" . esc_attr( $value ) . "' />";
612
+ break;
613
+ case 'textarea':
614
+ $html .= "<textarea id='{$id}' class='{$class}' name='{$name}' >" . wp_kses( $value,
615
+ array() ) . "</textarea>";
616
+ break;
617
+
618
+ case 'image':
619
+ $html .= '<div class="kSeo-image">';
620
+ $ImageId = ! empty( $value ) ? absint( $value ) : 0;
621
+ $image = $ingInfo = null;
622
+ if ( $ImageId ) {
623
+ $image = wp_get_attachment_image( $ImageId, "thumbnail" );
624
+ $imgData = $KcSeoWPSchema->imageInfo( $ImageId );
625
+ $ingInfo .= "<span><strong>URL: </strong>{$imgData['url']}</span>";
626
+ $ingInfo .= "<span><strong>Width: </strong>{$imgData['width']}px</span>";
627
+ $ingInfo .= "<span><strong>Height: </strong>{$imgData['height']}px</span>";
628
+ }
629
+ $html .= "<div class='kSeo-image-wrapper'>";
630
+ $html .= '<span class="kSeoImgAdd"><span class="dashicons dashicons-plus-alt"></span></span>';
631
+ $html .= '<span class="kSeoImgRemove ' . ( $image ? null : "kSeo-hidden" ) . '"><span class="dashicons dashicons-trash"></span></span>';
632
+ $html .= '<div class="kSeo-image-preview">' . $image . '</div>';
633
+ $html .= "<input type='hidden' name='{$name}' value='" . absint( $ImageId ) . "' />";
634
+ $html .= "</div>";
635
+ $html .= "<div class='image-info'>{$ingInfo}</div>";
636
+ $html .= '</div>';
637
+ break;
638
+ case 'select':
639
+ $html .= "<select name='{$name}' class='select2 {$class}' id='{$id}'>";
640
+ if ( ! empty( $data['empty'] ) ) {
641
+ $html .= "<option value=''>{$data['empty']}</option>";
642
+ }
643
+ if ( ! empty( $data['options'] ) && is_array( $data['options'] ) ) {
644
+ if ( $this->isAssoc( $data['options'] ) ) {
645
+ foreach ( $data['options'] as $optKey => $optValue ) {
646
+ $slt = ( $optKey == $value ? "selected" : null );
647
+ $html .= "<option value='" . esc_attr( $optKey ) . "' {$slt}>" . esc_html( $optValue ) . "</option>";
648
+ }
649
+ } else {
650
+ foreach ( $data['options'] as $optValue ) {
651
+ $slt = ( $optValue == $value ? "selected" : null );
652
+ $html .= "<option value='" . esc_attr( $optValue ) . "' {$slt}>" . esc_html( $optValue ) . "</option>";
653
+ }
654
+ }
655
+ }
656
+ $html .= "</select>";
657
+ break;
658
+ case 'schema_type':
659
+ $html .= "<select name='{$name}' class='select2 {$class}' id='{$id}'>";
660
+ if ( ! empty( $data['empty'] ) ) {
661
+ $html .= "<option value=''>{$data['empty']}</option>";
662
+ }
663
+
664
+ foreach ( $data['options'] as $key => $site ) {
665
+ if ( is_array( $site ) ) {
666
+ $slt = ( $key == $value ? "selected" : null );
667
+ $html .= "<option value='$key' $slt>&nbsp;&nbsp;&nbsp;$key</option>";
668
+ foreach ( $site as $inKey => $inSite ) {
669
+ if ( is_array( $inSite ) ) {
670
+ $slt = ( $inKey == $value ? "selected" : null );
671
+ $html .= "<option value='$inKey' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inKey</option>";
672
+ foreach ( $inSite as $inInKey => $inInSite ) {
673
+ if ( is_array( $inInSite ) ) {
674
+ $slt = ( $inInKey == $value ? "selected" : null );
675
+ $html .= "<option value='$inInKey' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inInKey</option>";
676
+ foreach ( $inInSite as $iSite ) {
677
+ $slt = ( $iSite == $value ? "selected" : null );
678
+ $html .= "<option value='$iSite' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$iSite</option>";
679
+ }
680
+ } else {
681
+ $slt = ( $inInSite == $value ? "selected" : null );
682
+ $html .= "<option value='$inInSite' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inInSite</option>";
683
+ }
684
+ }
685
+ } else {
686
+ $slt = ( $inSite == $value ? "selected" : null );
687
+ $html .= "<option value='$inSite' $slt>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;$inSite</option>";
688
+ }
689
+ }
690
+ } else {
691
+ $slt = ( $site == $value ? "selected" : null );
692
+ $html .= "<option value='$site' $slt>$site</option>";
693
+ }
694
+ }
695
+ $html .= "</select>";
696
+ break;
697
+ default:
698
+ $html .= "<input id='{$id}' type='{$data['type']}' value='" . esc_attr( $value ) . "' name='$name' />";
699
+ break;
700
+
701
+ }
702
+ $html .= "<p class='description'>{$desc}</p>";
703
+ $html .= "</div>";
704
+ $html .= "</div>";
705
+
706
+ return $html;
707
+ }
708
+
709
+ function get_jsonEncode( $data = array() ) {
710
+ $html = null;
711
+ /** @var TYPE_NAME $data */
712
+ if ( ! empty( $data ) && is_array( $data ) ) {
713
+ $html .= '<script type="application/ld+json">' . json_encode( $data,
714
+ JSON_PRETTY_PRINT | JSON_UNESCAPED_SLASHES ) . '</script>';
715
+ }
716
+
717
+ return $html;
718
+ }
719
+
720
+ function imgInfo( $url = null ) {
721
+ $img = array();
722
+ if ( $url ) {
723
+ $imgA = @getimagesize( $url );
724
+ if ( is_array( $imgA ) && ! empty( $imgA ) ) {
725
+ $img['width'] = $imgA[0];
726
+ $img['height'] = $imgA[1];
727
+ } else {
728
+ $img['width'] = 0;
729
+ $img['height'] = 0;
730
+ }
731
+ }
732
+
733
+ return $img;
734
+ }
735
+
736
+ function isAssoc( $array ) {
737
+ $keys = array_keys( $array );
738
+
739
+ return $keys !== array_keys( $keys );
740
+ }
741
+
742
+
743
+ }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
744
  endif;
lib/views/schema-options.php CHANGED
@@ -39,7 +39,7 @@ $schemaModel = new KcSeoSchemaModel;
39
  <?php
40
  $siteType = !empty($settings['site_type']) ? $settings['site_type'] : null;
41
 
42
- foreach ($schemaModel->site_type() as $key => $site) {
43
  if (is_array($site)) {
44
  $slt = ($key == $siteType ? "selected" : null);
45
  echo "<option value='$key' $slt>&nbsp;&nbsp;&nbsp;$key</option>";
@@ -276,7 +276,7 @@ $schemaModel = new KcSeoSchemaModel;
276
  <option value="">Select a country</option>
277
  <?php
278
  $aCountry = !empty($settings['address']['country']) ? $settings['address']['country'] : null;
279
- foreach ($schemaModel->countryList() as $country) {
280
  $slt = ($country == $aCountry ? "selected" : null);
281
  echo "<option value='$country' $slt>$country</option>";
282
  }
@@ -320,17 +320,17 @@ $schemaModel = new KcSeoSchemaModel;
320
  </div>
321
  <div id="tabs-kcseo-container" class="rt-tab-container">
322
  <ul class="rt-tab-nav">
323
- <li class="current"><a
324
  href="#tab-logo-url"><?php _e("Organization Logo", "wp-seo-structured-data-schema") ?></a>
325
  </li>
326
- <li>
327
  <a href="#tab-social-profile"><?php _e("Social Profile", "wp-seo-structured-data-schema") ?></a>
328
  </li>
329
- <li>
330
  <a href="#tab-corporate-contract"><?php _e("Corporate Contacts", "wp-seo-structured-data-schema") ?></a>
331
  </li>
332
  </ul>
333
- <div id="tab-logo-url" class="rt-tab-content">
334
  <table width="100%" cellpadding="10" class="form-table">
335
  <tr class="field_logo">
336
  <th><?php _e("Select Organization Logo", "wp-seo-structured-data-schema") ?></th>
@@ -398,7 +398,7 @@ $schemaModel = new KcSeoSchemaModel;
398
  foreach ($socialP as $socialD) {
399
  $html .= "<div class='sfield'>";
400
  $html .= "<select name='social[$i][id]'>";
401
- foreach ($schemaModel->socialList() as $sId => $social) {
402
  $slt = ($sId == $socialD['id'] ? "selected" : null);
403
  $html .= "<option value='$sId' $slt>$social</option>";
404
  }
@@ -429,7 +429,7 @@ $schemaModel = new KcSeoSchemaModel;
429
  <select name="contact[contactType]" class="select2" style="width: 200px">
430
  <?php
431
  $contactType = !empty($settings['contact']['contactType']) ? $settings['contact']['contactType'] : null;
432
- foreach ($schemaModel->contactType() as $cType) {
433
  $slt = ($cType == $contactType ? "selected" : null);
434
  echo "<option value='$cType' $slt>$cType</option>";
435
  }
@@ -487,7 +487,7 @@ $schemaModel = new KcSeoSchemaModel;
487
  style="width: 50%">
488
  <?php
489
  $areaServed = !empty($settings['area_served']) ? $settings['area_served'] : array();
490
- foreach ($schemaModel->countryList() as $country) {
491
  $slt = (in_array($country, $areaServed) ? "selected" : null);
492
  echo "<option value='$country' $slt>$country</option>";
493
  }
@@ -503,7 +503,7 @@ $schemaModel = new KcSeoSchemaModel;
503
  multiple="multiple">
504
  <?php
505
  $lanAvailable = !empty($settings['availableLanguage']) ? $settings['availableLanguage'] : array();
506
- foreach ($schemaModel->languageList() as $language) {
507
  $slt = (in_array($language, $lanAvailable) ? "selected" : null);
508
  echo "<option value='$language' $slt>$language</option>";
509
  }
39
  <?php
40
  $siteType = !empty($settings['site_type']) ? $settings['site_type'] : null;
41
 
42
+ foreach (KcSeoOptions::getSiteTypes() as $key => $site) {
43
  if (is_array($site)) {
44
  $slt = ($key == $siteType ? "selected" : null);
45
  echo "<option value='$key' $slt>&nbsp;&nbsp;&nbsp;$key</option>";
276
  <option value="">Select a country</option>
277
  <?php
278
  $aCountry = !empty($settings['address']['country']) ? $settings['address']['country'] : null;
279
+ foreach (KcSeoOptions::getCountryList() as $country) {
280
  $slt = ($country == $aCountry ? "selected" : null);
281
  echo "<option value='$country' $slt>$country</option>";
282
  }
320
  </div>
321
  <div id="tabs-kcseo-container" class="rt-tab-container">
322
  <ul class="rt-tab-nav">
323
+ <li class="active" data-id="tab-logo-url"><a
324
  href="#tab-logo-url"><?php _e("Organization Logo", "wp-seo-structured-data-schema") ?></a>
325
  </li>
326
+ <li data-id="tab-social-profile">
327
  <a href="#tab-social-profile"><?php _e("Social Profile", "wp-seo-structured-data-schema") ?></a>
328
  </li>
329
+ <li data-id="tab-corporate-contract">
330
  <a href="#tab-corporate-contract"><?php _e("Corporate Contacts", "wp-seo-structured-data-schema") ?></a>
331
  </li>
332
  </ul>
333
+ <div id="tab-logo-url" class="rt-tab-content active">
334
  <table width="100%" cellpadding="10" class="form-table">
335
  <tr class="field_logo">
336
  <th><?php _e("Select Organization Logo", "wp-seo-structured-data-schema") ?></th>
398
  foreach ($socialP as $socialD) {
399
  $html .= "<div class='sfield'>";
400
  $html .= "<select name='social[$i][id]'>";
401
+ foreach (KcSeoOptions::getSocialList() as $sId => $social) {
402
  $slt = ($sId == $socialD['id'] ? "selected" : null);
403
  $html .= "<option value='$sId' $slt>$social</option>";
404
  }
429
  <select name="contact[contactType]" class="select2" style="width: 200px">
430
  <?php
431
  $contactType = !empty($settings['contact']['contactType']) ? $settings['contact']['contactType'] : null;
432
+ foreach (KcSeoOptions::getContactTypes() as $cType) {
433
  $slt = ($cType == $contactType ? "selected" : null);
434
  echo "<option value='$cType' $slt>$cType</option>";
435
  }
487
  style="width: 50%">
488
  <?php
489
  $areaServed = !empty($settings['area_served']) ? $settings['area_served'] : array();
490
+ foreach (KcSeoOptions::getCountryList() as $country) {
491
  $slt = (in_array($country, $areaServed) ? "selected" : null);
492
  echo "<option value='$country' $slt>$country</option>";
493
  }
503
  multiple="multiple">
504
  <?php
505
  $lanAvailable = !empty($settings['availableLanguage']) ? $settings['availableLanguage'] : array();
506
+ foreach (KcSeoOptions::getLanguageList() as $language) {
507
  $slt = (in_array($language, $lanAvailable) ? "selected" : null);
508
  echo "<option value='$language' $slt>$language</option>";
509
  }
wp-seo-structured-data-schema.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: WP SEO Structured Data Schema
4
  * Plugin URI: https://wpsemplugins.com/
5
  * Description: Comprehensive JSON-LD based Structured Data solution for WordPress for adding schema for organizations, businesses, blog posts, ratings & more.
6
- * Version: 2.5.5
7
  * Author: WPSEMPlugins
8
  * Author URI: https://wpsemplugins.com/
9
  * Text Domain: wp-seo-structured-data-schema
@@ -38,8 +38,7 @@ function KCSEO_uninstall()
38
  global $KcSeoWPSchema;
39
  $settings = get_option($KcSeoWPSchema->options['main_settings']);
40
  if (!empty($settings['delete-data'])) {
41
- $schemas = new KcSeoSchemaModel;
42
- $schemaFields = $schemas->schemaTypes();
43
 
44
  $args = array(
45
  'post_type' => array('page', 'post'),
3
  * Plugin Name: WP SEO Structured Data Schema
4
  * Plugin URI: https://wpsemplugins.com/
5
  * Description: Comprehensive JSON-LD based Structured Data solution for WordPress for adding schema for organizations, businesses, blog posts, ratings & more.
6
+ * Version: 2.5.6
7
  * Author: WPSEMPlugins
8
  * Author URI: https://wpsemplugins.com/
9
  * Text Domain: wp-seo-structured-data-schema
38
  global $KcSeoWPSchema;
39
  $settings = get_option($KcSeoWPSchema->options['main_settings']);
40
  if (!empty($settings['delete-data'])) {
41
+ $schemaFields = KcSeoOptions::getSchemaTypes();
 
42
 
43
  $args = array(
44
  'post_type' => array('page', 'post'),