Business Profile - Version 2.1.0

Version Description

(2020-10-13) = - This is a relatively big update with several new features and corrections, etc., so please take caution and test before updating on a live site (or wait a few days before updating in case some minor corrective updates need to be released). - Switched the structured data generated by the contact card to the new JSON-LD format. - Added an option for a separate "click to call" phone number, applicable both to the main settings and to specific locations. - Added a fallback functionality, so that, if you do not fill in a specific field (e.g. phone number) for an individual location, it will use what you set in the main settings. - Added an option to turn off the automatic insertion of the contact card on the specified contact page. - Added exceptions, so you now have the ability to have specific days that are either closed or have different hours (e.g. holidays), without having to alter your main schedule. Applicable both in the main settings and for specific locations. - Added a button to the admin bar with a link to test the current page in Google's Rich Results Test. - Added in a German translation that was submitted to us. - Generated a new .pot file.

Download this release

Release Info

Developer Rustaurius
Plugin Icon 128x128 Business Profile
Version 2.1.0
Comparing to
See all releases

Code changes from version 2.0.9 to 2.1.0

assets/css/contact-card.css CHANGED
@@ -15,6 +15,7 @@
15
  .bp-opening-hours .bp-title {
16
  text-align: center;
17
  display: block;
 
18
  }
19
  .bp-weekday:before,
