WP SEO Structured Data Schema - Version 2.6.13

Version Description

  • New schema ( COVID 19 )

=

Download this release

Release Info

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

Code changes from version 2.6.12 to 2.6.13

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.3
7
- Stable tag: 2.6.12
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
@@ -114,6 +114,9 @@ You'll find the [FAQ on WPSEMPlugins.com](https://wpsemplugins.com/wordpress-seo
114
 
115
  == Changelog ==
116
 
 
 
 
117
  == 2.6.12 =
118
  * Php bug fix
119
 
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.4
7
+ Stable tag: 2.6.13
8
  License: GPLv3
9
  License URI: http://www.gnu.org/licenses/gpl-3.0.html
10
 
114
 
115
  == Changelog ==
116
 
117
+ == 2.6.13 =
118
+ * New schema ( COVID 19 )
119
+
120
  == 2.6.12 =
121
  * Php bug fix
122
 
assets/css/admin.css CHANGED
@@ -336,6 +336,42 @@ p.description .required,
336
  }
337
 
338
  /* End heading container */
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
339
  .schema-holder .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
340
  padding: .5em 0.6em;
341
  font-size: 14px;
336
  }
337
 
338
  /* End heading container */
339
+ /* ============== 2nd Level START ============== */
340
+ .kcseo-group-item {
341
+ padding: 20px;
342
+ border: 1px dashed #777;
343
+ }
344
+
345
+ .kc-multiple-schema-tool {
346
+ padding: 5px;
347
+ text-align: right;
348
+ margin-bottom: 15px;
349
+ }
350
+
351
+ .kcseo-group-item .kc-top-toolbar {
352
+ text-align: right;
353
+ }
354
+
355
+ span.kc-remove-schema,
356
+ span.kcseo-remove-group {
357
+ cursor: pointer;
358
+ color: red;
359
+ font-weight: bold;
360
+ }
361
+
362
+ .kc-btn-danger {
363
+ background: red;
364
+ border-color: red;
365
+ color: #ffffff;
366
+ }
367
+
368
+ .multiple-schema-item {
369
+ border: 2px solid #9ce646;
370
+ padding: 10px 20px;
371
+ margin-bottom: 25px;
372
+ }
373
+
374
+ /* ============== 2nd END ================ */
375
  .schema-holder .ui-tabs .ui-tabs-nav .ui-tabs-anchor {
376
  padding: .5em 0.6em;
377
  font-size: 14px;
assets/js/admin.js CHANGED
@@ -1,6 +1,70 @@
1
  (function ($) {
2
  'use strict';
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  wpSeoShowHideType();
5
  $("#site_type, #_schema_aggregate_rating_schema_type").change(function () {
6
  wpSeoShowHideType();
1
  (function ($) {
2
  'use strict';
3
 
4
+ $(document).on('click', '.kcseo-group-duplicate', function () {
5
+ var self = $(this),
6
+ wrapper = self.parents('.kcseo-group-wrapper'),
7
+ target = self.parents(".kcseo-group-item"),
8
+ group_id = wrapper.attr('data-group-id'),
9
+ group_index = target.attr('data-index'),
10
+ count = wrapper.find(".kcseo-group-item").length,
11
+ post_fix = "_" + count,
12
+ html = $("<div class='kcseo-group-item' data-index='" + count + "' />");
13
+ html.append('<div class="kc-top-toolbar"><span class="kcseo-remove-group"><span class="dashicons dashicons-trash"></span>Remove</span></div>');
14
+ html.hide();
15
+ target.find("> .field-container ").each(function () {
16
+ var item = $(this).clone(),
17
+ field = item.find(".field-content").find("input, select, textarea") || '',
18
+ name = field.attr("name") || '',
19
+ field_container = item.find(".field-content"),
20
+ label = item.find("label.field-label"),
21
+ label_for = label.attr("for") + post_fix;
22
+ item.attr("id", item.attr("id") + post_fix);
23
+ label.attr("for", label_for);
24
+ field_container.attr("id", field_container.attr("id") + post_fix);
25
+ if (name) {
26
+ field.attr("id", label_for);
27
+ field.attr("name", name.replace(group_id + "[" + group_index + "]", group_id + "[" + count + "]"));
28
+ }
29
+ html.append(item);
30
+ });
31
+ if (wrapper.data('duplicate') === 1) {
32
+ html.append('<div class="kc-bottom-toolbar"><span class="button button-primary kcseo-group-duplicate">Duplicate Item</span></div>');
33
+ }
34
+ wrapper.append(html);
35
+ html.slideDown(500);
36
+ });
37
+
38
+ $(document).on('click', 'span.kcseo-remove-group', function () {
39
+ var self = $(this),
40
+ wrapper = self.parents('.kcseo-group-wrapper'),
41
+ target = self.parents(".kcseo-group-item"),
42
+ group_id = wrapper.attr('data-group-id');
43
+ target.slideUp(500, function () {
44
+ $(this).remove();
45
+ wrapper.find("> .kcseo-group-item ").each(function (count, v) {
46
+ var group_index = $(this).attr('data-index'),
47
+ post_fix = "_" + count;
48
+ $(this).attr('data-index', count);
49
+ $(this).find("> .field-container ").each(function () {
50
+ var item = $(this),
51
+ field = item.find(".field-content").find("input, select, textarea") || '',
52
+ name = field.attr("name") || '',
53
+ field_container = item.find(".field-content"),
54
+ label = item.find("label.field-label"),
55
+ label_for = label.attr("for") + post_fix;
56
+ item.attr("id", item.attr("id") + post_fix);
57
+ label.attr("for", label_for);
58
+ field_container.attr("id", field_container.attr("id") + post_fix);
59
+ if (name) {
60
+ field.attr("id", label_for);
61
+ field.attr("name", name.replace(group_id + "[" + group_index + "]", group_id + "[" + count + "]"));
62
+ }
63
+ });
64
+ });
65
+ });
66
+ });
67
+
68
  wpSeoShowHideType();
69
  $("#site_type, #_schema_aggregate_rating_schema_type").change(function () {
70
  wpSeoShowHideType();
languages/wp-seo-structured-data-schema.pot CHANGED
@@ -13,63 +13,63 @@ msgstr ""
13
  "X-Poedit-SourceCharset: UTF-8\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
 
16
- #: ../lib/classes/KcSeoHelper.php:207
17
  msgid "Pro Version Features"
18
  msgstr ""
19
 
20
- #: ../lib/classes/KcSeoHelper.php:209
21
  msgid "Includes Auto-fill function <---Popular"
22
  msgstr ""
23
 
24
- #: ../lib/classes/KcSeoHelper.php:210
25
  msgid "Supports Custom Post Types beyond default page and posts"
26
  msgstr ""
27
 
28
- #: ../lib/classes/KcSeoHelper.php:211
29
  msgid "Supports WordPress Multisite"
30
  msgstr ""
31
 
32
- #: ../lib/classes/KcSeoHelper.php:212
33
  msgid "Supports more schema types:"
34
  msgstr ""
35
 
36
- #: ../lib/classes/KcSeoHelper.php:214
37
  msgid "Books"
38
  msgstr ""
39
 
40
- #: ../lib/classes/KcSeoHelper.php:215
41
  msgid "Courses"
42
  msgstr ""
43
 
44
- #: ../lib/classes/KcSeoHelper.php:216
45
  msgid "Job Postings"
46
  msgstr ""
47
 
48
- #: ../lib/classes/KcSeoHelper.php:217
49
  msgid "Movies"
50
  msgstr ""
51
 
52
- #: ../lib/classes/KcSeoHelper.php:218, ../lib/functions/KcSeoOptions.php:995
53
  msgid "Music"
54
  msgstr ""
55
 
56
- #: ../lib/classes/KcSeoHelper.php:219, ../lib/functions/KcSeoOptions.php:999
57
  msgid "Recipe"
58
  msgstr ""
59
 
60
- #: ../lib/classes/KcSeoHelper.php:220
61
  msgid "TV Episode"
62
  msgstr ""
63
 
64
- #: ../lib/classes/KcSeoHelper.php:221, ../lib/functions/KcSeoOptions.php:1007
65
  msgid "QAPage"
66
  msgstr ""
67
 
68
- #: ../lib/classes/KcSeoHelper.php:222, ../lib/functions/KcSeoOptions.php:1011
69
  msgid "Item List"
70
  msgstr ""
71
 
72
- #: ../lib/classes/KcSeoHelper.php:228
73
  msgid "Get the Pro Version"
74
  msgstr ""
75
 
@@ -145,8 +145,8 @@ msgstr ""
145
  msgid "Published date"
146
  msgstr ""
147
 
148
- #: ../lib/functions/KcSeoOptions.php:44, ../lib/functions/KcSeoOptions.php:51, ../lib/functions/KcSeoOptions.php:117, ../lib/functions/KcSeoOptions.php:124, ../lib/functions/KcSeoOptions.php:186, ../lib/functions/KcSeoOptions.php:194, ../lib/functions/KcSeoOptions.php:344, ../lib/functions/KcSeoOptions.php:579, ../lib/functions/KcSeoOptions.php:701, ../lib/functions/KcSeoOptions.php:955
149
- msgid "Like this: 2015-12-25 4:00 PM"
150
  msgstr ""
151
 
152
  #: ../lib/functions/KcSeoOptions.php:47, ../lib/functions/KcSeoOptions.php:121, ../lib/functions/KcSeoOptions.php:190
@@ -169,7 +169,7 @@ msgstr ""
169
  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>"
170
  msgstr ""
171
 
172
- #: ../lib/functions/KcSeoOptions.php:66, ../lib/functions/KcSeoOptions.php:140, ../lib/functions/KcSeoOptions.php:209, ../lib/functions/KcSeoOptions.php:260, ../lib/functions/KcSeoOptions.php:385, ../lib/functions/KcSeoOptions.php:535, ../lib/functions/KcSeoOptions.php:775, ../lib/functions/KcSeoOptions.php:888, ../lib/views/schema-options.php:170, ../lib/views/schema-options.php:255
173
  msgid "Description"
174
  msgstr ""
175
 
@@ -217,11 +217,11 @@ msgstr ""
217
  msgid "News Article"
218
  msgstr ""
219
 
220
- #: ../lib/functions/KcSeoOptions.php:171, ../lib/functions/KcSeoOptions.php:323, ../lib/functions/KcSeoOptions.php:691, ../lib/functions/KcSeoOptions.php:934
221
  msgid "Author"
222
  msgstr ""
223
 
224
- #: ../lib/functions/KcSeoOptions.php:177, ../lib/functions/KcSeoOptions.php:380, ../lib/functions/KcSeoOptions.php:855, ../lib/views/schema-options.php:247
225
  msgid "Image"
226
  msgstr ""
227
 
@@ -233,7 +233,7 @@ msgstr ""
233
  msgid "Event"
234
  msgstr ""
235
 
236
- #: ../lib/functions/KcSeoOptions.php:228, ../lib/functions/KcSeoOptions.php:374, ../lib/functions/KcSeoOptions.php:529, ../lib/functions/KcSeoOptions.php:591, ../lib/functions/KcSeoOptions.php:883, ../lib/views/schema-options.php:224
237
  msgid "Name"
238
  msgstr ""
239
 
@@ -317,55 +317,55 @@ msgstr ""
317
  msgid "A link to the event's details page. <span class='required'>Not required but (Recommended)</span>"
318
  msgstr ""
319
 
320
- #: ../lib/functions/KcSeoOptions.php:315, ../lib/functions/KcSeoOptions.php:662, ../lib/functions/KcSeoOptions.php:926
321
  msgid "Review"
322
  msgstr ""
323
 
324
- #: ../lib/functions/KcSeoOptions.php:317, ../lib/functions/KcSeoOptions.php:928
325
  msgid "To add review schema for this type, complete fields below and enable, others live blank."
326
  msgstr ""
327
 
328
- #: ../lib/functions/KcSeoOptions.php:328, ../lib/functions/KcSeoOptions.php:939
329
  msgid "Author Same As profile link"
330
  msgstr ""
331
 
332
- #: ../lib/functions/KcSeoOptions.php:332, ../lib/functions/KcSeoOptions.php:943
333
  msgid "A reference page that unambiguously indicates the item's identity; for example, the URL of the item's Wikipedia page, Freebase page, or official website.<br> Enter new line for every entry"
334
  msgstr ""
335
 
336
- #: ../lib/functions/KcSeoOptions.php:335, ../lib/functions/KcSeoOptions.php:679, ../lib/functions/KcSeoOptions.php:946
337
  msgid "Review body"
338
  msgstr ""
339
 
340
- #: ../lib/functions/KcSeoOptions.php:338, ../lib/functions/KcSeoOptions.php:682, ../lib/functions/KcSeoOptions.php:949
341
  msgid "The actual body of the review."
342
  msgstr ""
343
 
344
- #: ../lib/functions/KcSeoOptions.php:341, ../lib/functions/KcSeoOptions.php:698, ../lib/functions/KcSeoOptions.php:952
345
  msgid "Date of Published"
346
  msgstr ""
347
 
348
- #: ../lib/functions/KcSeoOptions.php:347, ../lib/functions/KcSeoOptions.php:453, ../lib/functions/KcSeoOptions.php:704, ../lib/functions/KcSeoOptions.php:958
349
  msgid "Rating value"
350
  msgstr ""
351
 
352
- #: ../lib/functions/KcSeoOptions.php:350, ../lib/functions/KcSeoOptions.php:707, ../lib/functions/KcSeoOptions.php:798, ../lib/functions/KcSeoOptions.php:805, ../lib/functions/KcSeoOptions.php:961
353
  msgid "A numerical quality rating for the item."
354
  msgstr ""
355
 
356
- #: ../lib/functions/KcSeoOptions.php:353, ../lib/functions/KcSeoOptions.php:710, ../lib/functions/KcSeoOptions.php:964
357
  msgid "Best rating"
358
  msgstr ""
359
 
360
- #: ../lib/functions/KcSeoOptions.php:356, ../lib/functions/KcSeoOptions.php:713, ../lib/functions/KcSeoOptions.php:967
361
  msgid "The highest value allowed in this rating system."
362
  msgstr ""
363
 
364
- #: ../lib/functions/KcSeoOptions.php:359, ../lib/functions/KcSeoOptions.php:716, ../lib/functions/KcSeoOptions.php:970
365
  msgid "Worst rating"
366
  msgstr ""
367
 
368
- #: ../lib/functions/KcSeoOptions.php:362, ../lib/functions/KcSeoOptions.php:719, ../lib/functions/KcSeoOptions.php:973
369
  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."
370
  msgstr ""
371
 
@@ -660,7 +660,7 @@ msgstr ""
660
  msgid "The item that is being rated."
661
  msgstr ""
662
 
663
- #: ../lib/functions/KcSeoOptions.php:760, ../lib/functions/KcSeoOptions.php:900, ../lib/views/schema-options.php:118
664
  msgid "The price range of the business, for example $$$."
665
  msgstr ""
666
 
@@ -684,131 +684,131 @@ msgstr ""
684
  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."
685
  msgstr ""
686
 
687
- #: ../lib/functions/KcSeoOptions.php:794, ../lib/functions/KcSeoOptions.php:801
688
  msgid "Rating Value"
689
  msgstr ""
690
 
691
- #: ../lib/functions/KcSeoOptions.php:808
692
  msgid "Best Rating"
693
  msgstr ""
694
 
695
- #: ../lib/functions/KcSeoOptions.php:812
696
  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."
697
  msgstr ""
698
 
699
- #: ../lib/functions/KcSeoOptions.php:815
700
  msgid "Worst Rating"
701
  msgstr ""
702
 
703
- #: ../lib/functions/KcSeoOptions.php:819
704
  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."
705
  msgstr ""
706
 
707
- #: ../lib/functions/KcSeoOptions.php:825
708
  msgid "Restaurant"
709
  msgstr ""
710
 
711
- #: ../lib/functions/KcSeoOptions.php:831
712
  msgid "Name of the Restaurant"
713
  msgstr ""
714
 
715
- #: ../lib/functions/KcSeoOptions.php:836
716
  msgid "Description of the Restaurant"
717
  msgstr ""
718
 
719
- #: ../lib/functions/KcSeoOptions.php:840
720
  msgid "Opening Hours"
721
  msgstr ""
722
 
723
- #: ../lib/functions/KcSeoOptions.php:842
724
  msgid "Mo,Tu,We,Th,Fr,Sa,Su 11:30-23:00"
725
  msgstr ""
726
 
727
- #: ../lib/functions/KcSeoOptions.php:845, ../lib/functions/KcSeoOptions.php:921
728
  msgid "Telephone"
729
  msgstr ""
730
 
731
- #: ../lib/functions/KcSeoOptions.php:847
732
  msgid "+155501003333"
733
  msgstr ""
734
 
735
- #: ../lib/functions/KcSeoOptions.php:850
736
  msgid "Menu"
737
  msgstr ""
738
 
739
- #: ../lib/functions/KcSeoOptions.php:852
740
  msgid "http://example.com/menu"
741
  msgstr ""
742
 
743
- #: ../lib/functions/KcSeoOptions.php:860, ../lib/views/schema-options.php:270
744
  msgid "Address"
745
  msgstr ""
746
 
747
- #: ../lib/functions/KcSeoOptions.php:864, ../lib/functions/KcSeoOptions.php:897, ../lib/views/schema-options.php:113
748
  msgid "Price Range"
749
  msgstr ""
750
 
751
- #: ../lib/functions/KcSeoOptions.php:866
752
  msgid "The price range of the business, for example $$$"
753
  msgstr ""
754
 
755
- #: ../lib/functions/KcSeoOptions.php:869
756
  msgid "Serves Cuisine"
757
  msgstr ""
758
 
759
- #: ../lib/functions/KcSeoOptions.php:871, ../lib/views/schema-options.php:159
760
  msgid "The cuisine of the restaurant."
761
  msgstr ""
762
 
763
- #: ../lib/functions/KcSeoOptions.php:877
764
  msgid "Local Business"
765
  msgstr ""
766
 
767
- #: ../lib/functions/KcSeoOptions.php:892
768
  msgid "Business Logo"
769
  msgstr ""
770
 
771
- #: ../lib/functions/KcSeoOptions.php:903
772
  msgid "Address locality"
773
  msgstr ""
774
 
775
- #: ../lib/functions/KcSeoOptions.php:905
776
  msgid "City (i.e Kansas city)"
777
  msgstr ""
778
 
779
- #: ../lib/functions/KcSeoOptions.php:908
780
  msgid "Address region"
781
  msgstr ""
782
 
783
- #: ../lib/functions/KcSeoOptions.php:910
784
  msgid "State (i.e. MO)"
785
  msgstr ""
786
 
787
- #: ../lib/functions/KcSeoOptions.php:913
788
  msgid "Postal code"
789
  msgstr ""
790
 
791
- #: ../lib/functions/KcSeoOptions.php:917
792
  msgid "Street address"
793
  msgstr ""
794
 
795
- #: ../lib/functions/KcSeoOptions.php:979
796
  msgid "Book"
797
  msgstr ""
798
 
799
- #: ../lib/functions/KcSeoOptions.php:983
800
  msgid "Course"
801
  msgstr ""
802
 
803
- #: ../lib/functions/KcSeoOptions.php:987
804
  msgid "Job Posting"
805
  msgstr ""
806
 
807
- #: ../lib/functions/KcSeoOptions.php:991
808
  msgid "Movie"
809
  msgstr ""
810
 
811
- #: ../lib/functions/KcSeoOptions.php:1003
812
  msgid "TVEpisode"
813
  msgstr ""
814
 
13
  "X-Poedit-SourceCharset: UTF-8\n"
14
  "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
 
16
+ #: ../lib/classes/KcSeoHelper.php:220
17
  msgid "Pro Version Features"
18
  msgstr ""
19
 
20
+ #: ../lib/classes/KcSeoHelper.php:222
21
  msgid "Includes Auto-fill function <---Popular"
22
  msgstr ""
23
 
24
+ #: ../lib/classes/KcSeoHelper.php:223
25
  msgid "Supports Custom Post Types beyond default page and posts"
26
  msgstr ""
27
 
28
+ #: ../lib/classes/KcSeoHelper.php:224
29
  msgid "Supports WordPress Multisite"
30
  msgstr ""
31
 
32
+ #: ../lib/classes/KcSeoHelper.php:225
33
  msgid "Supports more schema types:"
34
  msgstr ""
35
 
36
+ #: ../lib/classes/KcSeoHelper.php:227
37
  msgid "Books"
38
  msgstr ""
39
 
40
+ #: ../lib/classes/KcSeoHelper.php:228
41
  msgid "Courses"
42
  msgstr ""
43
 
44
+ #: ../lib/classes/KcSeoHelper.php:229
45
  msgid "Job Postings"
46
  msgstr ""
47
 
48
+ #: ../lib/classes/KcSeoHelper.php:230
49
  msgid "Movies"
50
  msgstr ""
51
 
52
+ #: ../lib/classes/KcSeoHelper.php:231, ../lib/functions/KcSeoOptions.php:988
53
  msgid "Music"
54
  msgstr ""
55
 
56
+ #: ../lib/classes/KcSeoHelper.php:232, ../lib/functions/KcSeoOptions.php:992
57
  msgid "Recipe"
58
  msgstr ""
59
 
60
+ #: ../lib/classes/KcSeoHelper.php:233
61
  msgid "TV Episode"
62
  msgstr ""
63
 
64
+ #: ../lib/classes/KcSeoHelper.php:234, ../lib/functions/KcSeoOptions.php:1000
65
  msgid "QAPage"
66
  msgstr ""
67
 
68
+ #: ../lib/classes/KcSeoHelper.php:235, ../lib/functions/KcSeoOptions.php:1004
69
  msgid "Item List"
70
  msgstr ""
71
 
72
+ #: ../lib/classes/KcSeoHelper.php:241
73
  msgid "Get the Pro Version"
74
  msgstr ""
75
 
145
  msgid "Published date"
146
  msgstr ""
147
 
148
+ #: ../lib/functions/KcSeoOptions.php:44, ../lib/functions/KcSeoOptions.php:51, ../lib/functions/KcSeoOptions.php:117, ../lib/functions/KcSeoOptions.php:124, ../lib/functions/KcSeoOptions.php:186, ../lib/functions/KcSeoOptions.php:194, ../lib/functions/KcSeoOptions.php:344, ../lib/functions/KcSeoOptions.php:579, ../lib/functions/KcSeoOptions.php:701, ../lib/functions/KcSeoOptions.php:948
149
+ msgid "Like this: 2015-12-25 14:20:00"
150
  msgstr ""
151
 
152
  #: ../lib/functions/KcSeoOptions.php:47, ../lib/functions/KcSeoOptions.php:121, ../lib/functions/KcSeoOptions.php:190
169
  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>"
170
  msgstr ""
171
 
172
+ #: ../lib/functions/KcSeoOptions.php:66, ../lib/functions/KcSeoOptions.php:140, ../lib/functions/KcSeoOptions.php:209, ../lib/functions/KcSeoOptions.php:260, ../lib/functions/KcSeoOptions.php:385, ../lib/functions/KcSeoOptions.php:535, ../lib/functions/KcSeoOptions.php:775, ../lib/functions/KcSeoOptions.php:881, ../lib/views/schema-options.php:170, ../lib/views/schema-options.php:255
173
  msgid "Description"
174
  msgstr ""
175
 
217
  msgid "News Article"
218
  msgstr ""
219
 
220
+ #: ../lib/functions/KcSeoOptions.php:171, ../lib/functions/KcSeoOptions.php:323, ../lib/functions/KcSeoOptions.php:691, ../lib/functions/KcSeoOptions.php:927
221
  msgid "Author"
222
  msgstr ""
223
 
224
+ #: ../lib/functions/KcSeoOptions.php:177, ../lib/functions/KcSeoOptions.php:380, ../lib/functions/KcSeoOptions.php:848, ../lib/views/schema-options.php:247
225
  msgid "Image"
226
  msgstr ""
227
 
233
  msgid "Event"
234
  msgstr ""
235
 
236
+ #: ../lib/functions/KcSeoOptions.php:228, ../lib/functions/KcSeoOptions.php:374, ../lib/functions/KcSeoOptions.php:529, ../lib/functions/KcSeoOptions.php:591, ../lib/functions/KcSeoOptions.php:876, ../lib/views/schema-options.php:224
237
  msgid "Name"
238
  msgstr ""
239
 
317
  msgid "A link to the event's details page. <span class='required'>Not required but (Recommended)</span>"
318
  msgstr ""
319
 
320
+ #: ../lib/functions/KcSeoOptions.php:315, ../lib/functions/KcSeoOptions.php:662, ../lib/functions/KcSeoOptions.php:919
321
  msgid "Review"
322
  msgstr ""
323
 
324
+ #: ../lib/functions/KcSeoOptions.php:317, ../lib/functions/KcSeoOptions.php:921
325
  msgid "To add review schema for this type, complete fields below and enable, others live blank."
326
  msgstr ""
327
 
328
+ #: ../lib/functions/KcSeoOptions.php:328, ../lib/functions/KcSeoOptions.php:932
329
  msgid "Author Same As profile link"
330
  msgstr ""
331
 
332
+ #: ../lib/functions/KcSeoOptions.php:332, ../lib/functions/KcSeoOptions.php:936
333
  msgid "A reference page that unambiguously indicates the item's identity; for example, the URL of the item's Wikipedia page, Freebase page, or official website.<br> Enter new line for every entry"
334
  msgstr ""
335
 
336
+ #: ../lib/functions/KcSeoOptions.php:335, ../lib/functions/KcSeoOptions.php:679, ../lib/functions/KcSeoOptions.php:939
337
  msgid "Review body"
338
  msgstr ""
339
 
340
+ #: ../lib/functions/KcSeoOptions.php:338, ../lib/functions/KcSeoOptions.php:682, ../lib/functions/KcSeoOptions.php:942
341
  msgid "The actual body of the review."
342
  msgstr ""
343
 
344
+ #: ../lib/functions/KcSeoOptions.php:341, ../lib/functions/KcSeoOptions.php:698, ../lib/functions/KcSeoOptions.php:945
345
  msgid "Date of Published"
346
  msgstr ""
347
 
348
+ #: ../lib/functions/KcSeoOptions.php:347, ../lib/functions/KcSeoOptions.php:453, ../lib/functions/KcSeoOptions.php:704, ../lib/functions/KcSeoOptions.php:951
349
  msgid "Rating value"
350
  msgstr ""
351
 
352
+ #: ../lib/functions/KcSeoOptions.php:350, ../lib/functions/KcSeoOptions.php:707, ../lib/functions/KcSeoOptions.php:798, ../lib/functions/KcSeoOptions.php:954
353
  msgid "A numerical quality rating for the item."
354
  msgstr ""
355
 
356
+ #: ../lib/functions/KcSeoOptions.php:353, ../lib/functions/KcSeoOptions.php:710, ../lib/functions/KcSeoOptions.php:957
357
  msgid "Best rating"
358
  msgstr ""
359
 
360
+ #: ../lib/functions/KcSeoOptions.php:356, ../lib/functions/KcSeoOptions.php:713, ../lib/functions/KcSeoOptions.php:960
361
  msgid "The highest value allowed in this rating system."
362
  msgstr ""
363
 
364
+ #: ../lib/functions/KcSeoOptions.php:359, ../lib/functions/KcSeoOptions.php:716, ../lib/functions/KcSeoOptions.php:963
365
  msgid "Worst rating"
366
  msgstr ""
367
 
368
+ #: ../lib/functions/KcSeoOptions.php:362, ../lib/functions/KcSeoOptions.php:719, ../lib/functions/KcSeoOptions.php:966
369
  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."
370
  msgstr ""
371
 
660
  msgid "The item that is being rated."
661
  msgstr ""
662
 
663
+ #: ../lib/functions/KcSeoOptions.php:760, ../lib/functions/KcSeoOptions.php:893, ../lib/views/schema-options.php:118
664
  msgid "The price range of the business, for example $$$."
665
  msgstr ""
666
 
684
  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."
685
  msgstr ""
686
 
687
+ #: ../lib/functions/KcSeoOptions.php:794
688
  msgid "Rating Value"
689
  msgstr ""
690
 
691
+ #: ../lib/functions/KcSeoOptions.php:801
692
  msgid "Best Rating"
693
  msgstr ""
694
 
695
+ #: ../lib/functions/KcSeoOptions.php:805
696
  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."
697
  msgstr ""
698
 
699
+ #: ../lib/functions/KcSeoOptions.php:808
700
  msgid "Worst Rating"
701
  msgstr ""
702
 
703
+ #: ../lib/functions/KcSeoOptions.php:812
704
  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."
705
  msgstr ""
706
 
707
+ #: ../lib/functions/KcSeoOptions.php:818
708
  msgid "Restaurant"
709
  msgstr ""
710
 
711
+ #: ../lib/functions/KcSeoOptions.php:824
712
  msgid "Name of the Restaurant"
713
  msgstr ""
714
 
715
+ #: ../lib/functions/KcSeoOptions.php:829
716
  msgid "Description of the Restaurant"
717
  msgstr ""
718
 
719
+ #: ../lib/functions/KcSeoOptions.php:833
720
  msgid "Opening Hours"
721
  msgstr ""
722
 
723
+ #: ../lib/functions/KcSeoOptions.php:835
724
  msgid "Mo,Tu,We,Th,Fr,Sa,Su 11:30-23:00"
725
  msgstr ""
726
 
727
+ #: ../lib/functions/KcSeoOptions.php:838, ../lib/functions/KcSeoOptions.php:914
728
  msgid "Telephone"
729
  msgstr ""
730
 
731
+ #: ../lib/functions/KcSeoOptions.php:840
732
  msgid "+155501003333"
733
  msgstr ""
734
 
735
+ #: ../lib/functions/KcSeoOptions.php:843
736
  msgid "Menu"
737
  msgstr ""
738
 
739
+ #: ../lib/functions/KcSeoOptions.php:845
740
  msgid "http://example.com/menu"
741
  msgstr ""
742
 
743
+ #: ../lib/functions/KcSeoOptions.php:853, ../lib/views/schema-options.php:270
744
  msgid "Address"
745
  msgstr ""
746
 
747
+ #: ../lib/functions/KcSeoOptions.php:857, ../lib/functions/KcSeoOptions.php:890, ../lib/views/schema-options.php:113
748
  msgid "Price Range"
749
  msgstr ""
750
 
751
+ #: ../lib/functions/KcSeoOptions.php:859
752
  msgid "The price range of the business, for example $$$"
753
  msgstr ""
754
 
755
+ #: ../lib/functions/KcSeoOptions.php:862
756
  msgid "Serves Cuisine"
757
  msgstr ""
758
 
759
+ #: ../lib/functions/KcSeoOptions.php:864, ../lib/views/schema-options.php:159
760
  msgid "The cuisine of the restaurant."
761
  msgstr ""
762
 
763
+ #: ../lib/functions/KcSeoOptions.php:870
764
  msgid "Local Business"
765
  msgstr ""
766
 
767
+ #: ../lib/functions/KcSeoOptions.php:885
768
  msgid "Business Logo"
769
  msgstr ""
770
 
771
+ #: ../lib/functions/KcSeoOptions.php:896
772
  msgid "Address locality"
773
  msgstr ""
774
 
775
+ #: ../lib/functions/KcSeoOptions.php:898
776
  msgid "City (i.e Kansas city)"
777
  msgstr ""
778
 
779
+ #: ../lib/functions/KcSeoOptions.php:901
780
  msgid "Address region"
781
  msgstr ""
782
 
783
+ #: ../lib/functions/KcSeoOptions.php:903
784
  msgid "State (i.e. MO)"
785
  msgstr ""
786
 
787
+ #: ../lib/functions/KcSeoOptions.php:906
788
  msgid "Postal code"
789
  msgstr ""
790
 
791
+ #: ../lib/functions/KcSeoOptions.php:910
792
  msgid "Street address"
793
  msgstr ""
794
 
795
+ #: ../lib/functions/KcSeoOptions.php:972
796
  msgid "Book"
797
  msgstr ""
798
 
799
+ #: ../lib/functions/KcSeoOptions.php:976
800
  msgid "Course"
801
  msgstr ""
802
 
803
+ #: ../lib/functions/KcSeoOptions.php:980
804
  msgid "Job Posting"
805
  msgstr ""
806
 
807
+ #: ../lib/functions/KcSeoOptions.php:984
808
  msgid "Movie"
809
  msgstr ""
810
 
811
+ #: ../lib/functions/KcSeoOptions.php:996
812
  msgid "TVEpisode"
813
  msgstr ""
814
 
lib/classes/KcSeoHelper.php CHANGED
@@ -85,6 +85,19 @@ if (!class_exists('KcSeoSettings')):
85
  $newValue = esc_url($value);
86
  } else if ($type == 'textarea') {
87
  $newValue = wp_kses($value, array());
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  } else {
89
  $newValue = sanitize_text_field($value);
90
  }
85
  $newValue = esc_url($value);
86
  } else if ($type == 'textarea') {
87
  $newValue = wp_kses($value, array());
88
+ } else if ($field['type'] == 'group' && !empty($field['fields'])) {
89
+ $newGValue = array();
90
+ $groupValue = !empty($value) && is_array($value) ? $value : array();
91
+ foreach ($groupValue as $gId => $gValue) {
92
+ $newVItem = array();
93
+ foreach ($field['fields'] as $gFid => $fieldItem) {
94
+ if (isset($gValue[$gFid])) {
95
+ $newVItem[$gFid] = $this->sanitize($fieldItem, $gValue[$gFid]);
96
+ }
97
+ }
98
+ array_push($newGValue, $newVItem);
99
+ }
100
+ $newValue = $newGValue;
101
  } else {
102
  $newValue = sanitize_text_field($value);
103
  }
lib/classes/KcSeoMetaData.php CHANGED
@@ -84,7 +84,37 @@ if ( ! class_exists( 'KcSeoMetaData' ) ):
84
  $data['id'] = $tabId . "_" . $fieldId;
85
  $data['name'] = $tabId . "[{$fieldId}]";
86
  $data['value'] = ( ! empty( $metaData[ $fieldId ] ) ? $metaData[ $fieldId ] : null );
87
- $htmlCont .= $schemas->get_field( $data );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
88
  }
89
  }
90
  if ( ! empty( $schema['pro'] ) && $schema['pro'] ) {
84
  $data['id'] = $tabId . "_" . $fieldId;
85
  $data['name'] = $tabId . "[{$fieldId}]";
86
  $data['value'] = ( ! empty( $metaData[ $fieldId ] ) ? $metaData[ $fieldId ] : null );
87
+ if ($data['type'] === 'group' && !empty($data['fields'])) {
88
+ $groupMetaData = isset($metaData[$fieldId]) && !empty($metaData[$fieldId]) ? $metaData[$fieldId] : array(array());
89
+ $html_g = null;
90
+ $i = 0;
91
+ foreach ($groupMetaData as $imDataId => $mData) {
92
+ $html_gItem = null;
93
+ foreach ($data['fields'] as $gFid => $field) {
94
+ $field['fieldId'] = $fieldId . '-' . $gFid;
95
+ $field['id'] = $tabId . "_" . $fieldId . '_' . $gFid;
96
+ $field['name'] = $tabId . "[$fieldId]" . "[$imDataId][$gFid]";
97
+ $field['value'] = (!empty($mData[$gFid]) ? $mData[$gFid] : null);
98
+ $html_gItem .= $schemas->get_field($field);
99
+ }
100
+ $html_g .= sprintf('<div class="kcseo-group-item" data-index="%d" id="%s">%s%s%s</div>',
101
+ $imDataId,
102
+ $tabId . "_" . $fieldId . "_group_item_" . $imDataId,
103
+ isset($data['duplicate']) && $imDataId > 0 ? '<div class="kc-top-toolbar"><span class="kcseo-remove-group"><span class="dashicons dashicons-trash"></span>Remove</span></div>' : null,
104
+ $html_gItem,
105
+ isset($data['duplicate']) ? '<div class="kc-bottom-toolbar"><span class="button button-primary kcseo-group-duplicate">Duplicate item</span></div>' : null
106
+ );
107
+ }
108
+ $htmlCont .= sprintf('<div class="field-container kcseo-group-wrapper" data-duplicate="%d" data-group-id="%s" id="%s">%s</div>',
109
+ isset($data['duplicate']) ? true : false,
110
+ $tabId . "[$fieldId]",
111
+ $tabId . "_" . $fieldId . "_group_wrapper",
112
+ $html_g
113
+ );
114
+
115
+ }else {
116
+ $htmlCont .= $schemas->get_field($data);
117
+ }
118
  }
119
  }
120
  if ( ! empty( $schema['pro'] ) && $schema['pro'] ) {
lib/functions/KcSeoOptions.php CHANGED
@@ -5,7 +5,7 @@ class KcSeoOptions
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(
@@ -41,14 +41,14 @@ class KcSeoOptions
41
  'type' => 'text',
42
  'class' => 'kcseo-date',
43
  'required' => true,
44
- 'desc' => __('Like this: 2015-12-25 4:00 PM', "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 4:00 PM', "wp-seo-structured-data-schema")
52
  ),
53
  'publisher' => array(
54
  'title' => __('Publisher', "wp-seo-structured-data-schema"),
@@ -79,7 +79,7 @@ class KcSeoOptions
79
  ),
80
  )
81
  ),
82
- 'blog_posting' => array(
83
  'pro' => false,
84
  'title' => __('Blog Posting', "wp-seo-structured-data-schema"),
85
  'fields' => array(
@@ -114,14 +114,14 @@ class KcSeoOptions
114
  'title' => __('Published date', "wp-seo-structured-data-schema"),
115
  'type' => 'text',
116
  'class' => 'kcseo-date',
117
- 'desc' => __('Like this: 2015-12-25 4:00 PM', "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 4:00 PM', "wp-seo-structured-data-schema"),
125
  'required' => true
126
  ),
127
  'publisher' => array(
@@ -148,7 +148,7 @@ class KcSeoOptions
148
  )
149
  )
150
  ),
151
- 'news_article' => array(
152
  'pro' => false,
153
  'title' => __('News Article', "wp-seo-structured-data-schema"),
154
  'fields' => array(
@@ -183,7 +183,7 @@ class KcSeoOptions
183
  'title' => __('Published date', "wp-seo-structured-data-schema"),
184
  'type' => 'text',
185
  'class' => 'kcseo-date',
186
- 'desc' => __('Like this: 2015-12-25 4:00 PM', "wp-seo-structured-data-schema"),
187
  'required' => true
188
  ),
189
  'dateModified' => array(
@@ -191,7 +191,7 @@ class KcSeoOptions
191
  'type' => 'text',
192
  'class' => 'kcseo-date',
193
  'required' => true,
194
- 'desc' => __('Like this: 2015-12-25 4:00 PM', "wp-seo-structured-data-schema")
195
  ),
196
  'publisher' => array(
197
  'title' => __('Publisher', "wp-seo-structured-data-schema"),
@@ -217,7 +217,7 @@ class KcSeoOptions
217
  )
218
  )
219
  ),
220
- 'event' => array(
221
  'pro' => false,
222
  'title' => __('Event', "wp-seo-structured-data-schema"),
223
  'fields' => array(
@@ -341,7 +341,7 @@ class KcSeoOptions
341
  'title' => __('Date of Published', "wp-seo-structured-data-schema"),
342
  'type' => 'text',
343
  'class' => 'kcseo-date',
344
- 'desc' => __("Like this: 2015-12-25 4:00 PM", "wp-seo-structured-data-schema")
345
  ),
346
  'review_ratingValue' => array(
347
  'title' => __('Rating value', "wp-seo-structured-data-schema"),
@@ -363,7 +363,7 @@ class KcSeoOptions
363
  )
364
  )
365
  ),
366
- 'product' => array(
367
  'pro' => false,
368
  'title' => __('Product', "wp-seo-structured-data-schema"),
369
  'fields' => array(
@@ -518,7 +518,7 @@ class KcSeoOptions
518
  ),
519
  )
520
  ),
521
- 'video' => array(
522
  'pro' => false,
523
  'title' => __('Video', "wp-seo-structured-data-schema"),
524
  'fields' => array(
@@ -576,11 +576,11 @@ class KcSeoOptions
576
  'title' => __('Expires', "wp-seo-structured-data-schema"),
577
  'type' => 'text',
578
  'class' => 'kcseo-date',
579
- 'desc' => __("Like this: 2015-12-25 4:00 PM", "wp-seo-structured-data-schema")
580
  ),
581
  )
582
  ),
583
- 'service' => array(
584
  'pro' => false,
585
  'title' => __('Service', "wp-seo-structured-data-schema"),
586
  'fields' => array(
@@ -657,7 +657,7 @@ class KcSeoOptions
657
  ),
658
  )
659
  ),
660
- 'review' => array(
661
  'pro' => false,
662
  'title' => __('Review', "wp-seo-structured-data-schema"),
663
  'fields' => array(
@@ -698,7 +698,7 @@ class KcSeoOptions
698
  'title' => __('Date of Published', "wp-seo-structured-data-schema"),
699
  'type' => 'text',
700
  'class' => 'kcseo-date',
701
- 'desc' => __("Like this: 2015-12-25 4:00 PM", "wp-seo-structured-data-schema")
702
  ),
703
  'ratingValue' => array(
704
  'title' => __('Rating value', "wp-seo-structured-data-schema"),
@@ -725,7 +725,7 @@ class KcSeoOptions
725
  )
726
  )
727
  ),
728
- 'aggregate_rating' => array(
729
  'pro' => false,
730
  'title' => __('Aggregate Ratings', "wp-seo-structured-data-schema"),
731
  'fields' => array(
@@ -790,13 +790,6 @@ class KcSeoOptions
790
  'required' => true,
791
  '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")
792
  ),
793
- 'ratingValue' => array(
794
- 'title' => __('Rating Value', "wp-seo-structured-data-schema"),
795
- 'type' => 'number',
796
- 'attr' => 'step="any"',
797
- 'required' => true,
798
- 'desc' => __("A numerical quality rating for the item.", "wp-seo-structured-data-schema")
799
- ),
800
  'ratingValue' => array(
801
  'title' => __('Rating Value', "wp-seo-structured-data-schema"),
802
  'attr' => 'step="any"',
@@ -820,7 +813,7 @@ class KcSeoOptions
820
  )
821
  )