20
  .bp-weekday:after {
15
  .bp-opening-hours .bp-title {
16
  text-align: center;
17
  display: block;
18
+ margin-bottom: 10px;
19
  }
20
  .bp-weekday:before,
21
  .bp-weekday:after {
assets/js/dashboard-review-ask.js CHANGED
@@ -1,10 +1,10 @@
1
  jQuery(document).ready(function($) {
2
  jQuery('.bpfwp-main-dashboard-review-ask').css('display', 'block');
3
 
4
- jQuery('.bpfwp-main-dashboard-review-ask .notice-dismiss').on('click', function(event) {
5
- var data = 'ask_review_time=7&action=bpfwp_hide_review_ask';
6
- jQuery.post(ajaxurl, data, function() {});
7
- });
8
 
9
  jQuery('.bpfwp-review-ask-yes').on('click', function() {
10
  jQuery('.bpfwp-review-ask-feedback-text').removeClass('bpfwp-hidden');
1
  jQuery(document).ready(function($) {
2
  jQuery('.bpfwp-main-dashboard-review-ask').css('display', 'block');
3
 
4
+ jQuery(document).on('click', '.bpfwp-main-dashboard-review-ask .notice-dismiss', function(event) {
5
+ var data = 'ask_review_time=7&action=bpfwp_hide_review_ask';
6
+ jQuery.post(ajaxurl, data, function() {});
7
+ });
8
 
9
  jQuery('.bpfwp-review-ask-yes').on('click', function() {
10
  jQuery('.bpfwp-review-ask-feedback-text').removeClass('bpfwp-hidden');
business-profile.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Five Star Business Profile and Schema
4
  * Plugin URI: https://www.fivestarplugins.com/plugins/business-profile/
5
  * Description: Add schema structured data to any page or post type. Create an SEO friendly contact card with your business info and associated schema. Supports Google Map, opening hours and more.
6
- * Version: 2.0.9
7
  * Author: Five Star Plugins
8
  * Author URI: https://www.fivestarplugins.com
9
  * License: GPLv3
@@ -65,8 +65,10 @@ if ( ! class_exists( 'bpfwpInit', false ) ) :
65
  // Add the admin menu
66
  add_action( 'admin_menu', array( $this, 'add_menu_page' ) );
67
 
 
 
 
68
  // Load permissions and handle combination
69
- require_once( BPFWP_PLUGIN_DIR . '/includes/class-permissions.php' );
70
  $this->permissions = new bpfwpPermissions();
71
 
72
  // Load plugin dashboard
@@ -82,7 +84,31 @@ if ( ! class_exists( 'bpfwpInit', false ) ) :
82
  'manage_options',
83
  'bpfwp-business-profile',
84
  '',
85
- 'dashicons-businessperson'
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
86
  );
87
  }
88
 
@@ -114,7 +140,7 @@ if ( ! class_exists( 'bpfwpInit', false ) ) :
114
  require_once BPFWP_PLUGIN_DIR . '/includes/class-deactivation-survey.php';
115
  require_once BPFWP_PLUGIN_DIR . '/includes/class-installation-walkthrough.php';
116
  require_once BPFWP_PLUGIN_DIR . '/includes/class-integrations.php';
117
- //require_once BPFWP_PLUGIN_DIR . '/includes/class-permissions.php';
118
  require_once BPFWP_PLUGIN_DIR . '/includes/class-review-ask.php';
119
  require_once BPFWP_PLUGIN_DIR . '/includes/class-schemas-manager.php';
120
  require_once BPFWP_PLUGIN_DIR . '/includes/schemas/class-schema.php';
@@ -334,7 +360,7 @@ if ( ! class_exists( 'bpfwpInit', false ) ) :
334
  return $content;
335
  }
336
 
337
- if ( $post->ID == $this->settings->get_setting( 'contact-page' ) ) {
338
  return $content . bpwfwp_print_contact_card();
339
  }
340
 
3
  * Plugin Name: Five Star Business Profile and Schema
4
  * Plugin URI: https://www.fivestarplugins.com/plugins/business-profile/
5
  * Description: Add schema structured data to any page or post type. Create an SEO friendly contact card with your business info and associated schema. Supports Google Map, opening hours and more.
6
+ * Version: 2.1.0
7
  * Author: Five Star Plugins
8
  * Author URI: https://www.fivestarplugins.com
9
  * License: GPLv3
65
  // Add the admin menu
66
  add_action( 'admin_menu', array( $this, 'add_menu_page' ) );
67
 
68
+ // Add a link to the Google Rich Results Test Page for front-end pages
69
+ add_action( 'admin_bar_menu', array( $this, 'add_admin_bar_link' ), 100 );
70
+
71
  // Load permissions and handle combination
 
72
  $this->permissions = new bpfwpPermissions();
73
 
74
  // Load plugin dashboard
84
  'manage_options',
85
  'bpfwp-business-profile',
86
  '',
87
+ 'dashicons-businessperson',
88
+ 51
89
+ );
90
+ }
91
+
92
+ /**
93
+ * Add a link to the Google Rich Results Test Page to front-end pages
94
+ *
95
+ * @since 2.1.0
96
+ * @return void
97
+ */
98
+ public function add_admin_bar_link( $admin_bar ) {
99
+
100
+ if ( is_admin() ) { return; }
101
+
102
+ $admin_bar->add_node(
103
+ array(
104
+ 'id' => 'business_profile_test_link',
105
+ 'title' => 'Test Schema',
106
+ 'href' => 'https://search.google.com/test/rich-results?url=' . get_the_permalink(),
107
+ 'meta' => array(
108
+ 'target' => 'blank',
109
+ 'title' => 'View Google Schema Test Results'
110
+ )
111
+ )
112
  );
113
  }
114
 
140
  require_once BPFWP_PLUGIN_DIR . '/includes/class-deactivation-survey.php';
141
  require_once BPFWP_PLUGIN_DIR . '/includes/class-installation-walkthrough.php';
142
  require_once BPFWP_PLUGIN_DIR . '/includes/class-integrations.php';
143
+ require_once BPFWP_PLUGIN_DIR . '/includes/class-permissions.php';
144
  require_once BPFWP_PLUGIN_DIR . '/includes/class-review-ask.php';
145
  require_once BPFWP_PLUGIN_DIR . '/includes/class-schemas-manager.php';
146
  require_once BPFWP_PLUGIN_DIR . '/includes/schemas/class-schema.php';
360
  return $content;
361
  }
362
 
363
+ if ( $post->ID == $this->settings->get_setting( 'contact-page' ) and ! $this->settings->get_setting( 'disable-contact-page-card' ) ) {
364
  return $content . bpwfwp_print_contact_card();
365
  }
366
 
includes/class-custom-post-types.php CHANGED
@@ -232,6 +232,16 @@ if ( ! class_exists( 'bpfwpCustomPostTypes', false ) ) :
232
  'priority' => 'default',
233
  ),
234
 
 
 
 
 
 
 
 
 
 
 
235
  // Metabox to create Schema for specific post types, categories, etc.
236
  array(
237
  'id' => 'bpfwp_schema_targeting_information',
@@ -432,6 +442,13 @@ if ( ! class_exists( 'bpfwpCustomPostTypes', false ) ) :
432
  <input type="tel" name="phone" id="bpfwp_phone" value="<?php esc_attr_e( get_post_meta( $post->ID, 'phone', true ) ); ?>">
433
  </div>
434
 
 
 
 
 
 
 
 
435
  <?php
436
  }
437
 
@@ -464,6 +481,27 @@ if ( ! class_exists( 'bpfwpCustomPostTypes', false ) ) :
464
  <?php
465
  }
466
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
467
  /**
468
  * Output the metabox HTML to customize a new schema post
469
  *
@@ -698,6 +736,56 @@ if ( ! class_exists( 'bpfwpCustomPostTypes', false ) ) :
698
  }
699
 
700
  return $scheduler;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
701
  }
702
 
703
  /**
@@ -728,14 +816,16 @@ if ( ! class_exists( 'bpfwpCustomPostTypes', false ) ) :
728
  }
729
 
730
  $post_meta = array(
731
- 'schema_type' => 'sanitize_text_field',
732
- 'geo_address' => 'wp_kses_post',
733
- 'geo_latitude' => 'sanitize_text_field',
734
- 'geo_longitude' => 'sanitize_text_field',
735
- 'phone' => 'sanitize_text_field',
736
- 'contact_post' => 'absint',
737
- 'contact_email' => 'sanitize_email',
738
- 'opening_hours' => array( $this, 'sanitize_opening_hours' ),
 
 
739
  );
740
 
741
  foreach ( $post_meta as $key => $sanitizer ) {
@@ -821,6 +911,23 @@ if ( ! class_exists( 'bpfwpCustomPostTypes', false ) ) :
821
  return $scheduler->sanitize_callback_wrapper( $values );
822
  }
823
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
824
  /**
825
  * Automatically append a contact card to `the_content` on location
826
  * single pages
232
  'priority' => 'default',
233
  ),
234
 
235
+ // Metabox to enter exceptions.
236
+ array(
237
+ 'id' => 'bpfwp_exceptions_metabox',
238
+ 'title' => __( 'Exceptions', 'business-profile' ),
239
+ 'callback' => array( $this, 'print_exceptions_metabox' ),
240
+ 'post_type' => $this->location_cpt_slug,
241
+ 'context' => 'normal',
242
+ 'priority' => 'default',
243
+ ),
244
+
245
  // Metabox to create Schema for specific post types, categories, etc.
246
  array(
247
  'id' => 'bpfwp_schema_targeting_information',
442
  <input type="tel" name="phone" id="bpfwp_phone" value="<?php esc_attr_e( get_post_meta( $post->ID, 'phone', true ) ); ?>">
443
  </div>
444
 
445
+ <div class="bpfwp-meta-input bpfwp-meta-clickphone">
446
+ <label for="bpfwp_clickphone">
447
+ <?php esc_html_e( 'Click-to-Call Phone Number', 'business-profile' ); ?>
448
+ </label>
449
+ <input type="tel" name="clickphone" id="bpfwp_clickphone" value="<?php esc_attr_e( get_post_meta( $post->ID, 'clickphone', true ) ); ?>">
450
+ </div>
451
+
452
  <?php
453
  }
454
 
481
  <?php
482
  }
483
 
484
+
485
+ /**
486
+ * Output the metabox HTML to define exceptions
487
+ *
488
+ * @since 1.1
489
+ * @access public
490
+ * @param WP_Post $post The current post object.
491
+ * @return void
492
+ */
493
+ public function print_exceptions_metabox( $post ) {
494
+
495
+ $exceptions = $this->get_exceptions_meta_object( get_post_meta( $post->ID, 'exceptions', true ) );
496
+ ?>
497
+
498
+ <div class="bpfwp-meta-input bpfwp-meta-exceptions">
499
+ <?php $exceptions->display_setting(); ?>
500
+ </div>
501
+
502
+ <?php
503
+ }
504
+
505
  /**
506
  * Output the metabox HTML to customize a new schema post
507
  *
736
  }
737
 
738
  return $scheduler;
739
+
740
+ }
741
+
742
+ public function get_exceptions_meta_object( $values = null ) {
743
+
744
+ require_once BPFWP_PLUGIN_DIR . '/includes/class-sap-scheduler-meta.php';
745
+ $exceptions = new bpfwpSAPSchedulerMeta(
746
+ array(
747
+ 'page' => 'dummy_page', // Required but not used.
748
+ 'id' => 'exceptions',
749
+ 'title' => __( 'Exceptions', 'business-profile' ),
750
+ 'description' => __( "Define special opening hours for holidays, events or other needs. Leave the time empty if you're closed all day.", 'business-profile' ),
751
+ 'time_format' => _x( 'h:i A', 'Time format displayed in the opening hours setting panel in your admin area. Must match formatting rules at http://amsul.ca/pickadate.js/time.htm#formats', 'business-profile' ),
752
+ 'date_format' => _x( 'mmmm d, yyyy', 'Date format displayed in the opening hours setting panel in your admin area. Must match formatting rules at http://amsul.ca/pickadate.js/date.htm#formatting-rules', 'business-profile' ),
753
+ 'disable_weekdays' => true,
754
+ 'disable_weeks' => true,
755
+ 'strings' => array(
756
+ 'add_rule' => __( 'Add another exception', 'business-profile' ),
757
+ 'weekly' => _x( 'Weekly', 'Format of a scheduling rule', 'business-profile' ),
758
+ 'monthly' => _x( 'Monthly', 'Format of a scheduling rule', 'business-profile' ),
759
+ 'date' => _x( 'Date', 'Format of a scheduling rule', 'business-profile' ),
760
+ 'weekdays' => _x( 'Days of the week', 'Label for selecting days of the week in a scheduling rule', 'business-profile' ),
761
+ 'month_weeks' => _x( 'Weeks of the month', 'Label for selecting weeks of the month in a scheduling rule', 'business-profile' ),
762
+ 'date_label' => _x( 'Date', 'Label to select a date for a scheduling rule', 'business-profile' ),
763
+ 'time_label' => _x( 'Time', 'Label to select a time slot for a scheduling rule', 'business-profile' ),
764
+ 'allday' => _x( 'All day', 'Label to set a scheduling rule to last all day', 'business-profile' ),
765
+ 'start' => _x( 'Start', 'Label for the starting time of a scheduling rule', 'business-profile' ),
766
+ 'end' => _x( 'End', 'Label for the ending time of a scheduling rule', 'business-profile' ),
767
+ 'set_time_prompt' => _x( 'All day long. Want to %sset a time slot%s?', 'Prompt displayed when a scheduling rule is set without any time restrictions', 'business-profile' ),
768
+ 'toggle' => _x( 'Open and close this rule', 'Toggle a scheduling rule open and closed', 'business-profile' ),
769
+ 'delete' => _x( 'Delete rule', 'Delete a scheduling rule', 'business-profile' ),
770
+ 'delete_schedule' => __( 'Delete scheduling rule', 'business-profile' ),
771
+ 'never' => _x( 'Never', 'Brief default description of a scheduling rule when no weekdays or weeks are included in the rule', 'business-profile' ),
772
+ 'weekly_always' => _x( 'Every day', 'Brief default description of a scheduling rule when all the weekdays/weeks are included in the rule', 'business-profile' ),
773
+ 'monthly_weekdays' => _x( '%s on the %s week of the month', 'Brief default description of a scheduling rule when some weekdays are included on only some weeks of the month. %s should be left alone and will be replaced by a comma-separated list of days and weeks in the following format: M, T, W on the first, second week of the month', 'business-profile' ),
774
+ 'monthly_weeks' => _x( '%s week of the month', 'Brief default description of a scheduling rule when some weeks of the month are included but all or no weekdays are selected. %s should be left alone and will be replaced by a comma-separated list of weeks in the following format: First, second week of the month', 'business-profile' ),
775
+ 'all_day' => _x( 'Closed all day', 'Brief default description of a scheduling exception when no times are set', 'business-profile' ),
776
+ 'before' => _x( 'Ends at', 'Brief default description of a scheduling rule when an end time is set but no start time. If the end time is 6pm, it will read: Ends at 6pm', 'business-profile' ),
777
+ 'after' => _x( 'Starts at', 'Brief default description of a scheduling rule when a start time is set but no end time. If the start time is 6pm, it will read: Starts at 6pm', 'business-profile' ),
778
+ 'separator' => _x( '&mdash;', 'Separator between times of a scheduling rule', 'business-profile' ),
779
+ ),
780
+ )
781
+ );
782
+
783
+ if ( ! empty( $values ) ) {
784
+ $exceptions->set_value( $values );
785
+ }
786
+
787
+ return $exceptions;
788
+
789
  }
790
 
791
  /**
816
  }
817
 
818
  $post_meta = array(
819
+ 'schema_type' => 'sanitize_text_field',
820
+ 'geo_address' => 'wp_kses_post',
821
+ 'geo_latitude' => 'sanitize_text_field',
822
+ 'geo_longitude' => 'sanitize_text_field',
823
+ 'phone' => 'sanitize_text_field',
824
+ 'clickphone' => 'sanitize_text_field',
825
+ 'contact_post' => 'absint',
826
+ 'contact_email' => 'sanitize_email',
827
+ 'opening_hours' => array( $this, 'sanitize_opening_hours' ),
828
+ 'exceptions' => array( $this, 'sanitize_exceptions' ),
829
  );
830
 
831
  foreach ( $post_meta as $key => $sanitizer ) {
911
  return $scheduler->sanitize_callback_wrapper( $values );
912
  }
913
 
914
+ /**
915
+ * Sanitize exceptions
916
+ *
917
+ * This is a wrapper for the sanitization callback in the Scheduler
918
+ * component of Simple Admin Pages
919
+ *
920
+ * @since 1.1
921
+ * @access public
922
+ * @see lib/simple-admin-pages/classes/AdminPageSetting.Scheduler.class.php
923
+ * @param array $values Raw values for the exceptions.
924
+ * @return array $values Sanitized values for the exceptions.
925
+ */
926
+ public function sanitize_exceptions( $values ) {
927
+ $exceptions = $this->get_exceptions_meta_object( $values );
928
+ return $exceptions->sanitize_callback_wrapper( $values );
929
+ }
930
+
931
  /**
932
  * Automatically append a contact card to `the_content` on location
933
  * single pages
includes/class-settings.php CHANGED
@@ -105,6 +105,7 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
105
  'show_contact' => true,
106
  'show_opening_hours' => true,
107
  'show_opening_hours_brief' => false,
 
108
  'show_map' => true,
109
  'show_image' => false,
110
  )
@@ -124,6 +125,8 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
124
  */
125
  public function get_setting( $setting, $location = false ) {
126
 
 
 
127
  // Most settings are named with hyphens, but the schema_type uses
128
  // an underscore. This just provides a small convenience by allowing
129
  // users to look up the setting by `schema-type`.
@@ -131,57 +134,83 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
131
  $setting = 'schema_type';
132
  }
133
 
134
- if ( empty( $location ) ) {
135
- if ( empty( $this->settings ) ) {
136
- $this->settings = get_option( 'bpfwp-settings' );
137
- }
138
-
139
- if ( ! empty( $this->settings[ $setting ] ) ) {
140
- return $this->settings[ $setting ];
141
- }
142
-
143
- if ( ! empty( $this->defaults[ $setting ] ) ) {
144
- return $this->defaults[ $setting ];
145
- }
146
- } else {
147
-
148
  // Map setting slugs to post data.
149
- switch ( $setting ) {
150
 
151
- case 'schema_type' :
152
- return get_post_meta( $location, 'schema_type', true );
153
 
154
  case 'image' :
155
- return has_post_thumbnail( $location ) ? get_post_thumbnail_id( $location ) : $this->get_setting( $setting );
 
156
 
157
  case 'name' :
158
- return get_the_title( $location );
 
159
 
160
  case 'description' :
161
- return get_the_content( $location );
 
162
 
163
  case 'address' :
164
- return array(
165
- 'text' => get_post_meta( $location, 'geo_address', true ),
166
- 'lat' => get_post_meta( $location, 'geo_latitude', true ),
167
- 'lon' => get_post_meta( $location, 'geo_longitude', true ),
168
- );
169
 
170
- case 'phone' :
171
- return get_post_meta( $location, 'phone', true );
 
 
 
 
 
 
 
 
 
 
172
 
173
  case 'contact-page' :
174
- return get_post_meta( $location, 'contact_post', true );
 
175
 
176
  case 'contact-email' :
177
- return get_post_meta( $location, 'contact_email', true );
 
178
 
179
  case 'opening-hours' :
180
- return get_post_meta( $location, 'opening_hours', true );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
181
  }
182
  }
183
 
184
- return null;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
185
  }
186
 
187
  /**
@@ -362,7 +391,7 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
362
  'id' => 'google-maps-api-key',
363
  'title' => __( 'Google Maps API Key', 'business-profile' ),
364
  'description' => sprintf(
365
- __( 'Google requires an API key to use their maps. %sGet an API key%s. A full walk-through is available in the %sdocumentiaton%s.', 'business-profile' ),
366
  '<a href="https://developers.google.com/maps/documentation/javascript/get-api-key">',
367
  '</a>',
368
  '<a href="http://doc.fivestarplugins.com/plugins/business-profile/user/faq#google-maps-api-key">',
@@ -389,6 +418,21 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
389
  )
390
  );
391
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
392
  $sap->add_setting(
393
  'bpfwp-settings',
394
  'bpfwp-contact',
@@ -408,6 +452,22 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
408
  )
409
  );
410
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
411
  $sap->add_setting(
412
  'bpfwp-settings',
413
  'bpfwp-contact',
@@ -484,6 +544,46 @@ if ( ! class_exists( 'bpfwpSettings' ) ) :
484
  )
485
  );
486
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
487
  $sap->add_section(
488
  'bpfwp-settings',
489
  array(
105
  'show_contact' => true,
106
  'show_opening_hours' => true,
107
  'show_opening_hours_brief' => false,
108
+ 'show_exceptions' => true,
109
  'show_map' => true,
110
  'show_image' => false,
111
  )
125
  */
126
  public function get_setting( $setting, $location = false ) {
127
 
128
+ $result_value = null;
129
+
130
  // Most settings are named with hyphens, but the schema_type uses
131
  // an underscore. This just provides a small convenience by allowing
132
  // users to look up the setting by `schema-type`.
134
  $setting = 'schema_type';
135
  }
136
 
137
+ if ( ! empty( $location ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
138
  // Map setting slugs to post data.
 
139
 
140
+ switch ( $setting ) {
 
141
 
142
  case 'image' :
143
+ $result_value = has_post_thumbnail( $location ) ? get_post_thumbnail_id( $location ) : $this->get_setting( $setting );
144
+ break;
145
 
146
  case 'name' :
147
+ $result_value = get_the_title( $location );
148
+ break;
149
 
150
  case 'description' :
151
+ $result_value = get_the_content( $location );
152
+ break;
153
 
154
  case 'address' :
155
+ $result_value = '';
 
 
 
 
156
 
157
+ $text = get_post_meta( $location, 'geo_address', true );
158
+ $lat = get_post_meta( $location, 'geo_latitude', true );
159
+ $lon = get_post_meta( $location, 'geo_longitude', true );
160
+
161
+ if(! empty( $text ) || ( $lat && $lon ) ) {
162
+ $result_value = array(
163
+ 'text' => $text,
164
+ 'lat' => $lat,
165
+ 'lon' => $lon
166
+ );
167
+ }
168
+ break;
169
 
170
  case 'contact-page' :
171
+ $result_value = get_post_meta( $location, 'contact_post', true );
172
+ break;
173
 
174
  case 'contact-email' :
175
+ $result_value = get_post_meta( $location, 'contact_email', true );
176
+ break;
177
 
178
  case 'opening-hours' :
179
+ $result_value = get_post_meta( $location, 'opening_hours', true );
180
+ break;
181
+
182
+ case 'clickphone' :
183
+ $result_value = get_post_meta( $location, $setting, true );
184
+ if( empty($result_value) ) {
185
+ $result_value = get_post_meta( $location, 'phone', true );
186
+ }
187
+ break;
188
+
189
+ case 'exceptions' :
190
+ case 'schema_type' :
191
+ case 'phone' :
192
+ default :
193
+ $result_value = get_post_meta( $location, $setting, true );
194
+ break;
195
  }
196
  }
197
 
198
+ // fallback
199
+ if( ! $result_value ) {
200
+ if ( empty( $this->settings ) ) {
201
+ $this->settings = get_option( 'bpfwp-settings' );
202
+ }
203
+
204
+ if ( ! $result_value && ! empty( $this->settings[ $setting ] ) ) {
205
+ $result_value = $this->settings[ $setting ];
206
+ }
207
+
208
+ if ( ! $result_value && ! empty( $this->defaults[ $setting ] ) ) {
209
+ $result_value = $this->defaults[ $setting ];
210
+ }
211
+ }
212
+
213
+ return $result_value;
214
  }
215
 
216
  /**
391
  'id' => 'google-maps-api-key',
392
  'title' => __( 'Google Maps API Key', 'business-profile' ),
393
  'description' => sprintf(
394
+ __( 'Google requires an API key to use their maps. %sGet an API key%s. A full walk-through is available in the %sdocumentation%s.', 'business-profile' ),
395
  '<a href="https://developers.google.com/maps/documentation/javascript/get-api-key">',
396
  '</a>',
397
  '<a href="http://doc.fivestarplugins.com/plugins/business-profile/user/faq#google-maps-api-key">',
418
  )
419
  );
420
 
421
+ $sap->add_setting(
422
+ 'bpfwp-settings',
423
+ 'bpfwp-contact',
424
+ 'text',
425
+ array(
426
+ 'id' => 'clickphone',
427
+ 'title' => __( 'Click-to-Call Phone', 'business-profile' ),
428
+ 'description' => __( 'Use this field to set a different number for when the phone number is clicked in the contact card (e.g. if you\'d like it to be just an unformatted string of numbers). If left blank, the click-to-call will use the phone number provided in the option above.', 'business-profile' ),
429
+ 'args' => array(
430
+ 'label_for' => 'bpfwp-settings[clickphone]',
431
+ 'class' => 'bpfwp-clickphone'
432
+ )
433
+ )
434
+ );
435
+
436
  $sap->add_setting(
437
  'bpfwp-settings',
438
  'bpfwp-contact',
452
  )
453
  );
454
 
455
+ $sap->add_setting(
456
+ 'bpfwp-settings',
457
+ 'bpfwp-contact',
458
+ 'toggle',
459
+ array(
460
+ 'id' => 'disable-contact-page-card',
461
+ 'title' => __( 'Disable Contact Page Card', 'business-profile' ),
462
+ 'label' => __( 'This disables the contact card from being automatically included on the page you set as the contact page in the option above this one.', 'business-profile' ),
463
+ 'args' => array(
464
+ 'label_for' => 'bpfwp-settings[disable-contact-page-card]',
465
+ 'class' => 'bpfwp-disable-contact-page-card'
466
+ )
467
+
468
+ )
469
+ );
470
+
471
  $sap->add_setting(
472
  'bpfwp-settings',
473
  'bpfwp-contact',
544
  )
545
  );
546
 
547
+ $sap->add_setting(
548
+ 'bpfwp-settings',
549
+ 'bpfwp-schedule',
550
+ 'scheduler',
551
+ array(
552
+ 'id' => 'exceptions',
553
+ 'title' => __( 'Exceptions', 'business-profile' ),
554
+ 'description' => __( "Define special opening hours for holidays, events or other needs. Leave the time empty if you're closed all day.", 'business-profile' ),
555
+ 'time_format' => _x( 'h:i A', 'Time format displayed in the opening hours setting panel in your admin area. Must match formatting rules at http://amsul.ca/pickadate.js/time.htm#formats', 'business-profile' ),
556
+ 'date_format' => _x( 'mmmm d, yyyy', 'Date format displayed in the opening hours setting panel in your admin area. Must match formatting rules at http://amsul.ca/pickadate.js/date.htm#formatting-rules', 'business-profile' ),
557
+ 'disable_weekdays' => true,
558
+ 'disable_weeks' => true,
559
+ 'strings' => array(
560
+ 'add_rule' => __( 'Add another exception', 'business-profile' ),
561
+ 'weekly' => _x( 'Weekly', 'Format of a scheduling rule', 'business-profile' ),
562
+ 'monthly' => _x( 'Monthly', 'Format of a scheduling rule', 'business-profile' ),
563
+ 'date' => _x( 'Date', 'Format of a scheduling rule', 'business-profile' ),
564
+ 'weekdays' => _x( 'Days of the week', 'Label for selecting days of the week in a scheduling rule', 'business-profile' ),
565
+ 'month_weeks' => _x( 'Weeks of the month', 'Label for selecting weeks of the month in a scheduling rule', 'business-profile' ),
566
+ 'date_label' => _x( 'Date', 'Label to select a date for a scheduling rule', 'business-profile' ),
567
+ 'time_label' => _x( 'Time', 'Label to select a time slot for a scheduling rule', 'business-profile' ),
568
+ 'allday' => _x( 'All day', 'Label to set a scheduling rule to last all day', 'business-profile' ),
569
+ 'start' => _x( 'Start', 'Label for the starting time of a scheduling rule', 'business-profile' ),
570
+ 'end' => _x( 'End', 'Label for the ending time of a scheduling rule', 'business-profile' ),
571
+ 'set_time_prompt' => _x( 'All day long. Want to %sset a time slot%s?', 'Prompt displayed when a scheduling rule is set without any time restrictions', 'business-profile' ),
572
+ 'toggle' => _x( 'Open and close this rule', 'Toggle a scheduling rule open and closed', 'business-profile' ),
573
+ 'delete' => _x( 'Delete rule', 'Delete a scheduling rule', 'business-profile' ),
574
+ 'delete_schedule' => __( 'Delete scheduling rule', 'business-profile' ),
575
+ 'never' => _x( 'Never', 'Brief default description of a scheduling rule when no weekdays or weeks are included in the rule', 'business-profile' ),
576
+ 'weekly_always' => _x( 'Every day', 'Brief default description of a scheduling rule when all the weekdays/weeks are included in the rule', 'business-profile' ),
577
+ 'monthly_weekdays' => _x( '%s on the %s week of the month', 'Brief default description of a scheduling rule when some weekdays are included on only some weeks of the month. %s should be left alone and will be replaced by a comma-separated list of days and weeks in the following format: M, T, W on the first, second week of the month', 'business-profile' ),
578
+ 'monthly_weeks' => _x( '%s week of the month', 'Brief default description of a scheduling rule when some weeks of the month are included but all or no weekdays are selected. %s should be left alone and will be replaced by a comma-separated list of weeks in the following format: First, second week of the month', 'business-profile' ),
579
+ 'all_day' => _x( 'Closed all day', 'Brief default description of a scheduling exception when no times are set', 'business-profile' ),
580
+ 'before' => _x( 'Ends at', 'Brief default description of a scheduling rule when an end time is set but no start time. If the end time is 6pm, it will read: Ends at 6pm', 'business-profile' ),
581
+ 'after' => _x( 'Starts at', 'Brief default description of a scheduling rule when a start time is set but no end time. If the start time is 6pm, it will read: Starts at 6pm', 'business-profile' ),
582
+ 'separator' => _x( '&mdash;', 'Separator between times of a scheduling rule', 'business-profile' ),
583
+ ),
584
+ )
585
+ );
586
+
587
  $sap->add_section(
588
  'bpfwp-settings',
589
  array(
includes/template-functions.php CHANGED
@@ -110,7 +110,8 @@ if ( ! function_exists( 'bpwfwp_print_contact_card' ) ) {
110
  'address' => 'bpwfwp_print_address',
111
  'phone' => 'bpwfwp_print_phone',
112
  'contact' => 'bpwfwp_print_contact',
113
- 'opening_hours' => 'bpwfwp_print_opening_hours',
 
114
  'map' => 'bpwfwp_print_map',
115
  'parent_organization' => 'bpfwp_print_parent_organization',
116
  )
@@ -161,29 +162,31 @@ if ( ! function_exists( 'bpwfwp_print_name' ) ) {
161
  * @since 0.0.1
162
  * @access public
163
  * @param string $location The location associated with the name.
164
- * @return void
165
  */
166
  function bpwfwp_print_name( $location = false ) {
167
 
 
 
168
  if ( bpfwp_get_display( 'show_name' ) ) :
169
  ?>
170
- <div class="bp-name" itemprop="name">
171
  <?php echo esc_attr( bpfwp_setting( 'name', $location ) ); ?>
172
  </div>
173
-
174
- <?php else : ?>
175
- <meta itemprop="name" content="<?php echo esc_attr( bpfwp_setting( 'name', $location ) ); ?>">
176
-
177
  <?php endif; ?>
178
 
 
 
179
  <?php if ( empty( $location ) ) : ?>
180
- <meta itemprop="description" content="<?php echo esc_attr( get_bloginfo( 'description' ) ) ?>">
181
- <meta itemprop="url" content="<?php echo esc_url( get_bloginfo( 'url' ) ); ?>">
182
 
183
  <?php else : ?>
184
- <meta itemprop="url" content="<?php echo esc_url( get_permalink( $location ) ); ?>">
185
 
186
  <?php endif;
 
 
187
  }
188
  }
189
 