822
  ),
823
- 'restaurant' => array(
824
  'pro' => false,
825
  'title' => __('Restaurant', "wp-seo-structured-data-schema"),
826
  'fields' => array(
@@ -872,7 +865,7 @@ class KcSeoOptions
872
  )
873
  )
874
  ),
875
- 'localBusiness' => array(
876
  'pro' => false,
877
  'title' => __('Local Business', "wp-seo-structured-data-schema"),
878
  'fields' => array(
@@ -952,7 +945,7 @@ class KcSeoOptions
952
  'title' => __('Date of Published', "wp-seo-structured-data-schema"),
953
  'type' => 'text',
954
  'class' => 'kcseo-date',
955
- 'desc' => __("Like this: 2015-12-25 4:00 PM", "wp-seo-structured-data-schema")
956
  ),
957
  'review_ratingValue' => array(
958
  'title' => __('Rating value', "wp-seo-structured-data-schema"),
@@ -974,42 +967,161 @@ class KcSeoOptions
974
  )
975
  )
976
  ),
977
- 'book' => array(
978
  'pro' => true,
979
  'title' => __("Book", "wp-seo-structured-data-schema"),
980
  ),
981
- 'course' => array(
982
  'pro' => true,
983
  'title' => __("Course", "wp-seo-structured-data-schema"),
984
  ),
985
- 'JobPosting' => array(
986
  'pro' => true,
987
  'title' => __("Job Posting", "wp-seo-structured-data-schema"),
988
  ),
989
- 'movie' => array(
990
  'pro' => true,
991
  'title' => __("Movie", "wp-seo-structured-data-schema"),
992
  ),
993
- 'music' => array(
994
  'pro' => true,
995
  'title' => __("Music", "wp-seo-structured-data-schema"),
996
  ),
997
- 'recipe' => array(
998
  'pro' => true,
999
  'title' => __("Recipe", "wp-seo-structured-data-schema"),
1000
  ),
1001
- 'TVEpisode' => array(
1002
  'pro' => true,
1003
  'title' => __("TVEpisode", "wp-seo-structured-data-schema"),
1004
  ),
1005
- 'question' => array(
1006
  'pro' => true,
1007
  'title' => __("QAPage", "wp-seo-structured-data-schema"),
1008
  ),
1009
- 'itemList' => array(
1010
  'pro' => true,
1011
  'title' => __("Item List", "wp-seo-structured-data-schema"),
1012
- )
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1013
  );
1014
 
1015
  return apply_filters('kcseo_schema_types', $schemas);
@@ -1576,6 +1688,60 @@ class KcSeoOptions
1576
  return apply_filters('kcseo_social_list', $socialList);