@@ -194,18 +197,25 @@ if ( ! function_exists( 'bpwfwp_print_address' ) ) {
194
  * @since 0.0.1
195
  * @access public
196
  * @param string $location The location associated with the address.
197
- * @return string|void Returns an empty string if no address exists.
198
  */
199
  function bpwfwp_print_address( $location = false ) {
200
 
 
 
201
  $address = bpfwp_setting( 'address', $location );
202
 
203
  if ( empty( $address['text'] ) ) {
204
- return '';
205
  }
206
  ?>
207
 
208
- <meta itemprop="address" content="<?php echo esc_attr( $address['text'] ); ?>">
 
 
 
 
 
209
 
210
  <?php if ( bpfwp_get_display( 'show_address' ) ) : ?>
211
  <div class="bp-address">
@@ -219,6 +229,7 @@ if ( ! function_exists( 'bpwfwp_print_address' ) ) {
219
  </div>
220
  <?php endif;
221
 
 
222
  }
223
  }
224
 
@@ -229,27 +240,34 @@ if ( ! function_exists( 'bpwfwp_print_phone' ) ) {
229
  * @since 0.0.1
230
  * @access public
231
  * @param string $location The location associated with the phone.
232
- * @return string|void Returns an empty string if no phone exists.
233
  */
234
  function bpwfwp_print_phone( $location = false ) {
235
 
 
 
236
  $phone = bpfwp_setting( 'phone', $location );
 
 
 
 
 
237
 
238
  if ( empty( $phone ) ) {
239
  return '';
240
  }
241
 
242
- if ( bpfwp_get_display( 'show_phone' ) ) :
243
- ?>
244
 
245
- <div class="bp-phone" itemprop="telephone">
246
- <a href="tel:<?php echo bpfwp_setting( 'phone', $location ); ?>"><?php echo bpfwp_setting( 'phone', $location ); ?></a>
247
  </div>
248
 
249
- <?php else : ?>
250
- <meta itemprop="telephone" content="<?php echo esc_attr( bpfwp_setting( 'phone', $location ) ); ?>">
251
-
252
  <?php endif;
 
 
 
 
253
  }
254
  }
255
 
@@ -260,40 +278,48 @@ if ( ! function_exists( 'bpwfwp_print_contact' ) ) {
260
  * @since 0.0.1
261
  * @access public
262
  * @param string $location The location associated with the contact.
263
- * @return string|void Returns an empty string if no contact exists.
264
  */
265
  function bpwfwp_print_contact( $location = false ) {
266
 
 
 
267
  $email = bpfwp_setting( 'contact-email', $location );
 
268
  if ( ! empty( $email ) ) :
269
  $antispam_email = antispambot( $email );
270
 
271
- if ( ! bpfwp_get_display( 'show_contact' ) ) :
272
- ?>
273
- <meta itemprop="email" content="<?php echo esc_attr( $antispam_email ); ?>">
274
 
275
- <?php else : ?>
276
-
277
- <div class="bp-contact bp-contact-email" itemprop="email" content="<?php echo esc_attr( $antispam_email ); ?>">
278
  <a href="mailto:<?php echo esc_attr( $antispam_email ); ?>"><?php echo $antispam_email; ?></a>
279
  </div>
280
 
281
  <?php endif; ?>
282
 
 
 
283
  <?php
284
- return;
285
  endif;
286
 
287
  $contact = bpfwp_setting( 'contact-page', $location );
288
  if ( ! empty( $contact ) && bpfwp_get_display( 'show_contact' ) ) :
289
  ?>
290
 
291
- <div class="bp-contact bp-contact-page" itemprop="ContactPoint" itemscope itemtype="http://schema.org/ContactPoint">
292
- <meta itemprop="contactType" content="customer support">
293
- <a href="<?php echo get_permalink( $contact ); ?>" itemprop="url" content="<?php echo esc_attr( get_permalink( $contact ) ); ?>"><?php _e( 'Contact', 'business-profile' ); ?></a>
294
  </div>
295
 
296
- <?php endif;
 
 
 
 
 
 
 
 
297
  }
298
  }
299
 
@@ -314,8 +340,8 @@ if ( ! function_exists( 'bpwfwp_print_opening_hours' ) ) {
314
  return '';
315
  }
316
 
317
- // Print the metatags with proper schema formatting.
318
- bpfwp_print_opening_hours_metatag( $hours );
319
 
320
  if ( ! bpfwp_get_display( 'show_opening_hours' ) ) {
321
  return;
@@ -381,7 +407,7 @@ if ( ! function_exists( 'bpwfwp_print_opening_hours' ) ) {
381
  </div>
382
 
383
  <?php
384
- return;
385
  endif; // Brief opening hours.
386
 
387
  $weekdays_display = array(
@@ -459,18 +485,23 @@ if ( ! function_exists( 'bpwfwp_print_opening_hours' ) ) {
459
  $template->get_template_part( 'opening-hours' );
460
  }
461
  }
 
 
462
  }
463
  }
464
 
465
- if ( ! function_exists( 'bpfwp_print_opening_hours_metatag' ) ) {
466
  /**
467
- * Print a schema metatags with the opening hours
468
  *
 
469
  * @access public
470
  * @param array $hours A list of opening hours.
471
- * @return void
472
  */
473
- function bpfwp_print_opening_hours_metatag( $hours ) {
 
 
474
 
475
  $weekdays_schema = array(
476
  'monday' => 'Mo',
@@ -528,11 +559,148 @@ if ( ! function_exists( 'bpfwp_print_opening_hours_metatag' ) ) {
528
 
529
  $string .= ' ' . $start . '-' . $end;
530
  }
531
- echo '<meta itemprop="openingHours" content="' . esc_attr( $string ) . '">';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
532
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
533
  }
534
  }
535
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
536
  if ( ! function_exists( 'bpwfwp_print_map' ) ) {
537
  /**
538
  * Print a map to the address
@@ -540,10 +708,12 @@ if ( ! function_exists( 'bpwfwp_print_map' ) ) {
540
  * @since 0.0.1
541
  * @access public
542
  * @param string $location The location associated with the map.
543
- * @return string|void Returns an empty string if no map exists.
544
  */
545
  function bpwfwp_print_map( $location = false ) {
546
 
 
 
547
  $address = bpfwp_setting( 'address', $location );
548
 
549
  if ( empty( $address['text'] ) || ! bpfwp_get_display( 'show_map' ) ) {
@@ -589,9 +759,11 @@ if ( ! function_exists( 'bpwfwp_print_map' ) ) {
589
  }
590
  ?>
591
 
592
- <div id="bp-map-<?php echo $id; ?>" class="bp-map" itemprop="map" data-name="<?php echo esc_attr( bpfwp_setting( 'name', $location ) ); ?>" data-address="<?php echo esc_attr( $address['text'] ); ?>"<?php echo $attr; ?>></div>
593
 
594
  <?php
 
 
595
  }
596
  }
597
 
@@ -601,20 +773,50 @@ if ( ! function_exists( 'bpfwp_print_parent_organization' ) ) {
601
  *
602
  * @since 1.1
603
  * @access public
604
- * @return string|void Returns an empty string if no parent location exists.
605
  */
606
  function bpfwp_print_parent_organization() {
607
 
 
 
608
  $location = bpfwp_get_display( 'location' );
609
 
610
  if ( empty( $location ) ) {
611
  return '';
612
  }
613
 
614
- ?>
615
 
616
- <meta itemprop="parentOrganization" itemtype="http://schema.org/<?php echo esc_attr( bpfwp_setting( 'schema-type' ) ); ?>" content="<?php echo esc_attr( bpfwp_setting( 'name' ) ); ?>">
 
 
617
 
618
- <?php
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
619
  }
620
  }
110
  'address' => 'bpwfwp_print_address',
111
  'phone' => 'bpwfwp_print_phone',
112
  'contact' => 'bpwfwp_print_contact',
113
+ 'exceptions' => 'bpwfwp_print_exceptions',
114
+ 'opening_hours' => 'bpwfwp_print_opening_hours', // opening-hours
115
  'map' => 'bpwfwp_print_map',
116
  'parent_organization' => 'bpfwp_print_parent_organization',
117
  )
162
  * @since 0.0.1
163
  * @access public
164
  * @param string $location The location associated with the name.
165
+ * @return array
166
  */
167
  function bpwfwp_print_name( $location = false ) {
168
 
169
+ $return_data = array();
170
+
171
  if ( bpfwp_get_display( 'show_name' ) ) :
172
  ?>
173
+ <div class="bp-name">
174
  <?php echo esc_attr( bpfwp_setting( 'name', $location ) ); ?>
175
  </div>
 
 
 
 
176
  <?php endif; ?>
177
 
178
+ <?php $return_data['name'] = bpfwp_setting( 'name', $location ); ?>
179
+
180
  <?php if ( empty( $location ) ) : ?>
181
+ <?php $return_data['description'] = get_bloginfo( 'description' ); ?>
182
+ <?php $return_data['url'] = get_bloginfo( 'url' ); ?>
183
 
184
  <?php else : ?>
185
+ <?php $return_data['url'] = get_permalink( $location ); ?>
186
 
187
  <?php endif;
188
+
189
+ return $return_data;
190
  }
191
  }
192
 
197
  * @since 0.0.1
198
  * @access public
199
  * @param string $location The location associated with the address.
200
+ * @return array
201
  */
202
  function bpwfwp_print_address( $location = false ) {
203
 
204
+ $return_data = array();
205
+
206
  $address = bpfwp_setting( 'address', $location );
207
 
208
  if ( empty( $address['text'] ) ) {
209
+ return $return_data;
210
  }
211
  ?>
212
 
213
+ <?php
214
+ $return_data['address'] = array(
215
+ 'type' => 'PostalAddress',
216
+ 'name' => $address['text'],
217
+ );
218
+ ?>
219
 
220
  <?php if ( bpfwp_get_display( 'show_address' ) ) : ?>
221
  <div class="bp-address">
229
  </div>
230
  <?php endif;
231
 
232
+ return $return_data;
233
  }
234
  }
235
 
240
  * @since 0.0.1
241
  * @access public
242
  * @param string $location The location associated with the phone.
243
+ * @return array
244
  */
245
  function bpwfwp_print_phone( $location = false ) {
246
 
247
+ $return_data = array();
248
+
249
  $phone = bpfwp_setting( 'phone', $location );
250
+ $click_to_call_phone = bpfwp_setting( 'clickphone', $location );
251
+
252
+ if ( $click_to_call_phone == '' ) {
253
+ $click_to_call_phone = $phone;
254
+ }
255
 
256
  if ( empty( $phone ) ) {
257
  return '';
258
  }
259
 
260
+ if ( bpfwp_get_display( 'show_phone' ) ) : ?>
 
261
 
262
+ <div class="bp-phone">
263
+ <a href="tel:<?php echo $click_to_call_phone; ?>"><?php echo bpfwp_setting( 'phone', $location ); ?></a>
264
  </div>
265
 
 
 
 
266
  <?php endif;
267
+
268
+ $return_data['telephone'] = bpfwp_setting( 'phone', $location );
269
+
270
+ return $return_data;
271
  }
272
  }
273
 
278
  * @since 0.0.1
279
  * @access public
280
  * @param string $location The location associated with the contact.
281
+ * @return array
282
  */
283
  function bpwfwp_print_contact( $location = false ) {
284
 
285
+ $return_data = array();
286
+
287
  $email = bpfwp_setting( 'contact-email', $location );
288
+
289
  if ( ! empty( $email ) ) :
290
  $antispam_email = antispambot( $email );
291
 
292
+ if ( bpfwp_get_display( 'show_contact' ) ) : ?>
 
 
293
 
294
+ <div class="bp-contact bp-contact-email">
 
 
295
  <a href="mailto:<?php echo esc_attr( $antispam_email ); ?>"><?php echo $antispam_email; ?></a>
296
  </div>
297
 
298
  <?php endif; ?>
299
 
300
+ <?php $return_data['email'] = $antispam_email; ?>
301
+
302
  <?php
303
+ return $return_data;
304
  endif;
305
 
306
  $contact = bpfwp_setting( 'contact-page', $location );
307
  if ( ! empty( $contact ) && bpfwp_get_display( 'show_contact' ) ) :
308
  ?>
309
 
310
+ <div class="bp-contact bp-contact-page">
311
+ <a href="<?php echo get_permalink( $contact ); ?>"><?php _e( 'Contact', 'business-profile' ); ?></a>
 
312
  </div>
313
 
314
+ <?php
315
+ $return_data['ContactPoint'] = array(
316
+ 'contactType' => 'customer support',
317
+ 'url' => get_permalink( $contact ),
318
+ );
319
+
320
+ endif;
321
+
322
+ return $return_data;
323
  }
324
  }
325
 
340
  return '';
341
  }
342
 
343
+ // Get the opening hours in a returnable format
344
+ $return_data = bpfwp_get_opening_hours_array( $hours );
345
 
346
  if ( ! bpfwp_get_display( 'show_opening_hours' ) ) {
347
  return;
407
  </div>
408
 
409
  <?php
410
+ return $return_data;
411
  endif; // Brief opening hours.
412
 
413
  $weekdays_display = array(
485
  $template->get_template_part( 'opening-hours' );
486
  }
487
  }
488
+
489
+ return $return_data;
490
  }
491
  }
492
 
493
+ if ( ! function_exists( 'bpfwp_get_opening_hours_array' ) ) {
494
  /**
495
+ * Returns an array of opening hours, outputable for json+ld
496
  *
497
+ * @since 2.1.0
498
  * @access public
499
  * @param array $hours A list of opening hours.
500
+ * @return array
501
  */
502
+ function bpfwp_get_opening_hours_array( $hours ) {
503
+
504
+ $opening_hours = array();
505
 
506
  $weekdays_schema = array(
507
  'monday' => 'Mo',
559
 
560
  $string .= ' ' . $start . '-' . $end;
561
  }
562
+
563
+ $opening_hours[] = '"' . $string . '"';
564
+ }
565
+
566
+ return array( 'openingHours' => '[' . implode( ',', $opening_hours ) . ']' );
567
+ }
568
+ }
569
+
570
+ if ( ! function_exists( 'bpwfwp_print_exceptions' ) ) {
571
+ /**
572
+ * Print the exceptions, special opening hours or holidays.
573
+ *
574
+ * @since 2.1.0
575
+ * @access public
576
+ * @param string $location The location associated with the exceptions.
577
+ * @return string|void Returns an empty string if no exceptions exist.
578
+ */
579
+ function bpwfwp_print_exceptions( $location = false ) {
580
+ global $bpfwp_controller;
581
+
582
+ $exceptions = bpfwp_setting( 'exceptions', $location );
583
+
584
+ if ( empty( $exceptions ) ) {
585
+ return '';
586
+ }
587
+
588
+ // Print the metatags with proper schema formatting.
589
+ $return_data = bpfwp_get_exceptions_array( $exceptions );
590
+
591
+ if ( ! bpfwp_get_display( 'show_exceptions' ) ) {
592
+ return;
593
+ }
594
+
595
+ $date_format = get_option('date_format');
596
+
597
+ $data = array(
598
+ 'special_hours' => array(),
599
+ 'holiday' => array()
600
+ );
601
+
602
+ foreach ( $exceptions as $exception ) {
603
+
604
+ if ( array_key_exists( 'time', $exception ) ) {
605
+ // special opening-hours
606
+ $data['special_hours'][] = $exception;
607
+ }
608
+ else {
609
+ // holiday
610
+ $data['holiday'][] = $exception;
611
+ }
612
  }
613
+
614
+ if ( 0 < count( $data['holiday'] ) ) { ?>
615
+
616
+ <div class="bp-opening-hours holiday">
617
+ <span class="bp-title"><?php _e( 'Holidays', 'business-profile' ); ?></span>
618
+
619
+ <?php foreach ( $data['holiday'] as $exception ) { ?>
620
+
621
+ <?php $date = new DateTime($exception['date']); ?>
622
+
623
+ <div class="bp-date">
624
+ <span class="label"><?php echo $date->format( $date_format ); ?></span>
625
+ <span class="bp-times">
626
+ <span class="bp-time">
627
+ <?php _e( 'Closed', 'business-profile' ); ?>
628
+ </span>
629
+ </span>
630
+ </div>
631
+ <?php } ?>
632
+
633
+ </div>
634
+ <?php }
635
+
636
+ if ( 0 < count( $data['special_hours'] ) ) { ?>
637
+
638
+ <div class="bp-opening-hours special">
639
+ <span class="bp-title"><?php _e( 'Special Opening Hours', 'business-profile' ); ?></span>
640
+
641
+ <?php foreach ( $data['special_hours'] as $exception ) { ?>
642
+
643
+ <?php $date = new DateTime( $exception['date'] ); ?>
644
+
645
+ <div class="bp-date">
646
+ <span class="label"><?php echo $date->format( $date_format ); ?></span>
647
+ <span class="bp-times">
648
+ <span class="bp-time">
649
+ <?php echo $exception['time']['start'] . ' – ' . $exception['time']['end']; ?>
650
+ </span>
651
+ </span>
652
+ </div>
653
+ <?php } ?>
654
+
655
+ </div>
656
+ <?php }
657
+
658
+ return $return_data;
659
  }
660
  }
661
 
662
+ if ( ! function_exists( 'bpfwp_get_exceptions_array' ) ) {
663
+ /**
664
+ * Returns an array of exception rules, outputable for json+ld
665
+ *
666
+ * @since 2.1.0
667
+ * @access public
668
+ * @param array $exceptions A list of opening hours.
669
+ * @return array
670
+ */
671
+ function bpfwp_get_exceptions_array( $exceptions ) {
672
+
673
+ $result = array();
674
+
675
+ if ( is_array( $exceptions ) ) {
676
+
677
+ foreach ( $exceptions as $exception ) {
678
+ // Special opening-hours
679
+ // @type: specialOpeningHoursSpecification
680
+ $special_hours = array(
681
+ 'type' => 'specialOpeningHoursSpecification',
682
+ 'validFrom' => $exception['date'],
683
+ 'validThrough' => $exception['date']
684
+ );
685
+
686
+ if ( array_key_exists( 'time', $exception ) ) {
687
+ $special_hours['opens'] = $exception['time']['start'];
688
+ $special_hours['closes'] = $exception['time']['end'];
689
+ }
690
+ else {
691
+ // without opens it is considered as close - holiday
692
+ }
693
+
694
+ $result[] = $special_hours;
695
+ }
696
+ }
697
+
698
+ return $result;
699
+ }
700
+ }
701
+
702
+
703
+
704
  if ( ! function_exists( 'bpwfwp_print_map' ) ) {
705
  /**
706
  * Print a map to the address
708
  * @since 0.0.1
709
  * @access public
710
  * @param string $location The location associated with the map.
711
+ * @return array
712
  */
713
  function bpwfwp_print_map( $location = false ) {
714
 
715
+ $return_data = array();
716
+
717
  $address = bpfwp_setting( 'address', $location );
718
 
719
  if ( empty( $address['text'] ) || ! bpfwp_get_display( 'show_map' ) ) {
759
  }
760
  ?>
761
 
762
+ <div id="bp-map-<?php echo $id; ?>" class="bp-map" data-name="<?php echo esc_attr( bpfwp_setting( 'name', $location ) ); ?>" data-address="<?php echo esc_attr( $address['text'] ); ?>"<?php echo $attr; ?>></div>
763
 
764
  <?php
765
+
766
+ return $return_data;
767
  }
768
  }