1577
  }
1578
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1579
  static function getReviewNotice() {
1580
  $html = null;
1581
  $html = '<span>As of September, Google made a major change to review snippet schema and structure data markup. Google no longer support "self-serving" independent markup tied to the general types and has narrow support to specific types.</span><br><br>
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(
41
  'type' => 'text',
42
  'class' => 'kcseo-date',
43
  'required' => true,
44
+ 'desc' => __('Like this: 2015-12-25 14:20:00', "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 14:20:00', "wp-seo-structured-data-schema")
52
  ),
53
  'publisher' => array(
54
  'title' => __('Publisher', "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(
114
  'title' => __('Published date', "wp-seo-structured-data-schema"),
115
  'type' => 'text',
116
  'class' => 'kcseo-date',
117
+ 'desc' => __('Like this: 2015-12-25 14:20:00', "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 14:20:00', "wp-seo-structured-data-schema"),
125
  'required' => true
126
  ),
127
  'publisher' => array(
148
  )
149
  )
150
  ),
151
+ 'news_article' => array(
152
  'pro' => false,
153
  'title' => __('News Article', "wp-seo-structured-data-schema"),
154
  'fields' => array(
183
  'title' => __('Published date', "wp-seo-structured-data-schema"),
184
  'type' => 'text',
185
  'class' => 'kcseo-date',
186
+ 'desc' => __('Like this: 2015-12-25 14:20:00', "wp-seo-structured-data-schema"),
187
  'required' => true
188
  ),
189
  'dateModified' => array(
191
  'type' => 'text',
192
  'class' => 'kcseo-date',
193
  'required' => true,
194
+ 'desc' => __('Like this: 2015-12-25 14:20:00', "wp-seo-structured-data-schema")
195
  ),
196
  'publisher' => array(
197
  'title' => __('Publisher', "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(
341
  'title' => __('Date of Published', "wp-seo-structured-data-schema"),
342
  'type' => 'text',
343
  'class' => 'kcseo-date',
344
+ 'desc' => __("Like this: 2015-12-25 14:20:00", "wp-seo-structured-data-schema")
345
  ),
346
  'review_ratingValue' => array(
347
  'title' => __('Rating value', "wp-seo-structured-data-schema"),
363
  )
364
  )
365
  ),
366
+ 'product' => array(
367
  'pro' => false,
368
  'title' => __('Product', "wp-seo-structured-data-schema"),
369
  'fields' => array(
518
  ),
519
  )
520
  ),
521
+ 'video' => array(
522
  'pro' => false,
523
  'title' => __('Video', "wp-seo-structured-data-schema"),
524
  'fields' => array(
576
  'title' => __('Expires', "wp-seo-structured-data-schema"),
577
  'type' => 'text',
578
  'class' => 'kcseo-date',
579
+ 'desc' => __("Like this: 2015-12-25 14:20:00", "wp-seo-structured-data-schema")
580
  ),
581
  )
582
  ),
583
+ 'service' => array(
584
  'pro' => false,
585
  'title' => __('Service', "wp-seo-structured-data-schema"),
586
  'fields' => array(
657
  ),
658
  )
659
  ),
660
+ 'review' => array(
661
  'pro' => false,
662
  'title' => __('Review', "wp-seo-structured-data-schema"),
663
  'fields' => array(
698
  'title' => __('Date of Published', "wp-seo-structured-data-schema"),
699
  'type' => 'text',
700
  'class' => 'kcseo-date',
701
+ 'desc' => __("Like this: 2015-12-25 14:20:00", "wp-seo-structured-data-schema")
702
  ),
703
  'ratingValue' => array(
704
  'title' => __('Rating value', "wp-seo-structured-data-schema"),
725
  )
726
  )
727
  ),
728
+ 'aggregate_rating' => array(
729
  'pro' => false,
730
  'title' => __('Aggregate Ratings', "wp-seo-structured-data-schema"),
731
  'fields' => array(
790
  'required' => true,
791
  '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")
792
  ),
 
 
 
 
 
 
 
793
  'ratingValue' => array(
794
  'title' => __('Rating Value', "wp-seo-structured-data-schema"),
795
  'attr' => 'step="any"',
813
  )
814
  )
815
  ),
816
+ 'restaurant' => array(
817
  'pro' => false,
818
  'title' => __('Restaurant', "wp-seo-structured-data-schema"),
819
  'fields' => array(
865
  )
866
  )