769
 
773
  *
774
  * @since 1.1
775
  * @access public
776
+ * @return array
777
  */
778
  function bpfwp_print_parent_organization() {
779
 
780
+ $return_data = array();
781
+
782
  $location = bpfwp_get_display( 'location' );
783
 
784
  if ( empty( $location ) ) {
785
  return '';
786
  }
787
 
788
+ $return_data['parentOrganization'] = bpfwp_setting( 'name' );
789
 
790
+ return $return_data;
791
+ }
792
+ }
793
 
794
+ if ( ! function_exists( 'bpfwp_json_ld_contact_print' ) ) {
795
+ /**
796
+ * Recursively print out an array of $key => $value pairs of json+ld data
797
+ *
798
+ * @since 2.1.0
799
+ * @access public
800
+ * @param mixed $json_key, an int for array data or the parameter type for json data
801
+ * @param mixed $json_data, print or recurse through it if array
802
+ * @return void
803
+ */
804
+ function bpfwp_json_ld_contact_print( $json_key, $json_data ) {
805
+
806
+ $return_string = '';
807
+
808
+ if ( is_array( $json_data ) ) {
809
+ if ( $json_key ) { $return_string .= '"' . $json_key . '": {'; }
810
+ foreach ( $json_data as $key => $data ) { $return_string .= bpfwp_json_ld_contact_print( $key, $data ); }
811
+ if ( $json_key ) { $return_string = trim ( $return_string, ',' ) . '},'; }
812
+ }
813
+ elseif ( $json_key == 'openingHours' ) {
814
+ $return_string .= '"' . $json_key . '": ' . $json_data . ',';
815
+ }
816
+ else {
817
+ $return_string .= '"' . ( $json_key == 'type' ? '@' : '' ) . $json_key . '": "' . $json_data . '",';
818
+ }
819
+
820
+ return $return_string;
821
  }
822
  }
languages/business-profile-de_DE.mo ADDED
Binary file
languages/business-profile-de_DE.po ADDED
@@ -0,0 +1,688 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # Copyright (C) 2019 Theme of the Crop
2
+ # This file is distributed under the GNU General Public License v2.0 or later.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: Business Profile 1.2.4\n"
6
+ "Report-Msgid-Bugs-To: https://themeofthecrop.com\n"
7
+ "POT-Creation-Date: 2019-03-18 10:39:33+00:00\n"
8
+ "MIME-Version: 1.0\n"
9
+ "Content-Type: text/plain; charset=UTF-8\n"
10
+ "Content-Transfer-Encoding: 8bit\n"
11
+ "PO-Revision-Date: 2020-09-25 13:20+0200\n"
12
+ "Language-Team: \n"
13
+ "X-Generator: Poedit 2.2.4\n"
14
+ "Last-Translator: \n"
15
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
16
+ "Language: de_DE\n"
17
+
18
+ #: business-profile.php:229
19
+ msgid "View the help documentation for Business Profile"
20
+ msgstr "Sehen Sie sich die Hilfe-Dokumentation für Business Profile an"
21
+
22
+ #: business-profile.php:230
23
+ msgid "Help"
24
+ msgstr "Hilfe"
25
+
26
+ #: includes/class-blocks.php:139
27
+ msgid "Use the main Business Profile"
28
+ msgstr "Verwenden des Hauptgeschäftsprofils"
29
+
30
+ #: includes/class-contact-card-widget.php:39
31
+ msgid "Show Name"
32
+ msgstr "Name anzeigen"
33
+
34
+ #: includes/class-contact-card-widget.php:40
35
+ msgid "Show Address"
36
+ msgstr "Adresse anzeigen"
37
+
38
+ #: includes/class-contact-card-widget.php:41
39
+ msgid "Show link to get directions on Google Maps"
40
+ msgstr "Zeige den Link zur Wegbeschreibung auf Google Maps"
41
+
42
+ #: includes/class-contact-card-widget.php:42
43
+ msgid "Show Phone number"
44
+ msgstr "Telefonnummer anzeigen"
45
+
46
+ #: includes/class-contact-card-widget.php:43
47
+ msgid "Show contact details"
48
+ msgstr "Kontaktdaten anzeigen"
49
+
50
+ #: includes/class-contact-card-widget.php:44
51
+ msgid "Show Opening Hours"
52
+ msgstr "Öffnungszeiten anzeigen"
53
+
54
+ #: includes/class-contact-card-widget.php:45
55
+ msgid "Show brief opening hours on one line"
56
+ msgstr "Kurze Öffnungszeiten auf einer Linie anzeigen"
57
+
58
+ #: includes/class-contact-card-widget.php:46
59
+ msgid "Show Google Map"
60
+ msgstr "Google Map anzeigen"
61
+
62
+ #: includes/class-contact-card-widget.php:52
63
+ msgid "Contact Card"
64
+ msgstr "Visitenkarte"
65
+
66
+ #: includes/class-contact-card-widget.php:53
67
+ msgid ""
68
+ "Display a contact card with your name, address, phone number, opening hours "
69
+ "and map."
70
+ msgstr ""
71
+ "Zeigen Sie eine Kontaktkarte mit Ihrem Namen, Adresse, Telefonnummer, "
72
+ "Öffnungszeiten und Karte an."
73
+
74
+ #: includes/class-contact-card-widget.php:91
75
+ msgid "Title"
76
+ msgstr "Titel"
77
+
78
+ #: includes/class-contact-card-widget.php:117
79
+ #: includes/class-custom-post-types.php:60
80
+ msgid "Location"
81
+ msgstr "Standort"
82
+
83
+ #: includes/class-contact-card-widget.php:119
84
+ msgid "Use Primary Business Profile"
85
+ msgstr "Hauptgeschäfts-Profil verwenden"
86
+
87
+ #: includes/class-custom-post-types.php:59
88
+ #: includes/class-custom-post-types.php:61
89
+ #: includes/class-custom-post-types.php:62 includes/class-settings.php:212
90
+ #: includes/class-settings.php:213
91
+ msgid "Locations"
92
+ msgstr "Standorte"
93
+
94
+ #: includes/class-custom-post-types.php:63
95
+ msgid "Add New"
96
+ msgstr "Neuer Seminare"
97
+
98
+ #: includes/class-custom-post-types.php:64
99
+ msgid "Add New Location"
100
+ msgstr "Neuen Standort hinzufügen"
101
+
102
+ #: includes/class-custom-post-types.php:65
103
+ msgid "Edit Location"
104
+ msgstr "Standort bearbeiten"
105
+
106
+ #: includes/class-custom-post-types.php:66
107
+ msgid "New Location"
108
+ msgstr "Neuer Standort"
109
+
110
+ #: includes/class-custom-post-types.php:67
111
+ msgid "View Location"
112
+ msgstr "Standort anzeigen"
113
+
114
+ #: includes/class-custom-post-types.php:68
115
+ msgid "View Locations"
116
+ msgstr "Standorte ansehen"
117
+
118
+ #: includes/class-custom-post-types.php:69
119
+ msgid "Search Locations"
120
+ msgstr "Standorte durchsuchen"
121
+
122
+ #: includes/class-custom-post-types.php:70
123
+ msgid "No locations found"
124
+ msgstr "Keine Standorte gefunden"
125
+
126
+ #: includes/class-custom-post-types.php:71
127
+ msgid "No locations found in trash"
128
+ msgstr "Keine Standorte im Papierkorb gefunden"
129
+
130
+ #: includes/class-custom-post-types.php:72
131
+ msgid "All Locations"
132
+ msgstr "Alle Standorte"
133
+
134
+ #: includes/class-custom-post-types.php:149 includes/class-settings.php:262
135
+ msgid "Schema Type"
136
+ msgstr "Schema Typ"
137
+
138
+ #: includes/class-custom-post-types.php:160
139
+ msgid "Contact Details"
140
+ msgstr "Kontaktdetails"
141
+
142
+ #: includes/class-custom-post-types.php:170
143
+ #: includes/class-custom-post-types.php:413 includes/class-settings.php:432
144
+ #: templates/opening-hours.php:21
145
+ msgid "Opening Hours"
146
+ msgstr "Öffnungszeiten"
147
+
148
+ #: includes/class-custom-post-types.php:231
149
+ msgid "Schema type"
150
+ msgstr "Schema Typ"
151
+
152
+ #: includes/class-custom-post-types.php:241 includes/class-settings.php:263
153
+ msgid ""
154
+ "Select the option that best describes your business to improve how search "
155
+ "engines understand your website."
156
+ msgstr ""
157
+ "Wählen Sie die Option, die am besten Ihr Geschäft beschreibt um damit "
158
+ "Suchmaschinen Ihre Website besser verstehen können."
159
+
160
+ #: includes/class-custom-post-types.php:270
161
+ #: includes/class-custom-post-types.php:294 includes/class-settings.php:329
162
+ msgid "No map coordinates set."
163
+ msgstr "Keine Karten Koordinaten festgelegt."
164
+
165
+ #: includes/class-custom-post-types.php:272 includes/class-settings.php:330
166
+ msgid "Requesting new coordinates"
167
+ msgstr "Abfrage neuer Koordinaten"
168
+
169
+ #: includes/class-custom-post-types.php:273 includes/class-settings.php:331
170
+ msgid "Select a match below"
171
+ msgstr "Wählen Sie unten eine Übereinstimmung aus"
172
+
173
+ #: includes/class-custom-post-types.php:274
174
+ #: includes/class-custom-post-types.php:297 includes/class-settings.php:332
175
+ msgid "View"
176
+ msgstr "Anzeigen"
177
+
178
+ #: includes/class-custom-post-types.php:275 includes/class-settings.php:336
179
+ msgid "Error"
180
+ msgstr "Fehler"
181
+
182
+ #: includes/class-custom-post-types.php:276 includes/class-settings.php:337
183
+ msgid ""
184
+ "Invalid request. Be sure to fill out the address field before retrieving "
185
+ "coordinates."
186
+ msgstr ""
187
+ "Ungültige Anforderung. Achten Sie darauf, das Adressfeld auszufüllen, bevor "
188
+ "Sie Koordinaten abrufen."
189
+
190
+ #: includes/class-custom-post-types.php:277 includes/class-settings.php:338
191
+ msgid "Request denied."
192
+ msgstr "Anfrage verweigert."
193
+
194
+ #: includes/class-custom-post-types.php:278 includes/class-settings.php:339
195
+ msgid "Request denied because you are over your request quota."
196
+ msgstr "Anfrage wurde verweigert, da Sie Ihr Kontingent erreicht haben."
197
+
198
+ #: includes/class-custom-post-types.php:279
199
+ msgid "Nothing was found at that address."
200
+ msgstr "An dieser Adresse wurde nichts gefunden."
201
+
202
+ #: includes/class-custom-post-types.php:304 includes/class-settings.php:333
203
+ msgid "Retrieve map coordinates"
204
+ msgstr "Abrufen der Karten-Koordinaten"
205
+
206
+ #: includes/class-custom-post-types.php:308 includes/class-settings.php:334
207
+ msgid "Remove map coordinates"
208
+ msgstr "Karten-Koordinaten entfernen"
209
+
210
+ #: includes/class-custom-post-types.php:336 includes/class-settings.php:390
211
+ msgid "Contact Page"
212
+ msgstr "Kontaktseite"
213
+
214
+ #: includes/class-custom-post-types.php:350 includes/class-settings.php:409
215
+ msgid "Email Address (optional)"
216
+ msgstr "E-Mail-Adresse (optional)"
217
+
218
+ #: includes/class-custom-post-types.php:357
219
+ msgid "Phone Number"
220
+ msgstr "Telefonnummer"
221
+
222
+ #: includes/class-custom-post-types.php:414 includes/class-settings.php:433
223
+ msgid "Define your weekly opening hours by adding scheduling rules."
224
+ msgstr ""
225
+ "Definieren Sie Ihre wöchentlichen Öffnungszeiten durch Hinzufügen von "
226
+ "Planungsregeln."
227
+
228
+ #: includes/class-custom-post-types.php:429 includes/class-settings.php:448
229
+ msgid "Add another opening time"
230
+ msgstr "Fügen Sie eine weitere Öffnungszeit hinzu"
231
+
232
+ #: includes/class-custom-post-types.php:443 includes/class-settings.php:462
233
+ msgid "Delete scheduling rule"
234
+ msgstr "Terminierungsregel löschen"
235
+
236
+ #. Plugin Name of the plugin/theme
237
+ msgid "Business Profile"
238
+ msgstr "Geschäftsprofil"
239
+
240
+ #: includes/class-settings.php:252
241
+ msgid "Search Engine Optimization"
242
+ msgstr "Search Engine Optimization"
243
+
244
+ #: includes/class-settings.php:279
245
+ msgid "Image"
246
+ msgstr "Bild"
247
+
248
+ #: includes/class-settings.php:280
249
+ msgid ""
250
+ "Google requires you provide an image to display with your local business "
251
+ "search profile."
252
+ msgstr ""
253
+ "Google erfordert, dass Sie ein Bild zur Anzeige mit Ihrem lokalen "
254
+ "Geschäftssuchprofil bereitstellen."
255
+
256
+ #: includes/class-settings.php:282
257
+ msgid "Add Image"
258
+ msgstr "Bild hinzufügen"
259
+
260
+ #: includes/class-settings.php:283
261
+ msgid "Change Image"
262
+ msgstr "Bild ändern"
263
+
264
+ #: includes/class-settings.php:284
265
+ msgid "Remove Image"
266
+ msgstr "Bild entfernen"
267
+
268
+ #: includes/class-settings.php:297
269
+ msgid "Contact Information"
270
+ msgstr "Kontaktinformationen"
271
+
272
+ #: includes/class-settings.php:307
273
+ msgid "Name"
274
+ msgstr "Name"
275
+
276
+ #: includes/class-settings.php:308
277
+ msgid ""
278
+ "Enter the name of your business if it is different than the website name."
279
+ msgstr ""
280
+ "Geben Sie den Namen Ihres Unternehmens ein, wenn er sich vom Website-Name "
281
+ "unterscheidet."
282
+
283
+ #: includes/class-settings.php:324
284
+ msgid "Address"
285
+ msgstr "Straße und Hausnummer"
286
+
287
+ #: includes/class-settings.php:335
288
+ msgid "Try again?"
289
+ msgstr "Nochmal versuchen?"
290
+
291
+ #: includes/class-settings.php:340
292
+ msgid "Nothing was found at that address"
293
+ msgstr "Unter dieser Adresse wurde nichts gefunden."
294
+
295
+ #: includes/class-settings.php:355
296
+ msgid "Google Maps API Key"
297
+ msgstr "Google Maps API-Schlüssel"
298
+
299
+ #: includes/class-settings.php:357
300
+ msgid ""
301
+ "Google requires an API key to use their maps. %sGet an API key%s. A full "
302
+ "walk-through is available in the %sdocumentiaton%s."
303
+ msgstr ""
304
+ "Google setzt einen API Key vorraus um ihre Maps zu nutzen. %sAPI Key "
305
+ "erhalten %s. Ein kompletter Walk-Through ist in der %sDokumentation%s zu "
306
+ "finden."
307
+
308
+ #: includes/class-settings.php:376
309
+ msgid "Phone"
310
+ msgstr "Telefon"
311
+
312
+ #: includes/class-settings.php:391
313
+ msgid ""
314
+ "Select a page on your site where users can reach you, such as a contact form."
315
+ msgstr ""
316
+ "Wählen Sie eine Seite auf Ihrer Website, wie z. B. ein Kontaktformular über "
317
+ "dass Besucher sie erreichen können."
318
+
319
+ #: includes/class-settings.php:410
320
+ msgid ""
321
+ "Enter an email address only if you want to display this publicly. Showing "
322
+ "your email address on your site may cause you to receive excessive spam."
323
+ msgstr ""
324
+ "Geben Sie eine E-Mail Adresse aber nur dann, wenn Sie diese öffentlich "
325
+ "anzeigen möchten. Durch ihre E-Mail Adresse öffentlich auf der Homepage kann "
326
+ "es passieren, dass sie übermäßig viel Spam erhalten."
327
+
328
+ #: includes/class-settings.php:422
329
+ msgid "Schedule"
330
+ msgstr "Termine"
331
+
332
+ #: includes/class-settings.php:482 includes/class-settings.php:492
333
+ #, fuzzy
334
+ msgid "Multiple Locations"
335
+ msgstr "Mehrere Standorte"
336
+
337
+ #: includes/class-settings.php:493
338
+ msgid "Enable support for multiple business locations."
339
+ msgstr "Aktivieren Sie die Unterstützung für mehrere Standorte."
340
+
341
+ #: includes/deprecated/class-integrations.php:147
342
+ msgid "Book a table"
343
+ msgstr "Einen Tisch reservieren"
344
+
345
+ #: includes/deprecated/class-integrations.php:170
346
+ #: includes/deprecated/class-integrations.php:173
347
+ msgid "Show book a table link"
348
+ msgstr "Zeige den Link zum Tisch buchen an."
349
+
350
+ #: includes/template-functions.php:218
351
+ msgid "Get directions"
352
+ msgstr "Route berechnen"
353
+
354
+ #: includes/template-functions.php:293
355
+ msgid "Contact"
356
+ msgstr "Kontakt"
357
+
358
+ #: includes/template-functions.php:341
359
+ msgid "Mo"
360
+ msgstr "Mo"
361
+
362
+ #: includes/template-functions.php:342
363
+ msgid "Tu"
364
+ msgstr "Di"
365
+
366
+ #: includes/template-functions.php:343
367
+ msgid "We"
368
+ msgstr "Mi"
369
+
370
+ #: includes/template-functions.php:344
371
+ msgid "Th"
372
+ msgstr "Do"
373
+
374
+ #: includes/template-functions.php:345
375
+ msgid "Fr"
376
+ msgstr "Fr"
377
+
378
+ #: includes/template-functions.php:346
379
+ msgid "Sa"
380
+ msgstr "Sa"
381
+
382
+ #: includes/template-functions.php:347
383
+ msgid "Su"
384
+ msgstr "So"
385
+
386
+ #: includes/template-functions.php:388
387
+ msgid "Monday"
388
+ msgstr "Montag"
389
+
390
+ #: includes/template-functions.php:389
391
+ msgid "Tuesday"
392
+ msgstr "Dienstag"
393
+
394
+ #: includes/template-functions.php:390
395
+ msgid "Wednesday"
396
+ msgstr "Mittwoch"
397
+
398
+ #: includes/template-functions.php:391
399
+ msgid "Thursday"
400
+ msgstr "Donnerstag"
401
+
402
+ #: includes/template-functions.php:392
403
+ msgid "Friday"
404
+ msgstr "Freitag"
405
+
406
+ #: includes/template-functions.php:393
407
+ msgid "Saturday"
408
+ msgstr "Samstag"
409
+
410
+ #: includes/template-functions.php:394
411
+ msgid "Sunday"
412
+ msgstr "Sonntag"
413
+
414
+ #: includes/template-functions.php:406
415
+ msgid "Open"
416
+ msgstr "Offen"
417
+
418
+ #: includes/template-functions.php:418
419
+ msgid "Open until "
420
+ msgstr "Geöffnet bis"
421
+
422
+ #: includes/template-functions.php:420
423
+ msgid "Open from "
424
+ msgstr "Geöffnet von"
425
+
426
+ #: includes/template-functions.php:442
427
+ msgid "Closed"
428
+ msgstr "Geschlossen"
429
+
430
+ #: includes/template-functions.php:566
431
+ msgid "Get Directions"
432
+ msgstr "Routenplaner"
433
+
434
+ #: lib/simple-admin-pages/classes/AdminPage.class.php:173
435
+ msgid "You do not have sufficient permissions to access this page."
436
+ msgstr ""
437
+ "Du hast nicht die erforderlichen Rechte, um auf diese Seite zuzugreifen."
438
+
439
+ #. Author URI of the plugin/theme
440
+ msgid "http://themeofthecrop.com"
441
+ msgstr "http://themeofthecrop.com"
442
+
443
+ #. Description of the plugin/theme
444
+ msgid ""
445
+ "Contact information, Google Maps and opening hours made easy for businesses."
446
+ msgstr ""
447
+ "Kontakt-Information, Google Maps und Öffnungszeiten einfach gemacht für "
448
+ "Geschäfte/Firmen."
449
+
450
+ #. Author of the plugin/theme
451
+ msgid "Theme of the Crop"
452
+ msgstr "Theme of the Crop"
453
+
454
+ #: includes/class-custom-post-types.php:271
455
+ #: includes/class-custom-post-types.php:296 includes/class-settings.php:328
456
+ msgctxt "separates latitude and longitude"
457
+ msgid ", "
458
+ msgstr ", "
459
+
460
+ #: includes/class-custom-post-types.php:306 includes/class-settings.php:327
461
+ msgctxt "separator between admin action links in address component"
462
+ msgid " | "
463
+ msgstr " | "
464
+
465
+ #: includes/class-custom-post-types.php:416 includes/class-settings.php:435
466
+ msgctxt "Monday abbreviation"
467
+ msgid "Mo"
468
+ msgstr "Mo"
469
+
470
+ #: includes/class-custom-post-types.php:417 includes/class-settings.php:436
471
+ msgctxt "Tuesday abbreviation"
472
+ msgid "Tu"
473
+ msgstr "Di"
474
+
475
+ #: includes/class-custom-post-types.php:418 includes/class-settings.php:437
476
+ msgctxt "Wednesday abbreviation"
477
+ msgid "We"
478
+ msgstr "Mi"
479
+
480
+ #: includes/class-custom-post-types.php:419 includes/class-settings.php:438
481
+ msgctxt "Thursday abbreviation"
482
+ msgid "Th"
483
+ msgstr "Do"
484
+
485
+ #: includes/class-custom-post-types.php:420 includes/class-settings.php:439
486
+ msgctxt "Friday abbreviation"
487
+ msgid "Fr"
488
+ msgstr "Fr"
489
+
490
+ #: includes/class-custom-post-types.php:421 includes/class-settings.php:440
491
+ msgctxt "Saturday abbreviation"
492
+ msgid "Sa"
493
+ msgstr "Sa"
494
+
495
+ #: includes/class-custom-post-types.php:422 includes/class-settings.php:441
496
+ msgctxt "Sunday abbreviation"
497
+ msgid "Su"
498
+ msgstr "So"
499
+
500
+ #: includes/class-custom-post-types.php:424 includes/class-settings.php:443
501
+ msgctxt ""
502
+ "Time format displayed in the opening hours setting panel in your admin area. "
503
+ "Must match formatting rules at http://amsul.ca/pickadate.js/time.htm#formats"
504
+ msgid "h:i A"
505
+ msgstr "h:i A"
506
+
507
+ #: includes/class-custom-post-types.php:425 includes/class-settings.php:444
508
+ msgctxt ""
509
+ "Date format displayed in the opening hours setting panel in your admin area. "
510
+ "Must match formatting rules at http://amsul.ca/pickadate.js/date."
511
+ "htm#formatting-rules"
512
+ msgid "mmmm d, yyyy"
513
+ msgstr "mmmm d, yyyy"
514
+
515
+ #: includes/class-custom-post-types.php:430 includes/class-settings.php:449
516
+ #, fuzzy
517
+ msgctxt "Format of a scheduling rule"
518
+ msgid "Weekly"
519
+ msgstr "wöchentlich"
520
+
521
+ #: includes/class-custom-post-types.php:431 includes/class-settings.php:450
522
+ #, fuzzy
523
+ msgctxt "Format of a scheduling rule"
524
+ msgid "Monthly"
525
+ msgstr "monatlich"
526
+
527
+ #: includes/class-custom-post-types.php:432 includes/class-settings.php:451
528
+ msgctxt "Format of a scheduling rule"
529
+ msgid "Date"
530
+ msgstr "Datum"
531
+
532
+ #: includes/class-custom-post-types.php:433 includes/class-settings.php:452
533
+ msgctxt "Label for selecting days of the week in a scheduling rule"
534
+ msgid "Days of the week"
535
+ msgstr "Wochentage"
536
+
537
+ #: includes/class-custom-post-types.php:434 includes/class-settings.php:453
538
+ msgctxt "Label for selecting weeks of the month in a scheduling rule"
539
+ msgid "Weeks of the month"
540
+ msgstr "Wochen im Monat"
541
+
542
+ #: includes/class-custom-post-types.php:435 includes/class-settings.php:454
543
+ msgctxt "Label to select a date for a scheduling rule"
544
+ msgid "Date"
545
+ msgstr "Datum"
546
+
547
+ #: includes/class-custom-post-types.php:436 includes/class-settings.php:455
548
+ msgctxt "Label to select a time slot for a scheduling rule"
549
+ msgid "Time"
550
+ msgstr "Zeit"
551
+
552
+ #: includes/class-custom-post-types.php:437 includes/class-settings.php:456
553
+ msgctxt "Label to set a scheduling rule to last all day"
554
+ msgid "All day"
555
+ msgstr "ganztags"
556
+
557
+ #: includes/class-custom-post-types.php:438 includes/class-settings.php:457
558
+ msgctxt "Label for the starting time of a scheduling rule"
559
+ msgid "Start"
560
+ msgstr "Start"
561
+
562
+ #: includes/class-custom-post-types.php:439 includes/class-settings.php:458
563
+ msgctxt "Label for the ending time of a scheduling rule"
564
+ msgid "End"
565
+ msgstr "Ende"
566
+
567
+ #: includes/class-custom-post-types.php:440 includes/class-settings.php:459
568
+ msgctxt ""
569
+ "Prompt displayed when a scheduling rule is set without any time restrictions"
570
+ msgid "All day long. Want to %sset a time slot%s?"
571
+ msgstr "Ganztägig. Möchten Sie %sÖffnungszeiten%s angeben?"
572
+
573
+ #: includes/class-custom-post-types.php:441 includes/class-settings.php:460
574
+ msgctxt "Toggle a scheduling rule open and closed"
575
+ msgid "Open and close this rule"
576
+ msgstr "Öffnen und Schliessen dieser Regel"
577
+
578
+ #: includes/class-custom-post-types.php:442 includes/class-settings.php:461
579
+ msgctxt "Delete a scheduling rule"
580
+ msgid "Delete rule"
581
+ msgstr "Regel löschen"
582
+
583
+ #: includes/class-custom-post-types.php:444 includes/class-settings.php:463
584
+ msgctxt ""
585
+ "Brief default description of a scheduling rule when no weekdays or weeks are "
586
+ "included in the rule"
587
+ msgid "Never"
588
+ msgstr "Niemals"
589
+
590
+ #: includes/class-custom-post-types.php:445 includes/class-settings.php:464
591
+ #, fuzzy
592
+ msgctxt ""
593
+ "Brief default description of a scheduling rule when all the weekdays/weeks "
594
+ "are included in the rule"
595
+ msgid "Every day"
596
+ msgstr "jeden Tag"
597
+
598
+ #: includes/class-custom-post-types.php:446 includes/class-settings.php:465
599
+ msgctxt ""
600
+ "Brief default description of a scheduling rule when some weekdays are "
601
+ "included on only some weeks of the month. %s should be left alone and will "
602
+ "be replaced by a comma-separated list of days and weeks in the following "
603
+ "format: M, T, W on the first, second week of the month"
604
+ msgid "%s on the %s week of the month"
605
+ msgstr "%s in der %s Woche des Monats"
606
+
607
+ #: includes/class-custom-post-types.php:447 includes/class-settings.php:466
608
+ msgctxt ""
609
+ "Brief default description of a scheduling rule when some weeks of the month "
610
+ "are included but all or no weekdays are selected. %s should be left alone "
611
+ "and will be replaced by a comma-separated list of weeks in the following "
612
+ "format: First, second week of the month"
613
+ msgid "%s week of the month"
614
+ msgstr "%s Woche des Monats"
615
+
616
+ #: includes/class-custom-post-types.php:448 includes/class-settings.php:467
617
+ msgctxt "Brief default description of a scheduling rule when no times are set"
618
+ msgid "All day"
619
+ msgstr "ganztags"
620
+
621
+ #: includes/class-custom-post-types.php:449 includes/class-settings.php:468
622
+ msgctxt ""
623
+ "Brief default description of a scheduling rule when an end time is set but "
624
+ "no start time. If the end time is 6pm, it will read: Ends at 6pm"
625
+ msgid "Ends at"
626
+ msgstr "Endet um"
627
+
628
+ #: includes/class-custom-post-types.php:450 includes/class-settings.php:469
629
+ msgctxt ""
630
+ "Brief default description of a scheduling rule when a start time is set but "
631
+ "no end time. If the start time is 6pm, it will read: Starts at 6pm"
632
+ msgid "Starts at"
633
+ msgstr "Beginnt um"
634
+
635
+ #: includes/class-custom-post-types.php:451 includes/class-settings.php:470
636
+ msgctxt "Separator between times of a scheduling rule"
637
+ msgid "&mdash;"
638
+ msgstr "&mdash;"
639
+
640
+ #: includes/template-functions.php:352
641
+ msgctxt ""
642
+ "Separator between days of the week when displaying opening hours in brief. "
643
+ "Example: Mo,Tu,We"
644
+ msgid ","
645
+ msgstr ","
646
+
647
+ #: includes/template-functions.php:355
648
+ msgctxt ""
649
+ "Brief opening hours description which lists days_strings when open all day. "
650
+ "Example: Mo,Tu,We all day"
651
+ msgid "%s all day"
652
+ msgstr "%s ganztägig"
653
+
654
+ #: includes/template-functions.php:367
655
+ msgctxt ""
656
+ "Brief opening hours description which lists the days followed by the closing "
657
+ "time. Example: Mo,Tu,We open until 9:00pm"
658
+ msgid "%s open until %s"
659
+ msgstr "%s offen bis %s"
660
+
661
+ #: includes/template-functions.php:369
662
+ msgctxt ""
663
+ "Brief opening hours description which lists the days followed by the opening "
664
+ "time. Example: Mo,Tu,We open from 9:00am"
665
+ msgid "%s open from %s"
666
+ msgstr "%s geöffnet von %s"
667
+
668
+ #: includes/template-functions.php:371
669
+ msgctxt ""
670
+ "Brief opening hours description which lists the days followed by the opening "
671
+ "and closing times. Example: Mo,Tu,We 9:00am&thinsp;&ndash;&thinsp;5:00pm"
672
+ msgid "%s %s&thinsp;&ndash;&thinsp;%s"
673
+ msgstr "%s %s&thinsp;&ndash;&thinsp;%s Uhr"
674
+
675
+ #: includes/template-functions.php:378
676
+ msgctxt ""
677
+ "Separator between multiple opening times in the brief opening hours. "
678
+ "Example: Mo,We 9:00 AM&thinsp;&ndash;&thinsp;5:00 PM; Tu,Th 10:00 AM&thinsp;"
679
+ "&ndash;&thinsp;5:00 PM"
680
+ msgid "; "
681
+ msgstr ";"
682
+
683
+ #: includes/template-functions.php:422
684
+ msgctxt ""
685
+ "Separator between opening and closing times. Example: 9:00am&thinsp;&ndash;"
686
+ "&thinsp;5:00pm"
687
+ msgid "&thinsp;&ndash;&thinsp;"
688
+ msgstr "&thinsp;&ndash;&thinsp;"
languages/business-profile.pot CHANGED
@@ -1,659 +1,695 @@
1
- # Copyright (C) 2019 Theme of the Crop
2
- # This file is distributed under the GNU General Public License v2.0 or later.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: Business Profile 1.2.4\n"
6
- "Report-Msgid-Bugs-To: https://themeofthecrop.com\n"
7
- "POT-Creation-Date: 2019-03-18 10:39:33+00:00\n"
8
- "MIME-Version: 1.0\n"
9
- "Content-Type: text/plain; charset=utf-8\n"
10
- "Content-Transfer-Encoding: 8bit\n"
11
- "PO-Revision-Date: 2019-MO-DA HO:MI+ZONE\n"
12
- "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
13
- "Language-Team: LANGUAGE <LL@li.org>\n"
14
- "X-Generator: grunt-wp-i18n 0.5.4\n"
15
-
16
- #: business-profile.php:229
17
- msgid "View the help documentation for Business Profile"
18
- msgstr ""
19
-
20
- #: business-profile.php:230
21
- msgid "Help"
22
- msgstr ""
23
-
24
- #: includes/class-blocks.php:139
25
- msgid "Use the main Business Profile"
26
- msgstr ""
27
-
28
- #: includes/class-contact-card-widget.php:39
29
- msgid "Show Name"
30
- msgstr ""
31
-
32
- #: includes/class-contact-card-widget.php:40
33
- msgid "Show Address"
34
- msgstr ""
35
-
36
- #: includes/class-contact-card-widget.php:41
37
- msgid "Show link to get directions on Google Maps"
38
- msgstr ""
39
-
40
- #: includes/class-contact-card-widget.php:42
41
- msgid "Show Phone number"
42
- msgstr ""
43
-
44
- #: includes/class-contact-card-widget.php:43
45
- msgid "Show contact details"
46
- msgstr ""
47
-
48
- #: includes/class-contact-card-widget.php:44
49
- msgid "Show Opening Hours"
50
- msgstr ""
51
-
52
- #: includes/class-contact-card-widget.php:45
53
- msgid "Show brief opening hours on one line"
54
- msgstr ""
55
-
56
- #: includes/class-contact-card-widget.php:46
57
- msgid "Show Google Map"
58
- msgstr ""
59
-
60
- #: includes/class-contact-card-widget.php:52
61
- msgid "Contact Card"
62
- msgstr ""
63
-
64
- #: includes/class-contact-card-widget.php:53
65
- msgid ""
66
- "Display a contact card with your name, address, phone number, opening hours "
67
- "and map."
68
- msgstr ""
69
-
70
- #: includes/class-contact-card-widget.php:91
71
- msgid "Title"
72
- msgstr ""
73
-
74
- #: includes/class-contact-card-widget.php:117
75
- #: includes/class-custom-post-types.php:60
76
- msgid "Location"
77
- msgstr ""
78
-
79
- #: includes/class-contact-card-widget.php:119
80
- msgid "Use Primary Business Profile"
81
- msgstr ""
82
-
83
- #: includes/class-custom-post-types.php:59
84
- #: includes/class-custom-post-types.php:61
85
- #: includes/class-custom-post-types.php:62 includes/class-settings.php:212
86
- #: includes/class-settings.php:213
87
- msgid "Locations"
88
- msgstr ""
89
-
90
- #: includes/class-custom-post-types.php:63
91
- msgid "Add New"
92
- msgstr ""
93
-
94
- #: includes/class-custom-post-types.php:64
95
- msgid "Add New Location"
96
- msgstr ""
97
-
98
- #: includes/class-custom-post-types.php:65
99
- msgid "Edit Location"
100
- msgstr ""
101
-
102
- #: includes/class-custom-post-types.php:66
103
- msgid "New Location"
104
- msgstr ""
105
-
106
- #: includes/class-custom-post-types.php:67
107
- msgid "View Location"
108
- msgstr ""
109
-
110
- #: includes/class-custom-post-types.php:68
111
- msgid "View Locations"
112
- msgstr ""
113
-
114
- #: includes/class-custom-post-types.php:69
115
- msgid "Search Locations"
116
- msgstr ""
117
-
118
- #: includes/class-custom-post-types.php:70
119
- msgid "No locations found"
120
- msgstr ""
121
-
122
- #: includes/class-custom-post-types.php:71
123
- msgid "No locations found in trash"
124
- msgstr ""
125
-
126
- #: includes/class-custom-post-types.php:72
127
- msgid "All Locations"
128
- msgstr ""
129
-
130
- #: includes/class-custom-post-types.php:149 includes/class-settings.php:262
131
- msgid "Schema Type"
132
- msgstr ""
133
-
134
- #: includes/class-custom-post-types.php:160
135
- msgid "Contact Details"
136
- msgstr ""
137
-
138
- #: includes/class-custom-post-types.php:170
139
- #: includes/class-custom-post-types.php:413 includes/class-settings.php:432
140
- #: templates/opening-hours.php:21
141
- msgid "Opening Hours"
142
- msgstr ""
143
-
144
- #: includes/class-custom-post-types.php:231
145
- msgid "Schema type"
146
- msgstr ""
147
-
148
- #: includes/class-custom-post-types.php:241 includes/class-settings.php:263
149
- msgid ""
150
- "Select the option that best describes your business to improve how search "
151
- "engines understand your website."
152
- msgstr ""
153
-
154
- #: includes/class-custom-post-types.php:270
155
- #: includes/class-custom-post-types.php:294 includes/class-settings.php:329
156
- msgid "No map coordinates set."
157
- msgstr ""
158
-
159
- #: includes/class-custom-post-types.php:272 includes/class-settings.php:330
160
- msgid "Requesting new coordinates"
161
- msgstr ""
162
-
163
- #: includes/class-custom-post-types.php:273 includes/class-settings.php:331
164
- msgid "Select a match below"
165
- msgstr ""
166
-
167
- #: includes/class-custom-post-types.php:274
168
- #: includes/class-custom-post-types.php:297 includes/class-settings.php:332
169
- msgid "View"
170
- msgstr ""
171
-
172
- #: includes/class-custom-post-types.php:275 includes/class-settings.php:336
173
- msgid "Error"
174
- msgstr ""
175
-
176
- #: includes/class-custom-post-types.php:276 includes/class-settings.php:337
177
- msgid ""
178
- "Invalid request. Be sure to fill out the address field before retrieving "
179
- "coordinates."
180
- msgstr ""
181
-
182
- #: includes/class-custom-post-types.php:277 includes/class-settings.php:338
183
- msgid "Request denied."
184
- msgstr ""
185
-
186
- #: includes/class-custom-post-types.php:278 includes/class-settings.php:339
187
- msgid "Request denied because you are over your request quota."
188
- msgstr ""
189
-
190
- #: includes/class-custom-post-types.php:279
191
- msgid "Nothing was found at that address."
192
- msgstr ""
193
-
194
- #: includes/class-custom-post-types.php:304 includes/class-settings.php:333
195
- msgid "Retrieve map coordinates"
196
- msgstr ""
197
-
198
- #: includes/class-custom-post-types.php:308 includes/class-settings.php:334
199
- msgid "Remove map coordinates"
200
- msgstr ""
201
-
202
- #: includes/class-custom-post-types.php:336 includes/class-settings.php:390
203
- msgid "Contact Page"
204
- msgstr ""
205
-
206
- #: includes/class-custom-post-types.php:350 includes/class-settings.php:409
207
- msgid "Email Address (optional)"
208
- msgstr ""
209
-
210
- #: includes/class-custom-post-types.php:357
211
- msgid "Phone Number"
212
- msgstr ""
213
-
214
- #: includes/class-custom-post-types.php:414 includes/class-settings.php:433
215
- msgid "Define your weekly opening hours by adding scheduling rules."
216
- msgstr ""
217
-
218
- #: includes/class-custom-post-types.php:429 includes/class-settings.php:448
219
- msgid "Add another opening time"
220
- msgstr ""
221
-
222
- #: includes/class-custom-post-types.php:443 includes/class-settings.php:462
223
- msgid "Delete scheduling rule"
224
- msgstr ""
225
-
226
- #. Plugin Name of the plugin/theme
227
- msgid "Business Profile"
228
- msgstr ""
229
-
230
- #: includes/class-settings.php:252
231
- msgid "Search Engine Optimization"
232
- msgstr ""
233
-
234
- #: includes/class-settings.php:279
235
- msgid "Image"
236
- msgstr ""
237
-
238
- #: includes/class-settings.php:280
239
- msgid ""
240
- "Google requires you provide an image to display with your local business "
241
- "search profile."
242
- msgstr ""
243
-
244
- #: includes/class-settings.php:282
245
- msgid "Add Image"
246
- msgstr ""
247
-
248
- #: includes/class-settings.php:283
249
- msgid "Change Image"
250
- msgstr ""
251
-
252
- #: includes/class-settings.php:284
253
- msgid "Remove Image"
254
- msgstr ""
255
-
256
- #: includes/class-settings.php:297
257
- msgid "Contact Information"
258
- msgstr ""
259
-
260
- #: includes/class-settings.php:307
261
- msgid "Name"
262
- msgstr ""
263
-
264
- #: includes/class-settings.php:308
265
- msgid "Enter the name of your business if it is different than the website name."
266
- msgstr ""
267
-
268
- #: includes/class-settings.php:324
269
- msgid "Address"
270
- msgstr ""
271
-
272
- #: includes/class-settings.php:335
273
- msgid "Try again?"
274
- msgstr ""
275
-
276
- #: includes/class-settings.php:340
277
- msgid "Nothing was found at that address"
278
- msgstr ""
279
-
280
- #: includes/class-settings.php:355
281
- msgid "Google Maps API Key"
282
- msgstr ""
283
-
284
- #: includes/class-settings.php:357
285
- msgid ""
286
- "Google requires an API key to use their maps. %sGet an API key%s. A full "
287
- "walk-through is available in the %sdocumentiaton%s."
288
- msgstr ""
289
-
290
- #: includes/class-settings.php:376
291
- msgid "Phone"
292
- msgstr ""
293
-
294
- #: includes/class-settings.php:391
295
- msgid ""
296
- "Select a page on your site where users can reach you, such as a contact "
297
- "form."
298
- msgstr ""
299
-
300
- #: includes/class-settings.php:410
301
- msgid ""
302
- "Enter an email address only if you want to display this publicly. Showing "
303
- "your email address on your site may cause you to receive excessive spam."
304
- msgstr ""
305
-
306
- #: includes/class-settings.php:422
307
- msgid "Schedule"
308
- msgstr ""
309
-
310
- #: includes/class-settings.php:482 includes/class-settings.php:492
311
- msgid "Multiple Locations"
312
- msgstr ""
313
-
314
- #: includes/class-settings.php:493
315
- msgid "Enable support for multiple business locations."
316
- msgstr ""
317
-
318
- #: includes/deprecated/class-integrations.php:147
319
- msgid "Book a table"
320
- msgstr ""
321
-
322
- #: includes/deprecated/class-integrations.php:170
323
- #: includes/deprecated/class-integrations.php:173
324
- msgid "Show book a table link"
325
- msgstr ""
326
-
327
- #: includes/template-functions.php:218
328
- msgid "Get directions"
329
- msgstr ""
330
-
331
- #: includes/template-functions.php:293
332
- msgid "Contact"
333
- msgstr ""
334
-
335
- #: includes/template-functions.php:341
336
- msgid "Mo"
337
- msgstr ""
338
-
339
- #: includes/template-functions.php:342
340
- msgid "Tu"
341
- msgstr ""
342
-
343
- #: includes/template-functions.php:343
344
- msgid "We"
345
- msgstr ""
346
-
347
- #: includes/template-functions.php:344
348
- msgid "Th"
349
- msgstr ""
350
-
351
- #: includes/template-functions.php:345
352
- msgid "Fr"
353
- msgstr ""
354
-
355
- #: includes/template-functions.php:346
356
- msgid "Sa"
357
- msgstr ""
358
-
359
- #: includes/template-functions.php:347
360
- msgid "Su"
361
- msgstr ""
362
-
363
- #: includes/template-functions.php:388
364
- msgid "Monday"
365
- msgstr ""
366
-
367
- #: includes/template-functions.php:389
368
- msgid "Tuesday"
369
- msgstr ""
370
-
371
- #: includes/template-functions.php:390
372
- msgid "Wednesday"
373
- msgstr ""
374
-
375
- #: includes/template-functions.php:391
376
- msgid "Thursday"
377
- msgstr ""
378
-
379
- #: includes/template-functions.php:392
380
- msgid "Friday"
381
- msgstr ""
382
-
383
- #: includes/template-functions.php:393
384
- msgid "Saturday"
385
- msgstr ""
386
-
387
- #: includes/template-functions.php:394
388
- msgid "Sunday"
389
- msgstr ""
390
-
391
- #: includes/template-functions.php:406
392
- msgid "Open"
393
- msgstr ""
394
-
395
- #: includes/template-functions.php:418
396
- msgid "Open until "
397
- msgstr ""
398
-
399
- #: includes/template-functions.php:420
400
- msgid "Open from "
401
- msgstr ""
402
-
403
- #: includes/template-functions.php:442
404
- msgid "Closed"
405
- msgstr ""
406
-
407
- #: includes/template-functions.php:566
408
- msgid "Get Directions"
409
- msgstr ""
410
-
411
- #: lib/simple-admin-pages/classes/AdminPage.class.php:173
412
- msgid "You do not have sufficient permissions to access this page."
413
- msgstr ""
414
-
415
- #. Author URI of the plugin/theme
416
- msgid "http://themeofthecrop.com"
417
- msgstr ""
418
-
419
- #. Description of the plugin/theme
420
- msgid "Contact information, Google Maps and opening hours made easy for businesses."
421
- msgstr ""
422
-
423
- #. Author of the plugin/theme
424
- msgid "Theme of the Crop"
425
- msgstr ""
426
-
427
- #: includes/class-custom-post-types.php:271
428
- #: includes/class-custom-post-types.php:296 includes/class-settings.php:328
429
- msgctxt "separates latitude and longitude"
430
- msgid ", "
431
- msgstr ""
432
-
433
- #: includes/class-custom-post-types.php:306 includes/class-settings.php:327
434
- msgctxt "separator between admin action links in address component"
435
- msgid " | "
436
- msgstr ""
437
-
438
- #: includes/class-custom-post-types.php:416 includes/class-settings.php:435
439
- msgctxt "Monday abbreviation"
440
- msgid "Mo"
441
- msgstr ""
442
-
443
- #: includes/class-custom-post-types.php:417 includes/class-settings.php:436
444
- msgctxt "Tuesday abbreviation"
445
- msgid "Tu"
446
- msgstr ""
447
-
448
- #: includes/class-custom-post-types.php:418 includes/class-settings.php:437
449
- msgctxt "Wednesday abbreviation"
450
- msgid "We"
451
- msgstr ""
452
-
453
- #: includes/class-custom-post-types.php:419 includes/class-settings.php:438
454
- msgctxt "Thursday abbreviation"
455
- msgid "Th"
456
- msgstr ""
457
-
458
- #: includes/class-custom-post-types.php:420 includes/class-settings.php:439
459
- msgctxt "Friday abbreviation"
460
- msgid "Fr"
461
- msgstr ""
462
-
463
- #: includes/class-custom-post-types.php:421 includes/class-settings.php:440
464
- msgctxt "Saturday abbreviation"
465
- msgid "Sa"
466
- msgstr ""
467
-
468
- #: includes/class-custom-post-types.php:422 includes/class-settings.php:441
469
- msgctxt "Sunday abbreviation"
470
- msgid "Su"
471
- msgstr ""
472
-
473
- #: includes/class-custom-post-types.php:424 includes/class-settings.php:443
474
- msgctxt ""
475
- "Time format displayed in the opening hours setting panel in your admin "
476
- "area. Must match formatting rules at "
477
- "http://amsul.ca/pickadate.js/time.htm#formats"
478
- msgid "h:i A"
479
- msgstr ""
480
-
481
- #: includes/class-custom-post-types.php:425 includes/class-settings.php:444
482
- msgctxt ""
483
- "Date format displayed in the opening hours setting panel in your admin "
484
- "area. Must match formatting rules at "
485
- "http://amsul.ca/pickadate.js/date.htm#formatting-rules"
486
- msgid "mmmm d, yyyy"
487
- msgstr ""
488
-
489
- #: includes/class-custom-post-types.php:430 includes/class-settings.php:449
490
- msgctxt "Format of a scheduling rule"
491
- msgid "Weekly"
492
- msgstr ""
493
-
494
- #: includes/class-custom-post-types.php:431 includes/class-settings.php:450
495
- msgctxt "Format of a scheduling rule"
496
- msgid "Monthly"
497
- msgstr ""
498
-
499
- #: includes/class-custom-post-types.php:432 includes/class-settings.php:451
500
- msgctxt "Format of a scheduling rule"
501
- msgid "Date"
502
- msgstr ""
503
-
504
- #: includes/class-custom-post-types.php:433 includes/class-settings.php:452
505
- msgctxt "Label for selecting days of the week in a scheduling rule"
506
- msgid "Days of the week"
507
- msgstr ""
508
-
509
- #: includes/class-custom-post-types.php:434 includes/class-settings.php:453
510
- msgctxt "Label for selecting weeks of the month in a scheduling rule"
511
- msgid "Weeks of the month"
512
- msgstr ""
513
-
514
- #: includes/class-custom-post-types.php:435 includes/class-settings.php:454
515
- msgctxt "Label to select a date for a scheduling rule"
516
- msgid "Date"
517
- msgstr ""
518
-
519
- #: includes/class-custom-post-types.php:436 includes/class-settings.php:455
520
- msgctxt "Label to select a time slot for a scheduling rule"
521
- msgid "Time"
522
- msgstr ""
523
-
524
- #: includes/class-custom-post-types.php:437 includes/class-settings.php:456
525
- msgctxt "Label to set a scheduling rule to last all day"
526
- msgid "All day"
527
- msgstr ""
528
-
529
- #: includes/class-custom-post-types.php:438 includes/class-settings.php:457
530
- msgctxt "Label for the starting time of a scheduling rule"
531
- msgid "Start"
532
- msgstr ""
533
-
534
- #: includes/class-custom-post-types.php:439 includes/class-settings.php:458
535
- msgctxt "Label for the ending time of a scheduling rule"
536
- msgid "End"
537
- msgstr ""
538
-
539
- #: includes/class-custom-post-types.php:440 includes/class-settings.php:459
540
- msgctxt "Prompt displayed when a scheduling rule is set without any time restrictions"
541
- msgid "All day long. Want to %sset a time slot%s?"
542
- msgstr ""
543
-
544
- #: includes/class-custom-post-types.php:441 includes/class-settings.php:460
545
- msgctxt "Toggle a scheduling rule open and closed"
546
- msgid "Open and close this rule"
547
- msgstr ""
548
-
549
- #: includes/class-custom-post-types.php:442 includes/class-settings.php:461
550
- msgctxt "Delete a scheduling rule"
551
- msgid "Delete rule"
552
- msgstr ""
553
-
554
- #: includes/class-custom-post-types.php:444 includes/class-settings.php:463
555
- msgctxt ""
556
- "Brief default description of a scheduling rule when no weekdays or weeks "
557
- "are included in the rule"
558
- msgid "Never"
559
- msgstr ""
560
-
561
- #: includes/class-custom-post-types.php:445 includes/class-settings.php:464
562
- msgctxt ""
563
- "Brief default description of a scheduling rule when all the weekdays/weeks "
564
- "are included in the rule"
565
- msgid "Every day"
566
- msgstr ""
567
-
568
- #: includes/class-custom-post-types.php:446 includes/class-settings.php:465
569
- msgctxt ""
570
- "Brief default description of a scheduling rule when some weekdays are "
571
- "included on only some weeks of the month. %s should be left alone and will "
572
- "be replaced by a comma-separated list of days and weeks in the following "
573
- "format: M, T, W on the first, second week of the month"
574
- msgid "%s on the %s week of the month"
575
- msgstr ""
576
-
577
- #: includes/class-custom-post-types.php:447 includes/class-settings.php:466
578
- msgctxt ""
579
- "Brief default description of a scheduling rule when some weeks of the month "
580
- "are included but all or no weekdays are selected. %s should be left alone "
581
- "and will be replaced by a comma-separated list of weeks in the following "
582
- "format: First, second week of the month"
583
- msgid "%s week of the month"
584
- msgstr ""
585
-
586
- #: includes/class-custom-post-types.php:448 includes/class-settings.php:467
587
- msgctxt "Brief default description of a scheduling rule when no times are set"
588
- msgid "All day"
589
- msgstr ""
590
-
591
- #: includes/class-custom-post-types.php:449 includes/class-settings.php:468
592
- msgctxt ""
593
- "Brief default description of a scheduling rule when an end time is set but "
594
- "no start time. If the end time is 6pm, it will read: Ends at 6pm"
595
- msgid "Ends at"
596
- msgstr ""
597
-
598
- #: includes/class-custom-post-types.php:450 includes/class-settings.php:469
599
- msgctxt ""
600
- "Brief default description of a scheduling rule when a start time is set but "
601
- "no end time. If the start time is 6pm, it will read: Starts at 6pm"
602
- msgid "Starts at"
603
- msgstr ""
604
-
605
- #: includes/class-custom-post-types.php:451 includes/class-settings.php:470
606
- msgctxt "Separator between times of a scheduling rule"
607
- msgid "&mdash;"
608
- msgstr ""
609
-
610
- #: includes/template-functions.php:352
611
- msgctxt ""
612
- "Separator between days of the week when displaying opening hours in brief. "
613
- "Example: Mo,Tu,We"
614
- msgid ","
615
- msgstr ""
616
-
617
- #: includes/template-functions.php:355
618
- msgctxt ""
619
- "Brief opening hours description which lists days_strings when open all day. "
620
- "Example: Mo,Tu,We all day"
621
- msgid "%s all day"
622
- msgstr ""
623
-
624
- #: includes/template-functions.php:367
625
- msgctxt ""
626
- "Brief opening hours description which lists the days followed by the "
627
- "closing time. Example: Mo,Tu,We open until 9:00pm"
628
- msgid "%s open until %s"
629
- msgstr ""
630
-
631
- #: includes/template-functions.php:369
632
- msgctxt ""
633
- "Brief opening hours description which lists the days followed by the "
634
- "opening time. Example: Mo,Tu,We open from 9:00am"
635
- msgid "%s open from %s"
636
- msgstr ""
637
-
638
- #: includes/template-functions.php:371
639
- msgctxt ""
640
- "Brief opening hours description which lists the days followed by the "
641
- "opening and closing times. Example: Mo,Tu,We "
642
- "9:00am&thinsp;&ndash;&thinsp;5:00pm"
643
- msgid "%s %s&thinsp;&ndash;&thinsp;%s"
644
- msgstr ""
645
-
646
- #: includes/template-functions.php:378
647
- msgctxt ""
648
- "Separator between multiple opening times in the brief opening hours. "
649
- "Example: Mo,We 9:00 AM&thinsp;&ndash;&thinsp;5:00 PM; Tu,Th 10:00 "
650
- "AM&thinsp;&ndash;&thinsp;5:00 PM"
651
- msgid "; "
652
- msgstr ""
653
-
654
- #: includes/template-functions.php:422
655
- msgctxt ""
656
- "Separator between opening and closing times. Example: "
657
- "9:00am&thinsp;&ndash;&thinsp;5:00pm"
658
- msgid "&thinsp;&ndash;&thinsp;"
659
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: Five Star Business Profile and Schema\n"
4
+ "POT-Creation-Date: 2020-10-13 16:13-0400\n"
5
+ "PO-Revision-Date: 2020-10-13 16:13-0400\n"
6
+ "Last-Translator: \n"
7
+ "Language-Team: Five Star Plugins\n"
8
+ "Language: en\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "X-Generator: Poedit 2.4.1\n"
13
+ "X-Poedit-Basepath: ..\n"
14
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
15
+ "X-Poedit-KeywordsList: __;_e\n"
16
+ "X-Poedit-SearchPath-0: .\n"
17
+
18
+ #: assets/js/block-contact-card.js:8 includes/class-contact-card-widget.php:52
19
+ msgid "Contact Card"
20
+ msgstr ""
21
+
22
+ #: assets/js/block-contact-card.js:60
23
+ msgid "Select a Location"
24
+ msgstr ""
25
+
26
+ #: assets/js/block-contact-card.js:67 includes/class-contact-card-widget.php:39
27
+ msgid "Show Name"
28
+ msgstr ""
29
+
30
+ #: assets/js/block-contact-card.js:72 includes/class-contact-card-widget.php:40
31
+ msgid "Show Address"
32
+ msgstr ""
33
+
34
+ #: assets/js/block-contact-card.js:77 includes/class-contact-card-widget.php:41
35
+ msgid "Show link to get directions on Google Maps"
36
+ msgstr ""
37
+
38
+ #: assets/js/block-contact-card.js:82 includes/class-contact-card-widget.php:42
39
+ msgid "Show Phone number"
40
+ msgstr ""
41
+
42
+ #: assets/js/block-contact-card.js:87 includes/class-contact-card-widget.php:43
43
+ msgid "Show contact details"
44
+ msgstr ""
45
+
46
+ #: assets/js/block-contact-card.js:92 includes/class-contact-card-widget.php:44
47
+ msgid "Show Opening Hours"
48
+ msgstr ""
49
+
50
+ #: assets/js/block-contact-card.js:97 includes/class-contact-card-widget.php:45
51
+ msgid "Show brief opening hours on one line"
52
+ msgstr ""
53
+
54
+ #: assets/js/block-contact-card.js:102
55
+ #: includes/class-contact-card-widget.php:46
56
+ msgid "Show Google Map"
57
+ msgstr ""
58
+
59
+ #: business-profile.php:82 business-profile.php:83
60
+ msgid "Business Profile"
61
+ msgstr ""
62
+
63
+ #: business-profile.php:276
64
+ msgid "MENU"
65
+ msgstr ""
66
+
67
+ #: business-profile.php:277
68
+ msgid "Dashboard"
69
+ msgstr ""
70
+
71
+ #: business-profile.php:278 includes/class-custom-post-types.php:83
72
+ #: includes/class-custom-post-types.php:85
73
+ #: includes/class-custom-post-types.php:86
74
+ #: includes/class-custom-post-types.php:96
75
+ msgid "Locations"
76
+ msgstr ""
77
+
78
+ #: business-profile.php:279 includes/class-custom-post-types.php:116
79
+ #: includes/class-custom-post-types.php:118
80
+ #: includes/class-custom-post-types.php:119
81
+ #: includes/class-custom-post-types.php:129
82
+ msgid "Schemas"
83
+ msgstr ""
84
+
85
+ #: business-profile.php:280 includes/class-settings.php:267
86
+ #: includes/class-settings.php:268
87
+ msgid "Settings"
88
+ msgstr ""
89
+
90
+ #: business-profile.php:321
91
+ msgid "View the help documentation for Business Profile"
92
+ msgstr ""
93
+
94
+ #: business-profile.php:322
95
+ msgid "Help"
96
+ msgstr ""
97
+
98
+ #: includes/class-blocks.php:139
99
+ msgid "Use the main Business Profile"
100
+ msgstr ""
101
+
102
+ #: includes/class-contact-card-widget.php:53
103
+ msgid ""
104
+ "Display a contact card with your name, address, phone number, opening hours "
105
+ "and map."
106
+ msgstr ""
107
+
108
+ #: includes/class-contact-card-widget.php:91
109
+ msgid "Title"
110
+ msgstr ""
111
+
112
+ #: includes/class-contact-card-widget.php:117
113
+ #: includes/class-custom-post-types.php:84 includes/class-dashboard.php:126
114
+ msgid "Location"
115
+ msgstr ""
116
+
117
+ #: includes/class-custom-post-types.php:87
118
+ #: includes/class-custom-post-types.php:120
119
+ msgid "Add New"
120
+ msgstr ""
121
+
122
+ #: includes/class-custom-post-types.php:88
123
+ msgid "Add New Location"
124
+ msgstr ""
125
+
126
+ #: includes/class-custom-post-types.php:89
127
+ msgid "Edit Location"
128
+ msgstr ""
129
+
130
+ #: includes/class-custom-post-types.php:90
131
+ msgid "New Location"
132
+ msgstr ""
133
+
134
+ #: includes/class-custom-post-types.php:91
135
+ msgid "View Location"
136
+ msgstr ""
137
+
138
+ #: includes/class-custom-post-types.php:92
139
+ msgid "View Locations"
140
+ msgstr ""
141
+
142
+ #: includes/class-custom-post-types.php:93
143
+ msgid "Search Locations"
144
+ msgstr ""
145
+
146
+ #: includes/class-custom-post-types.php:94
147
+ msgid "No locations found"
148
+ msgstr ""
149
+
150
+ #: includes/class-custom-post-types.php:95
151
+ msgid "No locations found in trash"
152
+ msgstr ""
153
+
154
+ #: includes/class-custom-post-types.php:117
155
+ msgid "Schema"
156
+ msgstr ""
157
+
158
+ #: includes/class-custom-post-types.php:121
159
+ msgid "Add New Schema"
160
+ msgstr ""
161
+
162
+ #: includes/class-custom-post-types.php:122
163
+ msgid "Edit Schema"
164
+ msgstr ""
165
+
166
+ #: includes/class-custom-post-types.php:123
167
+ msgid "New Schema"
168
+ msgstr ""
169
+
170
+ #: includes/class-custom-post-types.php:124
171
+ msgid "View Schema"
172
+ msgstr ""
173
+
174
+ #: includes/class-custom-post-types.php:125
175
+ msgid "View Schemas"
176
+ msgstr ""
177
+
178
+ #: includes/class-custom-post-types.php:126
179
+ msgid "Search Schemas"
180
+ msgstr ""
181
+
182
+ #: includes/class-custom-post-types.php:127
183
+ msgid "No schemas found"
184
+ msgstr ""
185
+
186
+ #: includes/class-custom-post-types.php:128
187
+ msgid "No schemas found in trash"
188
+ msgstr ""
189
+
190
+ #: includes/class-custom-post-types.php:207 includes/class-settings.php:298
191
+ msgid "Schema Type"
192
+ msgstr ""
193
+
194
+ #: includes/class-custom-post-types.php:218
195
+ msgid "Contact Details"
196
+ msgstr ""
197
+
198
+ #: includes/class-custom-post-types.php:228
199
+ #: includes/class-custom-post-types.php:691
200
+ #: includes/class-installation-walkthrough.php:28
201
+ #: includes/class-settings.php:501 templates/opening-hours.php:21
202
+ msgid "Opening Hours"
203
+ msgstr ""
204
+
205
+ #: includes/class-custom-post-types.php:238
206
+ #: includes/class-custom-post-types.php:749 includes/class-settings.php:553
207
+ msgid "Exceptions"
208
+ msgstr ""
209
+
210
+ #: includes/class-custom-post-types.php:248
211
+ msgid "Schema Details"
212
+ msgstr ""
213
+
214
+ #: includes/class-custom-post-types.php:353 includes/class-settings.php:366
215
+ msgid "No map coordinates set."
216
+ msgstr ""
217
+
218
+ #: includes/class-custom-post-types.php:355 includes/class-settings.php:367
219
+ msgid "Requesting new coordinates"
220
+ msgstr ""
221
+
222
+ #: includes/class-custom-post-types.php:356 includes/class-settings.php:368
223
+ msgid "Select a match below"
224
+ msgstr ""
225
+
226
+ #: includes/class-custom-post-types.php:357 includes/class-settings.php:369
227
+ msgid "View"
228
+ msgstr ""
229
+
230
+ #: includes/class-custom-post-types.php:358 includes/class-settings.php:373
231
+ msgid "Error"
232
+ msgstr ""
233
+
234
+ #: includes/class-custom-post-types.php:359 includes/class-settings.php:374
235
+ msgid ""
236
+ "Invalid request. Be sure to fill out the address field before retrieving "
237
+ "coordinates."
238
+ msgstr ""
239
+
240
+ #: includes/class-custom-post-types.php:360 includes/class-settings.php:375
241
+ msgid "Request denied."
242
+ msgstr ""
243
+
244
+ #: includes/class-custom-post-types.php:361 includes/class-settings.php:376
245
+ msgid "Request denied because you are over your request quota."
246
+ msgstr ""
247
+
248
+ #: includes/class-custom-post-types.php:362
249
+ msgid "Nothing was found at that address."
250
+ msgstr ""
251
+
252
+ #: includes/class-custom-post-types.php:560
253
+ msgid "Post Type"
254
+ msgstr ""
255
+
256
+ #: includes/class-custom-post-types.php:561
257
+ msgid "Post"
258
+ msgstr ""
259
+
260
+ #: includes/class-custom-post-types.php:562
261
+ msgid "Page"
262
+ msgstr ""
263
+
264
+ #: includes/class-custom-post-types.php:564
265
+ msgid "Post Category"
266
+ msgstr ""
267
+
268
+ #: includes/class-custom-post-types.php:565
269
+ msgid "Taxonomy"
270
+ msgstr ""
271
+
272
+ #: includes/class-custom-post-types.php:566
273
+ msgid "Page Template"
274
+ msgstr ""
275
+
276
+ #: includes/class-custom-post-types.php:567
277
+ msgid "Global"
278
+ msgstr ""
279
+
280
+ #: includes/class-custom-post-types.php:692
281
+ #: includes/class-installation-walkthrough.php:29
282
+ #: includes/class-settings.php:502
283
+ msgid "Define your weekly opening hours by adding scheduling rules."
284
+ msgstr ""
285
+
286
+ #: includes/class-custom-post-types.php:707
287
+ #: includes/class-installation-walkthrough.php:44
288
+ #: includes/class-settings.php:517
289
+ msgid "Add another opening time"
290
+ msgstr ""
291
+
292
+ #: includes/class-custom-post-types.php:721
293
+ #: includes/class-custom-post-types.php:770
294
+ #: includes/class-installation-walkthrough.php:58
295
+ #: includes/class-settings.php:531 includes/class-settings.php:574
296
+ msgid "Delete scheduling rule"
297
+ msgstr ""
298
+
299
+ #: includes/class-custom-post-types.php:750 includes/class-settings.php:554
300
+ msgid ""
301
+ "Define special opening hours for holidays, events or other needs. Leave the "
302
+ "time empty if you're closed all day."
303
+ msgstr ""
304
+
305
+ #: includes/class-custom-post-types.php:756 includes/class-settings.php:560
306
+ msgid "Add another exception"
307
+ msgstr ""
308
+
309
+ #: includes/class-dashboard.php:81
310
+ #, php-format
311
+ msgid ""
312
+ "<a href=\"%s\" target=\"_blank\">Visit our website</a> to learn how to "
313
+ "upgrade to premium."
314
+ msgstr ""
315
+
316
+ #: includes/class-dashboard.php:141
317
+ msgid ""
318
+ "No Locations to display yet. Create a location for it to be displayed here."
319
+ msgstr ""
320
+
321
+ #: includes/class-dashboard.php:237
322
+ #, php-format
323
+ msgid ""
324
+ "<a href=\"%s\" target=\"_blank\">Visit our website</a> to learn how to get a "
325
+ "free 7-day trial of the premium plugin."
326
+ msgstr ""
327
+
328
+ #: includes/class-deactivation-survey.php:58
329
+ msgid "Quick Feedback"
330
+ msgstr ""
331
+
332
+ #: includes/class-deactivation-survey.php:59
333
+ msgid ""
334
+ "If you have a moment, please share why you are deactivating Five-Star "
335
+ "Business Profile:"
336
+ msgstr ""
337
+
338
+ #: includes/class-deactivation-survey.php:74
339
+ msgid "Submit and Deactivate"
340
+ msgstr ""
341
+
342
+ #: includes/class-deactivation-survey.php:75
343
+ msgid "Skip and Deactivate"
344
+ msgstr ""
345
+
346
+ #: includes/class-installation-walkthrough.php:179
347
+ msgid "Welcome to the Five Star Business Profile and Schema"
348
+ msgstr ""
349
+
350
+ #: includes/class-installation-walkthrough.php:180
351
+ msgid ""
352
+ "Thanks for choosing the Five Star Business Profile and Schema! The following "
353
+ "will help you get started with the setup of the plugin by creating a contact "
354
+ "page, menu items and menu page, as well as configuring a few key options."
355
+ msgstr ""
356
+
357
+ #: includes/class-installation-walkthrough.php:185
358
+ msgid "1. Add a Contact Page"
359
+ msgstr ""
360
+
361
+ #: includes/class-installation-walkthrough.php:187
362
+ msgid ""
363
+ "You can create a dedicated contact page below, or skip this step and add "
364
+ "your contact schema to a page you've already created manually."
365
+ msgstr ""
366
+
367
+ #: includes/class-installation-walkthrough.php:189
368
+ msgid "Page Title:"
369
+ msgstr ""
370
+
371
+ #: includes/class-installation-walkthrough.php:190
372
+ msgid "Create Page"
373
+ msgstr ""
374
+
375
+ #: includes/class-installation-walkthrough.php:193
376
+ #: includes/class-installation-walkthrough.php:230
377
+ #: includes/class-installation-walkthrough.php:246
378
+ msgid "Next Step"
379
+ msgstr ""
380
+
381
+ #: includes/class-installation-walkthrough.php:199
382
+ msgid "2. Set Contact Information"
383
+ msgstr ""
384
+
385
+ #: includes/class-installation-walkthrough.php:201
386
+ msgid ""
387
+ "Set the information that will be displayed on your contact page and in the "
388
+ "contact schema for your business"
389
+ msgstr ""
390
+
391
+ #: includes/class-installation-walkthrough.php:227
392
+ msgid "Set Contact Information"
393
+ msgstr ""
394
+
395
+ #: includes/class-installation-walkthrough.php:231
396
+ #: includes/class-installation-walkthrough.php:247
397
+ #: includes/class-installation-walkthrough.php:260
398
+ msgid "Previous Step"
399
+ msgstr ""
400
+
401
+ #: includes/class-installation-walkthrough.php:237
402
+ msgid "3. Set Opening Hours"
403
+ msgstr ""
404
+
405
+ #: includes/class-installation-walkthrough.php:243
406
+ msgid "Set Hours"
407
+ msgstr ""
408
+
409
+ #: includes/class-installation-walkthrough.php:253
410
+ msgid "4. Create a Schema"
411
+ msgstr ""
412
+
413
+ #: includes/class-installation-walkthrough.php:255
414
+ msgid ""
415
+ "You can create a schema for items such as blog posts, products, FAQs, etc., "
416
+ "or you can create multiple schema later."
417
+ msgstr ""
418
+
419
+ #: includes/class-installation-walkthrough.php:257
420
+ msgid "Create a schema now"
421
+ msgstr ""
422
+
423
+ #: includes/class-installation-walkthrough.php:261
424
+ msgid "Finish"
425
+ msgstr ""
426
+
427
+ #: includes/class-installation-walkthrough.php:267
428
+ msgid "Skip Setup"
429
+ msgstr ""
430
+
431
+ #: includes/class-review-ask.php:55
432
+ msgid "Email Address"
433
+ msgstr ""
434
+
435
+ #: includes/class-schema-cpt.php:213
436
+ msgid " Details"
437
+ msgstr ""
438
+
439
+ #: includes/class-schema-cpt.php:301
440
+ msgid "Add Another "
441
+ msgstr ""
442
+
443
+ #: includes/class-settings.php:278
444
+ msgid "Basic"
445
+ msgstr ""
446
+
447
+ #: includes/class-settings.php:287
448
+ msgid "Search Engine Optimization"
449
+ msgstr ""
450
+
451
+ #: includes/class-settings.php:299
452
+ msgid ""
453
+ "Select the option that best describes your business to improve how search "
454
+ "engines understand your website."
455
+ msgstr ""
456
+
457
+ #: includes/class-settings.php:315
458
+ msgid "Image"
459
+ msgstr ""
460
+
461
+ #: includes/class-settings.php:316
462
+ msgid ""
463
+ "Google requires you provide an image to display with your local business "
464
+ "search profile."
465
+ msgstr ""
466
+
467
+ #: includes/class-settings.php:318
468
+ msgid "Add Image"
469
+ msgstr ""
470
+
471
+ #: includes/class-settings.php:319
472
+ msgid "Change Image"
473
+ msgstr ""
474
+
475
+ #: includes/class-settings.php:320
476
+ msgid "Remove Image"
477
+ msgstr ""
478
+
479
+ #: includes/class-settings.php:333
480
+ msgid "Contact Information"
481
+ msgstr ""
482
+
483
+ #: includes/class-settings.php:344
484
+ msgid "Name"
485
+ msgstr ""
486
+
487
+ #: includes/class-settings.php:345
488
+ msgid ""
489
+ "Enter the name of your business if it is different than the website name."
490
+ msgstr ""
491
+
492
+ #: includes/class-settings.php:361
493
+ msgid "Address"
494
+ msgstr ""
495
+
496
+ #: includes/class-settings.php:370
497
+ msgid "Retrieve map coordinates"
498
+ msgstr ""
499
+
500
+ #: includes/class-settings.php:371
501
+ msgid "Remove map coordinates"
502
+ msgstr ""
503
+
504
+ #: includes/class-settings.php:372
505
+ msgid "Try again?"
506
+ msgstr ""
507
+
508
+ #: includes/class-settings.php:377
509
+ msgid "Nothing was found at that address"
510
+ msgstr ""
511
+
512
+ #: includes/class-settings.php:392
513
+ msgid "Google Maps API Key"
514
+ msgstr ""
515
+
516
+ #: includes/class-settings.php:394
517
+ #, php-format
518
+ msgid ""
519
+ "Google requires an API key to use their maps. %sGet an API key%s. A full "
520
+ "walk-through is available in the %sdocumentation%s."
521
+ msgstr ""
522
+
523
+ #: includes/class-settings.php:413
524
+ msgid "Phone"
525
+ msgstr ""
526
+
527
+ #: includes/class-settings.php:427
528
+ msgid "Click-to-Call Phone"
529
+ msgstr ""
530
+
531
+ #: includes/class-settings.php:428
532
+ msgid ""
533
+ "Use this field to set a different number for when the phone number is "
534
+ "clicked in the contact card (e.g. if you'd like it to be just an unformatted "
535
+ "string of numbers). If left blank, the click-to-call will use the phone "
536
+ "number provided in the option above."
537
+ msgstr ""
538
+
539
+ #: includes/class-settings.php:442
540
+ msgid "Contact Page"
541
+ msgstr ""
542
+
543
+ #: includes/class-settings.php:443
544
+ msgid ""
545
+ "Select a page on your site where users can reach you, such as a contact form."
546
+ msgstr ""
547
+
548
+ #: includes/class-settings.php:461
549
+ msgid "Disable Contact Page Card"
550
+ msgstr ""
551
+
552
+ #: includes/class-settings.php:462
553
+ msgid ""
554
+ "This disables the contact card from being automatically included on the page "
555
+ "you set as the contact page in the option above this one."
556
+ msgstr ""
557
+
558
+ #: includes/class-settings.php:477
559
+ msgid "Email Address (optional)"
560
+ msgstr ""
561
+
562
+ #: includes/class-settings.php:478
563
+ msgid ""
564
+ "Enter an email address only if you want to display this publicly. Showing "
565
+ "your email address on your site may cause you to receive excessive spam."
566
+ msgstr ""
567
+
568
+ #: includes/class-settings.php:490
569
+ msgid "Schedule"
570
+ msgstr ""
571
+
572
+ #: includes/class-settings.php:591 includes/class-settings.php:602
573
+ msgid "Multiple Locations"
574
+ msgstr ""
575
+
576
+ #: includes/class-settings.php:603
577
+ msgid "Enable support for multiple business locations."
578
+ msgstr ""
579
+
580
+ #: includes/class-settings.php:696
581
+ msgid "Premium"
582
+ msgstr ""
583
+
584
+ #: includes/class-settings.php:706
585
+ msgid "General"
586
+ msgstr ""
587
+
588
+ #: includes/class-settings.php:719
589
+ msgid "Post Rich Snippets"
590
+ msgstr ""
591
+
592
+ #: includes/class-settings.php:720
593
+ msgid ""
594
+ "Automatically enable article 'Rich Snippets' for Google for all regular "
595
+ "posts on the site."
596
+ msgstr ""
597
+
598
+ #: includes/class-settings.php:735
599
+ msgid "Schema Default Helpers"
600
+ msgstr ""
601
+
602
+ #: includes/class-settings.php:736
603
+ msgid ""
604
+ "Adds a helper pop-up that can be accessed on click on the Schema edit screen "
605
+ "that list the available default options, functions and metas"
606
+ msgstr ""
607
+
608
+ #: includes/class-settings.php:750
609
+ msgid "Plugin Integrations"
610
+ msgstr ""
611
+
612
+ #: includes/class-settings.php:763
613
+ msgid "WooCommerce Integration"
614
+ msgstr ""
615
+
616
+ #: includes/class-settings.php:764
617
+ msgid "Automatically enable product 'Rich Snippets' for Google."
618
+ msgstr ""
619
+
620
+ #: includes/template-functions.php:228
621
+ msgid "Get directions"
622
+ msgstr ""
623
+
624
+ #: includes/template-functions.php:311
625
+ msgid "Contact"
626
+ msgstr ""
627
+
628
+ #: includes/template-functions.php:414
629
+ msgid "Monday"
630
+ msgstr ""
631
+
632
+ #: includes/template-functions.php:415
633
+ msgid "Tuesday"
634
+ msgstr ""
635
+
636
+ #: includes/template-functions.php:416
637
+ msgid "Wednesday"
638
+ msgstr ""
639
+
640
+ #: includes/template-functions.php:417
641
+ msgid "Thursday"
642
+ msgstr ""
643
+
644
+ #: includes/template-functions.php:418
645
+ msgid "Friday"
646
+ msgstr ""
647
+
648
+ #: includes/template-functions.php:419
649
+ msgid "Saturday"
650
+ msgstr ""
651
+
652
+ #: includes/template-functions.php:420
653
+ msgid "Sunday"
654
+ msgstr ""
655
+
656
+ #: includes/template-functions.php:432
657
+ msgid "Open"
658
+ msgstr ""
659
+
660
+ #: includes/template-functions.php:444
661
+ msgid "Open until "
662
+ msgstr ""
663
+
664
+ #: includes/template-functions.php:446
665
+ msgid "Open from "
666
+ msgstr ""
667
+
668
+ #: includes/template-functions.php:468 includes/template-functions.php:627
669
+ msgid "Closed"
670
+ msgstr ""
671
+
672
+ #: includes/template-functions.php:617
673
+ msgid "Holidays"
674
+ msgstr ""
675
+
676
+ #: includes/template-functions.php:639
677
+ msgid "Special Opening Hours"
678
+ msgstr ""
679
+
680
+ #: includes/template-functions.php:736
681
+ msgid "Get Directions"
682
+ msgstr ""
683
+
684
+ #: lib/simple-admin-pages/classes/AdminPage.class.php:173
685
+ msgid "You do not have sufficient permissions to access this page."
686
+ msgstr ""
687
+
688
+ #: lib/simple-admin-pages/classes/AdminPageSetting.InfiniteTable.class.php:108
689
+ #: lib/simple-admin-pages/classes/AdminPageSetting.InfiniteTable.class.php:129
690
+ msgid "Delete"
691
+ msgstr ""
692
+
693
+ #: lib/simple-admin-pages/classes/AdminPageSetting.InfiniteTable.class.php:133
694
+ msgid "ADD ROW"
695
+ msgstr ""
readme.txt CHANGED
@@ -23,6 +23,7 @@ Add schema structured data to any page and/or post type on your site. Also easil
23
  * Create an SEO-friendly contact card that you can add via Gutenberg block or shortcode