867
  ),
868
+ 'localBusiness' => array(
869
  'pro' => false,
870
  'title' => __('Local Business', "wp-seo-structured-data-schema"),
871
  'fields' => array(
945
  'title' => __('Date of Published', "wp-seo-structured-data-schema"),
946
  'type' => 'text',
947
  'class' => 'kcseo-date',
948
+ 'desc' => __("Like this: 2015-12-25 14:20:00", "wp-seo-structured-data-schema")
949
  ),
950
  'review_ratingValue' => array(
951
  'title' => __('Rating value', "wp-seo-structured-data-schema"),
967
  )
968
  )
969
  ),
970
+ 'book' => array(
971
  'pro' => true,
972
  'title' => __("Book", "wp-seo-structured-data-schema"),
973
  ),
974
+ 'course' => array(
975
  'pro' => true,
976
  'title' => __("Course", "wp-seo-structured-data-schema"),
977
  ),
978
+ 'JobPosting' => array(
979
  'pro' => true,
980
  'title' => __("Job Posting", "wp-seo-structured-data-schema"),
981
  ),
982
+ 'movie' => array(
983
  'pro' => true,
984
  'title' => __("Movie", "wp-seo-structured-data-schema"),
985
  ),
986
+ 'music' => array(
987
  'pro' => true,
988
  'title' => __("Music", "wp-seo-structured-data-schema"),
989
  ),
990
+ 'recipe' => array(
991
  'pro' => true,
992
  'title' => __("Recipe", "wp-seo-structured-data-schema"),
993
  ),
994
+ 'TVEpisode' => array(
995
  'pro' => true,
996
  'title' => __("TVEpisode", "wp-seo-structured-data-schema"),
997
  ),
998
+ 'question' => array(
999
  'pro' => true,
1000
  'title' => __("QAPage", "wp-seo-structured-data-schema"),
1001
  ),
1002
+ 'itemList' => array(
1003
  'pro' => true,
1004
  'title' => __("Item List", "wp-seo-structured-data-schema"),
1005
+ ),
1006
+ 'specialAnnouncement' => [
1007
+ 'title' => __('Special Announcement', "wp-seo-structured-data-schema-pro"),
1008
+ 'fields' => [
1009
+ 'active' => [
1010
+ 'type' => 'checkbox'
1011
+ ],
1012
+ 'name' => [
1013
+ 'title' => __('Name', "wp-seo-structured-data-schema-pro"),
1014
+ 'type' => 'text',
1015
+ 'desc' => __('SpecialAnnouncement.name: Name of the announcement. This text should be present on the underlying page.', "wp-seo-structured-data-schema-pro"),
1016
+ 'required' => true
1017
+ ],
1018
+ 'url' => [
1019
+ 'title' => __('Page URL', "wp-seo-structured-data-schema-pro"),
1020
+ 'type' => 'url',
1021
+ 'desc' => __('SpecialAnnouncement.url: URL of the page containing the announcements. If present, this must match the URL of the page containing the information.', "wp-seo-structured-data-schema-pro"),
1022
+ 'required' => true
1023
+ ],
1024
+ 'datePublished' => [
1025
+ 'title' => __('Published date', "wp-seo-structured-data-schema-pro"),
1026
+ 'type' => 'text',
1027
+ 'class' => 'kcseo-date',
1028
+ 'desc' => __('Like this: 2015-12-25 14:20:00', "wp-seo-structured-data-schema-pro"),
1029
+ 'required' => true
1030
+ ],
1031
+ 'expires' => [
1032
+ 'title' => __('Expires date', "wp-seo-structured-data-schema-pro"),
1033
+ 'type' => 'text',
1034
+ 'class' => 'kcseo-date',
1035
+ 'desc' => __('Like this: 2015-12-25 14:20:00', "wp-seo-structured-data-schema-pro"),
1036
+ 'recommended' => true,
1037
+ ],
1038
+ 'text' => [
1039
+ 'title' => __('Text', "wp-seo-structured-data-schema-pro"),
1040
+ 'type' => 'textarea',
1041
+ 'desc' => __('SpecialAnnouncement.text: Text of the announcements.', "wp-seo-structured-data-schema-pro"),
1042
+ 'required' => true
1043
+ ],
1044
+ 'locations' => [
1045
+ 'title' => __('Announcement Locations', "wp-seo-structured-data-schema-pro"),
1046
+ 'type' => 'group',
1047
+ 'duplicate' => true,
1048
+ 'fields' => [
1049
+ 'location_heading' => [
1050
+ 'type' => 'heading',
1051
+ 'title' => __('Announcement Location', "wp-seo-structured-data-schema-pro")
1052
+ ],
1053
+ 'type' => [
1054
+ 'title' => __('Type', "wp-seo-structured-data-schema-pro"),
1055
+ 'type' => 'select',
1056
+ 'options' => self::announcementLocationTypes(),
1057
+ 'required' => true
1058
+ ],
1059
+ 'name' => [
1060
+ 'title' => __('Name', "wp-seo-structured-data-schema-pro"),
1061
+ 'type' => 'text',
1062
+ 'desc' => __("SpecialAnnouncement.announcementLocation.name: ", "wp-seo-structured-data-schema-pro"),
1063
+ 'recommended' => true,
1064
+ ],
1065
+ 'url' => [
1066
+ 'title' => __('URL', "wp-seo-structured-data-schema-pro"),
1067
+ 'type' => 'url',
1068
+ 'recommended' => true,
1069
+ 'desc' => __("SpecialAnnouncement.announcementLocation.url: URL", "wp-seo-structured-data-schema-pro")
1070
+ ],
1071
+ 'address_street' => [
1072
+ 'title' => __('Address: Street', "wp-seo-structured-data-schema-pro"),
1073
+ 'type' => 'text',
1074
+ 'desc' => __('SpecialAnnouncement.announcementLocation.address.streetAddress: The street address. For example, 1600 Amphitheatre Pkwy.', "wp-seo-structured-data-schema-pro"),
1075
+ 'recommended' => true,
1076
+ ],
1077
+ 'address_locality' => [
1078
+ 'title' => __('Address: Locality', "wp-seo-structured-data-schema-pro"),
1079
+ 'type' => 'text',
1080
+ 'desc' => __('SpecialAnnouncement.announcementLocation.address.addressLocality: The locality in which the street address is, and which is in the region. For example, Mountain View.', "wp-seo-structured-data-schema-pro"),
1081
+ 'recommended' => true,
1082
+ ],
1083
+ 'address_post_code' => [
1084
+ 'title' => __('Address: Post Code', "wp-seo-structured-data-schema-pro"),
1085
+ 'type' => 'text',
1086
+ 'desc' => __('SpecialAnnouncement.announcementLocation.address.postalCode: The postal code. For example, 94043.', "wp-seo-structured-data-schema-pro"),
1087
+ 'recommended' => true,
1088
+ ],
1089
+ 'address_region' => [
1090
+ 'title' => __('Address: Region', "wp-seo-structured-data-schema-pro"),
1091
+ 'type' => 'text',
1092
+ 'desc' => __('SpecialAnnouncement.announcementLocation.address.addressRegion: The region in which the locality is, and which is in the country. For example, California.', "wp-seo-structured-data-schema-pro"),
1093
+ 'recommended' => true,
1094
+ ],
1095
+ 'address_country' => [
1096
+ 'title' => __('Address: Country', "wp-seo-structured-data-schema-pro"),
1097
+ 'type' => 'text',
1098
+ 'desc' => __('SpecialAnnouncement.announcementLocation.address.addressCountry: The country. For example, USA. You can also provide the two-letter ISO 3166-1 alpha-2 country code.', "wp-seo-structured-data-schema-pro"),
1099
+ 'recommended' => true,
1100
+ ],
1101
+ 'id' => [
1102
+ 'title' => __('ID', "wp-seo-structured-data-schema-pro"),
1103
+ 'type' => 'text',
1104
+ 'desc' => __('SpecialAnnouncement.announcementLocation.@id: An optional unique identifier so that you can reference pre-existing structured data for this location.', "wp-seo-structured-data-schema-pro"),
1105
+ ],
1106
+ 'image' => array(
1107
+ 'title' => __('Image', "wp-seo-structured-data-schema-pro"),
1108
+ 'type' => 'image'
1109
+ ),
1110
+ 'priceRange' => array(
1111
+ 'title' => 'Price Range (Recommended)',
1112
+ 'type' => 'text',
1113
+ 'recommended' => true,
1114
+ 'desc' => __("The price range of the business, for example $$$.", "wp-seo-structured-data-schema-pro")
1115
+ ),
1116
+ 'telephone' => array(
1117
+ 'title' => 'Telephone (Recommended)',
1118
+ 'type' => 'text',
1119
+ 'recommended' => true
1120
+ )
1121
+ ]
1122
+ ],
1123
+ ]
1124
+ ]
1125
  );