24
  * Easily include a Google map, opening hours and all your business details
25
  * Add multiple locations
 
26
 
27
  The plugin comes with a database of every organization type schema and every rich results type. With this you can easily create a new schema element and assign a specific structured data type to a page, an individual post, an entire post type, or to your site as a whole.
28
 
@@ -32,17 +33,19 @@ Whether you're running your website for a local business, a corporation, a resta
32
 
33
  = Business Profile Contact Card =
34
 
35
- The Five Star Business Profile and Schema plugin is also perfect for adding your contact details to any page on your site. It comes with a handy form to help you fill in your info, which then gets automatically included on your site both as a contact card and as schema structured data.
36
 
37
  <strong>Includes Gutenberg schema block for displaying your contact details!</strong> You can also use the contact shortcode or widget to add in the structured data to your vcard. These allow you to display the following business contact info on any page:
38
 
39
  * Business name
40
  * Address
41
- * Phone number
 
42
  * Contact page link or email address
43
  * Link to Google Map with directions to your establishment
44
  * Google Map showing your location
45
- * Opening hours
 
46
 
47
  For all of this information, the correct schema.org markup is added, in the new JSON-LD format. This helps search engines, like Google, discover your address, phone number and opening hours, so they can display them with your listing on Google.
48
 
@@ -188,6 +191,17 @@ You'll find more help in the [User Guide](http://doc.themeofthecrop.com/plugins/
188
 
189
  == Changelog ==
190
 
 
 
 
 
 
 
 
 
 
 
 
191
  = 2.0.9 (2020-09-11) =
192
  - Corrects recent issue causing the feedback notice to not dismiss correctly
193
 
23
  * Create an SEO-friendly contact card that you can add via Gutenberg block or shortcode
24
  * Easily include a Google map, opening hours and all your business details
25
  * Add multiple locations
26
+ * Test any page on your site using Google's Rich Results Test
27
 
28
  The plugin comes with a database of every organization type schema and every rich results type. With this you can easily create a new schema element and assign a specific structured data type to a page, an individual post, an entire post type, or to your site as a whole.
29
 
33
 
34
  = Business Profile Contact Card =
35
 
36
+ The Five Star Business Profile and Schema plugin is also perfect for adding your contact details to any page on your site. It comes with a handy form to help you fill in your info, which then gets automatically included on your site both as a contact card and as schema structured data, using the new JSON-LD format.
37
 
38
  <strong>Includes Gutenberg schema block for displaying your contact details!</strong> You can also use the contact shortcode or widget to add in the structured data to your vcard. These allow you to display the following business contact info on any page:
39
 
40
  * Business name
41
  * Address
42
+ * Phone number
43
+ * Separate click-to-call phone number
44
  * Contact page link or email address