1126
 
1127
  return apply_filters('kcseo_schema_types', $schemas);
1688
  return apply_filters('kcseo_social_list', $socialList);
1689
  }
1690
 
1691
+
1692
+ static function announcementLocationTypes() {
1693
+ return apply_filters('kcseo_announcement_location_types', [
1694
+ 'Airport',
1695
+ 'Aquarium',
1696
+ 'Beach',
1697
+ 'Bridge',
1698
+ 'BuddhistTemple',
1699
+ 'BusStation',
1700
+ 'BusStop',
1701
+ 'Campground',
1702
+ 'CatholicChurch',
1703
+ 'Cemetery',
1704
+ 'Church',
1705
+ 'CivicStructure',
1706
+ 'CityHall',
1707
+ 'CollegeOrUniversity',
1708
+ 'Courthouse',
1709
+ 'CovidTestingFacility',
1710
+ 'Crematorium',
1711
+ 'DefenceEstablishment',
1712
+ 'EducationalOrganization',
1713
+ 'ElementarySchool',
1714
+ 'Embassy',
1715
+ 'EventVenue',
1716
+ 'FireStation',
1717
+ 'GovernmentBuilding',
1718
+ 'HighSchool',
1719
+ 'HinduTemple',
1720
+ 'Hospital',
1721
+ 'LegislativeBuilding',
1722
+ 'MiddleSchool',
1723
+ 'Mosque',
1724
+ 'MovieTheater',
1725
+ 'Museum',
1726
+ 'MusicVenue',
1727
+ 'Park',
1728
+ 'ParkingFacility',
1729
+ 'PerformingArtsTheater',
1730
+ 'PlaceOfWorship',
1731
+ 'Playground',
1732
+ 'PoliceStation',
1733
+ 'Preschool',
1734
+ 'RVPark',
1735
+ 'School',
1736
+ 'StadiumOrArena',
1737
+ 'SubwayStation',
1738
+ 'Synagogue',
1739
+ 'TaxiStand',
1740
+ 'TrainStation',
1741
+ 'Zoo',
1742
+ ]);
1743
+ }
1744
+
1745
  static function getReviewNotice() {
1746
  $html = null;
1747
  $html = '<span>As of September, Google made a major change to review snippet schema and structure data markup. Google no longer support "self-serving" independent markup tied to the general types and has narrow support to specific types.</span><br><br>
lib/models/KcSeoSchemaModel.php CHANGED
@@ -668,7 +668,82 @@ if (!class_exists('KcSeoSchemaModel')):
668
  $html .= $this->get_jsonEncode(apply_filters('kcseo_snippet_local_business_review', $local_business_review, $metaData));
669
  }
670
  break;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
671
 
 
 
 
 
 
 
 
 
 
672
  default:
673
  break;
674
  }
668
  $html .= $this->get_jsonEncode(apply_filters('kcseo_snippet_local_business_review', $local_business_review, $metaData));
669
  }
670
  break;
671
+ case 'specialAnnouncement':
672
+ $announcement = array(
673
+ "@context" => "http://schema.org",
674
+ "@type" => "SpecialAnnouncement",
675
+ "category" => "https://www.wikidata.org/wiki/Q81068910"
676
+ );
677
+ if (!empty($metaData['name'])) {
678
+ $announcement['name'] = $KcSeoWPSchema->sanitizeOutPut($metaData['name']);
679
+ }
680
+ if (!empty($metaData['datePublished'])) {
681
+ $announcement['datePosted'] = $KcSeoWPSchema->sanitizeOutPut($metaData['datePublished']);
682
+ }
683
+ if (!empty($metaData['expires'])) {
684
+ $announcement['expires'] = $KcSeoWPSchema->sanitizeOutPut($metaData['expires']);
685
+ }
686
+ if (!empty($metaData['text'])) {
687
+ $announcement['text'] = $KcSeoWPSchema->sanitizeOutPut($metaData['text'], 'textarea');
688
+ }
689
+ if (!empty($metaData['url'])) {
690
+ $announcement['url'] = $KcSeoWPSchema->sanitizeOutPut($metaData['url'], 'url');
691
+ }
692
+ if (isset($metaData['locations']) && is_array($metaData['locations']) && !empty($metaData['locations'])) {
693
+ $locations_schema = [];
694
+ foreach ($metaData['locations'] as $position => $location) {
695
+ if ($location['type']) {
696
+ $location_schema = array(
697
+ "@type" => $KcSeoWPSchema->sanitizeOutPut($location['type']),
698
+ 'name' => !empty($location['name']) ? $KcSeoWPSchema->sanitizeOutPut($location['name']) : "",
699
+ 'url' => !empty($location['url']) ? $KcSeoWPSchema->sanitizeOutPut($location['url'], 'url') : '',
700
+ "address" => [
701
+ "@type" => "PostalAddress",
702
+ ]
703
+ );
704
+ if (!empty($location['id'])) {
705
+ $location_schema['@id'] = $KcSeoWPSchema->sanitizeOutPut($location['id']);
706
+ }
707
+ if (!empty($location['image'])) {
708
+ $img = $KcSeoWPSchema->imageInfo(absint($location['image']));
709
+ $location_schema["image"] = $KcSeoWPSchema->sanitizeOutPut($img['url'], 'url');
710
+ }
711
+ if (!empty($location['url'])) {
712
+ $location_schema['url'] = $KcSeoWPSchema->sanitizeOutPut($location['url'], 'url');
713
+ }
714
+ if (!empty($location['address_street'])) {
715
+ $location_schema['address']['streetAddress'] = $KcSeoWPSchema->sanitizeOutPut($location['address_street']);
716
+ }
717
+ if (!empty($location['address_locality'])) {
718
+ $location_schema['address']['addressLocality'] = $KcSeoWPSchema->sanitizeOutPut($location['address_locality']);
719
+ }
720
+ if (!empty($location['address_post_code'])) {
721
+ $location_schema['address']['postalCode'] = $KcSeoWPSchema->sanitizeOutPut($location['address_post_code']);
722
+ }
723
+ if (!empty($location['address_region'])) {
724
+ $location_schema['address']['addressRegion'] = $KcSeoWPSchema->sanitizeOutPut($location['address_region']);
725
+ }
726
+ if (!empty($location['address_country'])) {
727
+ $location_schema['address']['addressCountry'] = $KcSeoWPSchema->sanitizeOutPut($location['address_country']);
728
+ }
729
+ if (!empty($location['priceRange'])) {
730
+ $location_schema["priceRange"] = $KcSeoWPSchema->sanitizeOutPut($location['priceRange']);
731
+ }
732
+ if (!empty($location['telephone'])) {
733
+ $location_schema["telephone"] = $KcSeoWPSchema->sanitizeOutPut($location['telephone']);
734
+ }
735
+ array_push($locations_schema, $location_schema);
736
+ }
737
 
738
+ }
739
+ if (count($locations_schema) === 1) {
740
+ $announcement['announcementLocation'] = $locations_schema[0];
741
+ } else {
742
+ $announcement['announcementLocation'] = $locations_schema;
743
+ }
744
+ }
745
+ $html .= $this->get_jsonEncode(apply_filters('kcseo_snippet_item_list', $announcement, $metaData));
746
+ break;
747
  default:
748
  break;
749
  }
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.6.12
7
  * Author: WPSEMPlugins
8
  * Author URI: https://wpsemplugins.com/
9
  * Text Domain: wp-seo-structured-data-schema
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.6.13
7
  * Author: WPSEMPlugins
8
  * Author URI: https://wpsemplugins.com/
9
  * Text Domain: wp-seo-structured-data-schema