45
  * Link to Google Map with directions to your establishment
46
  * Google Map showing your location
47
+ * Opening hours
48
+ * Exceptions for opening hours, to specify days that are closed or have different hours (e.g. holidays)
49
 
50
  For all of this information, the correct schema.org markup is added, in the new JSON-LD format. This helps search engines, like Google, discover your address, phone number and opening hours, so they can display them with your listing on Google.
51
 
191
 
192
  == Changelog ==
193
 
194
+ = 2.1.0 (2020-10-13) =
195
+ - <strong>This is a relatively big update with several new features and corrections, etc., so please take caution and test before updating on a live site (or wait a few days before updating in case some minor corrective updates need to be released).</strong>
196
+ - Switched the structured data generated by the contact card to the new JSON-LD format.
197
+ - Added an option for a separate "click to call" phone number, applicable both to the main settings and to specific locations.
198
+ - Added a fallback functionality, so that, if you do not fill in a specific field (e.g. phone number) for an individual location, it will use what you set in the main settings.
199
+ - Added an option to turn off the automatic insertion of the contact card on the specified contact page.
200
+ - Added exceptions, so you now have the ability to have specific days that are either closed or have different hours (e.g. holidays), without having to alter your main schedule. Applicable both in the main settings and for specific locations.
201
+ - Added a button to the admin bar with a link to test the current page in Google's Rich Results Test.
202
+ - Added in a German translation that was submitted to us.
203
+ - Generated a new .pot file.
204
+
205
  = 2.0.9 (2020-09-11) =
206
  - Corrects recent issue causing the feedback notice to not dismiss correctly
207
 
templates/contact-card.php CHANGED
@@ -94,10 +94,23 @@
94
  * @since 1.1.0
95
  */
96
  ?>
97
-
98
- <address class="bp-contact-card" itemscope itemtype="http://schema.org/<?php echo bpfwp_setting( 'schema-type', bpfwp_get_display( 'location' ) ); ?>">
99
  <?php if ( bpfwp_setting( 'image', bpfwp_get_display( 'location' ) ) ) : ?>
100
- <meta itemprop="image" content="<?php echo esc_url( wp_get_attachment_url( bpfwp_setting( 'image', bpfwp_get_display( 'location' ) ) ) ); ?>">
101
  <?php endif; ?>
102
- <?php foreach ( $data as $data => $callback ) { call_user_func( $callback, bpfwp_get_display( 'location' ) ); } ?>
 
 
 
 
 
 
 
 
 
 
 
 
103
  </address>
 
94
  * @since 1.1.0
95
  */
96
  ?>
97
+ <?php $json_ld_data = array( 'type' => bpfwp_setting( 'schema-type', bpfwp_get_display( 'location' ) ) ); ?>
98
+ <address class="bp-contact-card">
99
  <?php if ( bpfwp_setting( 'image', bpfwp_get_display( 'location' ) ) ) : ?>
100
+ <?php $json_ld_data['image'] = wp_get_attachment_url( bpfwp_setting( 'image', bpfwp_get_display( 'location' ) ) ); ?>
101
  <?php endif; ?>
102
+ <?php
103
+ foreach ( $data as $data => $callback ) {
104
+
105
+ $return_array = call_user_func( $callback, bpfwp_get_display( 'location' ) );
106
+ if ( is_array( $return_array ) ) { $json_ld_data = array_merge( $json_ld_data, $return_array ); }
107
+ }
108
+ ?>
109
+ <script type="application/ld+json">
110
+ {
111
+ "@context": "https://schema.org/",
112
+ <?php echo trim( bpfwp_json_ld_contact_print( false, $json_ld_data ), ',' ); ?>
113
+ }
114
+ </script>
115
  </address>
116
+ <?php // "openingHours": ["Mo,Tu,We 9:00-17:00","Th,Fr,Sa 9:00-19:00","Su 12:00-17:00"] ?>