WP Recipe Maker - Version 1.10.0

Version Description

  • Feature: Change recipe template colors in the settings
  • Feature: Change recipe template labels in the settings
  • Feature: Manage courses and cuisines
  • Improvement: Show days in recipe times
  • Improvement: Recipe import performance
  • Improvement: Prevent accidental closing of the modal
  • Improvement: Setting to use featured image of parent post
  • Improvement: Prevent recipe getting overwritten by our other shortcodes
  • Fix: Prevent issue with post content replacing recipe notes
  • Fix: Only import numbers for nutrition facts
  • Fix: WordFence Compatibility
Download this release

Release Info

Developer BrechtVds
Plugin Icon 128x128 WP Recipe Maker
Version 1.10.0
Comparing to
See all releases

Code changes from version 1.9.1 to 1.10.0

Files changed (56) hide show
  1. assets/css/admin/manage.min.css +1 -1
  2. assets/css/admin/manage.scss +3 -1
  3. assets/js/admin/manage.js +56 -3
  4. assets/js/admin/modal.js +3 -0
  5. assets/js/admin/recipe-form.js +55 -38
  6. assets/js/admin/settings.js +1 -0
  7. includes/admin/class-wprm-import-manager.php +12 -2
  8. includes/admin/class-wprm-migrations.php +33 -1
  9. includes/admin/class-wprm-recipe-sanitizer.php +6 -3
  10. includes/admin/class-wprm-recipe-saver.php +5 -2
  11. includes/admin/import/class-wprm-import-bigoven.php +39 -24
  12. includes/admin/import/class-wprm-import-easyrecipe.php +69 -27
  13. includes/admin/import/class-wprm-import-mealplannerpro.php +23 -1
  14. includes/admin/import/class-wprm-import-wpultimaterecipe.php +64 -59
  15. includes/admin/import/class-wprm-import-ziplist.php +20 -1
  16. includes/admin/import/class-wprm-import.php +16 -1
  17. includes/admin/manage/class-wprm-manage-taxonomies.php +96 -0
  18. includes/admin/manage/class-wprm-manage.php +74 -40
  19. includes/admin/migrations/wprm-1-10-0-wpurp.php +39 -0
  20. includes/admin/modal/class-wprm-modal.php +4 -1
  21. includes/class-wp-recipe-maker.php +2 -1
  22. includes/class-wprm-activator.php +1 -1
  23. includes/public/class-wprm-recipe.php +13 -2
  24. includes/public/class-wprm-settings.php +68 -7
  25. includes/public/class-wprm-shortcode.php +22 -20
  26. includes/public/class-wprm-taxonomies.php +15 -3
  27. includes/public/class-wprm-template-helper.php +141 -5
  28. includes/public/class-wprm-template-manager.php +34 -0
  29. languages/wp-recipe-maker-de_DE.mo +0 -0
  30. languages/wp-recipe-maker-de_DE.po +1219 -0
  31. readme.txt +19 -1
  32. templates/admin/manage.php +15 -7
  33. templates/admin/manage/ingredients.php +5 -1
  34. templates/admin/manage/recipes.php +1 -1
  35. templates/admin/manage/taxonomies.php +26 -0
  36. templates/admin/menu/faq/whats_new.php +22 -0
  37. templates/admin/menu/{import-overview.php → import/import-overview.php} +19 -7
  38. templates/admin/menu/{import-recipes.php → import/import-recipes.php} +16 -2
  39. templates/admin/menu/import/import-search.php +45 -0
  40. templates/admin/modal/tabs/recipe-details.php +9 -18
  41. templates/admin/settings.php +1 -0
  42. templates/admin/settings/appearance.php +124 -0
  43. templates/admin/settings/labels.php +43 -0
  44. templates/recipe/clean-print-with-image/clean-print-with-image.min.css +1 -1
  45. templates/recipe/clean-print-with-image/clean-print-with-image.php +30 -38
  46. templates/recipe/clean-print-with-image/clean-print-with-image.scss +1 -1
  47. templates/recipe/clean-print/clean-print.min.css +1 -1
  48. templates/recipe/clean-print/clean-print.php +30 -38
  49. templates/recipe/clean-print/clean-print.scss +1 -1
  50. templates/recipe/simple/simple.min.css +1 -1
  51. templates/recipe/simple/simple.php +31 -39
  52. templates/recipe/simple/simple.scss +1 -1
  53. templates/recipe/tastefully-simple/tastefully-simple.min.css +1 -1
  54. templates/recipe/tastefully-simple/tastefully-simple.php +36 -44
  55. templates/recipe/tastefully-simple/tastefully-simple.scss +16 -28
  56. wp-recipe-maker.php +1 -1
assets/css/admin/manage.min.css CHANGED
@@ -1 +1 @@
1
- .wprm-manage .wprm-manage-datatable{display:none}.wprm-manage .wprm-manage-datatable .wprm-icon{cursor:pointer;color:#444}.wprm-manage .dataTables_wrapper{margin-top:20px}.wprm-manage .dataTables_wrapper .wprm-manage-datatable{display:table}.wprm-manage-ingredients-actions-tooltip,.wprm-manage-recipes-actions-tooltip{text-align:right;min-width:250px}.wprm-manage-ingredients-actions-tooltip .tooltip-header,.wprm-manage-recipes-actions-tooltip .tooltip-header{margin-bottom:5px;font-weight:700}.wprm-manage-ingredients-actions-tooltip a,.wprm-manage-recipes-actions-tooltip a{color:#fff;display:block;text-decoration:none}.wprm-manage-ingredients-actions-tooltip a:hover,.wprm-manage-recipes-actions-tooltip a:hover{text-decoration:underline}
1
+ .wprm-manage .wprm-manage-datatable{display:none}.wprm-manage .wprm-manage-datatable .wprm-icon{cursor:pointer;color:#444}.wprm-manage .dataTables_wrapper{margin-top:20px}.wprm-manage .dataTables_wrapper .wprm-manage-datatable{display:table}.wprm-manage-custom-taxonomies-actions-tooltip,.wprm-manage-ingredients-actions-tooltip,.wprm-manage-recipes-actions-tooltip,.wprm-manage-taxonomies-actions-tooltip{text-align:right;min-width:250px}.wprm-manage-custom-taxonomies-actions-tooltip .tooltip-header,.wprm-manage-ingredients-actions-tooltip .tooltip-header,.wprm-manage-recipes-actions-tooltip .tooltip-header,.wprm-manage-taxonomies-actions-tooltip .tooltip-header{margin-bottom:5px;font-weight:700}.wprm-manage-custom-taxonomies-actions-tooltip a,.wprm-manage-ingredients-actions-tooltip a,.wprm-manage-recipes-actions-tooltip a,.wprm-manage-taxonomies-actions-tooltip a{color:#fff;display:block;text-decoration:none}.wprm-manage-custom-taxonomies-actions-tooltip a:hover,.wprm-manage-ingredients-actions-tooltip a:hover,.wprm-manage-recipes-actions-tooltip a:hover,.wprm-manage-taxonomies-actions-tooltip a:hover{text-decoration:underline}
assets/css/admin/manage.scss CHANGED
@@ -18,7 +18,9 @@
18
  }
19
 
20
  .wprm-manage-recipes-actions-tooltip,
21
- .wprm-manage-ingredients-actions-tooltip {
 
 
22
  text-align: right;
23
  min-width: 250px;
24
 
18
  }
19
 
20
  .wprm-manage-recipes-actions-tooltip,
21
+ .wprm-manage-ingredients-actions-tooltip,
22
+ .wprm-manage-taxonomies-actions-tooltip,
23
+ .wprm-manage-custom-taxonomies-actions-tooltip {
24
  text-align: right;
25
  min-width: 250px;
26
 
assets/js/admin/manage.js CHANGED
@@ -12,11 +12,12 @@ wprm_admin.update_term_metadata = function(term_id, field, value) {
12
  jQuery.post(wprm_manage.ajax_url, data);
13
  };
14
 
15
- wprm_admin.delete_or_merge_term = function(term_id, new_term_id) {
16
  var data = {
17
  action: 'wprm_delete_or_merge_term',
18
  security: wprm_manage.nonce,
19
  term_id: term_id,
 
20
  new_term_id: new_term_id
21
  };
22
 
@@ -99,6 +100,37 @@ jQuery(document).ready(function($) {
99
  },
100
  });
101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
102
  jQuery('.wprm-manage-recipes-actions').tooltipster({
103
  content: '<div class="wprm-manage-recipes-actions-tooltip"><div class="tooltip-header">&nbsp;</div><a href="#" class="wprm-manage-recipes-actions-edit">Edit Recipe</a><a href="#" class="wprm-manage-recipes-actions-delete">Delete Recipe</a></div>',
104
  contentAsHTML: true,
@@ -150,13 +182,34 @@ jQuery(document).ready(function($) {
150
 
151
  var new_term = parseInt(prompt('What is the ID of the ingredient that you want to merge "' + name + '" into?', ''));
152
  if(new_term) {
153
- wprm_admin.delete_or_merge_term(id, new_term);
 
 
 
 
 
 
 
 
 
 
 
154
  }
155
  });
156
 
157
  jQuery(document).on('click', '.wprm-manage-ingredients-actions-delete', function() {
158
  var id = jQuery(this).data('id');
159
- wprm_admin.delete_or_merge_term(id, 0);
 
 
 
 
 
 
 
 
 
 
160
  });
161
 
162
  jQuery(document).on('click', '.wprm-manage-recipes-actions-edit', function() {
12
  jQuery.post(wprm_manage.ajax_url, data);
13
  };
14
 
15
+ wprm_admin.delete_or_merge_term = function(term_id, taxonomy, new_term_id) {
16
  var data = {
17
  action: 'wprm_delete_or_merge_term',
18
  security: wprm_manage.nonce,
19
  term_id: term_id,
20
+ taxonomy: taxonomy,
21
  new_term_id: new_term_id
22
  };
23
 
100
  },
101
  });
102
 
103
+ jQuery('.wprm-manage-taxonomies-actions').tooltipster({
104
+ content: '<div class="wprm-manage-taxonomies-actions-tooltip"><div class="tooltip-header">&nbsp;</div><a href="#" class="wprm-manage-taxonomies-actions-merge">Merge into Another Term</a><a href="#" class="wprm-manage-taxonomies-actions-delete">Delete Term</a></div>',
105
+ contentAsHTML: true,
106
+ functionBefore: function() {
107
+ var instances = jQuery.tooltipster.instances();
108
+ jQuery.each(instances, function(i, instance){
109
+ instance.close();
110
+ });
111
+ },
112
+ functionReady: function(instance, helper) {
113
+ var id = parseInt(jQuery(helper.origin).data('id')),
114
+ count = parseInt(jQuery(helper.origin).data('count')),
115
+ name = jQuery('#wprm-manage-taxonomies-name-' + id).text();
116
+
117
+ jQuery(helper.tooltip).find('a').data('id', id);
118
+ jQuery(helper.tooltip).find('.tooltip-header').text('#' + id + ' - ' + name);
119
+ },
120
+ interactive: true,
121
+ delay: 0,
122
+ side: 'left',
123
+ trigger: 'custom',
124
+ triggerOpen: {
125
+ mouseenter: true,
126
+ touchstart: true
127
+ },
128
+ triggerClose: {
129
+ click: true,
130
+ tap: true
131
+ },
132
+ });
133
+
134
  jQuery('.wprm-manage-recipes-actions').tooltipster({
135
  content: '<div class="wprm-manage-recipes-actions-tooltip"><div class="tooltip-header">&nbsp;</div><a href="#" class="wprm-manage-recipes-actions-edit">Edit Recipe</a><a href="#" class="wprm-manage-recipes-actions-delete">Delete Recipe</a></div>',
136
  contentAsHTML: true,
182
 
183
  var new_term = parseInt(prompt('What is the ID of the ingredient that you want to merge "' + name + '" into?', ''));
184
  if(new_term) {
185
+ wprm_admin.delete_or_merge_term(id, 'ingredient', new_term);
186
+ }
187
+ });
188
+
189
+ jQuery(document).on('click', '.wprm-manage-taxonomies-actions-merge', function() {
190
+ var id = jQuery(this).data('id'),
191
+ name = jQuery('#wprm-manage-taxonomies-name-' + id).text(),
192
+ taxonomy = jQuery('.wprm-manage-taxonomies').data('taxonomy');
193
+
194
+ var new_term = parseInt(prompt('What is the ID of the term that you want to merge "' + name + '" into?', ''));
195
+ if(new_term) {
196
+ wprm_admin.delete_or_merge_term(id, taxonomy, new_term);
197
  }
198
  });
199
 
200
  jQuery(document).on('click', '.wprm-manage-ingredients-actions-delete', function() {
201
  var id = jQuery(this).data('id');
202
+ wprm_admin.delete_or_merge_term(id, 'ingredient', 0);
203
+ });
204
+
205
+ jQuery(document).on('click', '.wprm-manage-taxonomies-actions-delete', function() {
206
+ var id = jQuery(this).data('id'),
207
+ name = jQuery('#wprm-manage-taxonomies-name-' + id).text(),
208
+ taxonomy = jQuery('.wprm-manage-taxonomies').data('taxonomy');
209
+
210
+ if(confirm('Are you sure you want to delete "' + name + '"?')) {
211
+ wprm_admin.delete_or_merge_term(id, taxonomy, 0);
212
+ }
213
  });
214
 
215
  jQuery(document).on('click', '.wprm-manage-recipes-actions-edit', function() {
assets/js/admin/modal.js CHANGED
@@ -56,6 +56,7 @@ wprm_admin.add_text_to_editor = function(text) {
56
  jQuery('textarea#' + wprm_admin.active_editor_id).val(current + text);
57
  } else {
58
  tinyMCE.get(wprm_admin.active_editor_id).focus(true);
 
59
  tinyMCE.activeEditor.execCommand('mceInsertContent', false, text);
60
  }
61
  }
@@ -70,7 +71,9 @@ jQuery(document).ready(function($) {
70
 
71
  // Closing Modal
72
  jQuery('.wprm-modal-container').on('click', '.wprm-modal-close, .wprm-modal-backdrop', function() {
 
73
  wprm_admin.close_modal();
 
74
  });
75
 
76
  // Modal Menu
56
  jQuery('textarea#' + wprm_admin.active_editor_id).val(current + text);
57
  } else {
58
  tinyMCE.get(wprm_admin.active_editor_id).focus(true);
59
+ tinyMCE.activeEditor.selection.collapse(false);
60
  tinyMCE.activeEditor.execCommand('mceInsertContent', false, text);
61
  }
62
  }
71
 
72
  // Closing Modal
73
  jQuery('.wprm-modal-container').on('click', '.wprm-modal-close, .wprm-modal-backdrop', function() {
74
+ if(confirm(wprm_modal.text.modal_close_confirm)) {
75
  wprm_admin.close_modal();
76
+ }
77
  });
78
 
79
  // Modal Menu
assets/js/admin/recipe-form.js CHANGED
@@ -5,43 +5,51 @@ wprm_admin.total_time_set = false;
5
 
6
  wprm_admin.editing_recipe = 0;
7
  wprm_admin.set_recipe = function(args) {
8
- var recipe_id = args.recipe_id ? args.recipe_id : 0;
9
 
10
- wprm_admin.editing_recipe = recipe_id;
11
- wprm_admin.clear_recipe_fields();
12
- if(typeof wprmp_admin !== 'undefined') {
13
- wprmp_admin.clear_recipe_fields();
14
- }
15
 
16
- if (recipe_id !== 0) {
17
- var button = jQuery('.wprm-button-action');
18
 
19
- jQuery('.wprm-router.active').find('.wprm-menu-item').each(function() {
20
- jQuery(this).data('button', wprm_modal.text.action_button_update);
21
- });
22
- button.text(wprm_modal.text.action_button_update);
 
 
23
 
24
- wprm_admin.disable_menu();
 
 
 
25
 
26
- var data = {
27
- action: 'wprm_get_recipe',
28
- security: wprm_modal.nonce,
29
- recipe_id: recipe_id
30
- };
31
 
32
- wprm_admin.start_loader(button);
 
 
 
 
33
 
34
- jQuery.post(wprm_modal.ajax_url, data, function(out) {
35
- wprm_admin.stop_loader(button);
36
 
37
- if (out.success) {
38
- wprm_admin.set_recipe_fields(out.data.recipe);
39
- if(typeof wprmp_admin !== 'undefined') {
40
- wprmp_admin.set_recipe_fields(out.data.recipe);
41
- }
42
- }
43
- }, 'json');
44
- }
 
 
 
 
45
  };
46
 
47
  wprm_admin.edit_recipe = function() {
@@ -127,19 +135,22 @@ wprm_admin.set_recipe_fields = function(recipe) {
127
  if (cook_time) wprm_admin.cook_time_set = true;
128
  if (total_time) wprm_admin.total_time_set = true;
129
 
130
- wprm_admin.set_recipe_tags(recipe, 'course');
131
- wprm_admin.set_recipe_tags(recipe, 'cuisine');
132
-
 
 
 
133
  // Ingredients & Instructions
134
  wprm_admin.set_recipe_ingredient_fields(recipe.ingredients);
135
  wprm_admin.set_recipe_instruction_fields(recipe.instructions);
136
 
137
  // Recipe Notes
138
  if (typeof tinyMCE !== 'undefined' && tinyMCE.get('wprm_recipe_notes') && !tinyMCE.get('wprm_recipe_notes').isHidden()) {
139
- tinyMCE.get('wprm_recipe_notes').focus(true);
140
- tinyMCE.activeEditor.setContent(recipe.notes);
141
  } else {
142
- jQuery('#wprm_recipe_notes').val(recipe.notes);
143
  }
144
  };
145
 
@@ -339,6 +350,12 @@ wprm_admin.insert_update_recipe = function(button) {
339
  }
340
  };
341
 
 
 
 
 
 
 
342
  // Recipe Ingredients
343
  var ingredients = [];
344
  var ingredient_group = {
@@ -404,10 +421,10 @@ wprm_admin.insert_update_recipe = function(button) {
404
  recipe.instructions = instructions;
405
 
406
  // Recipe Notes
407
- if (jQuery('#wp-wprm_recipe_notes-wrap').hasClass('tmce-active')) {
408
- recipe.notes = tinyMCE.activeEditor.getContent();
409
  } else {
410
- recipe.notes = jQuery('#wprm_recipe_notes').val();
411
  }
412
 
413
  // Add any Premium fields
5
 
6
  wprm_admin.editing_recipe = 0;
7
  wprm_admin.set_recipe = function(args) {
8
+ var recipe_id = args.recipe_id ? args.recipe_id : 0;
9
 
10
+ wprm_admin.editing_recipe = recipe_id;
11
+ wprm_admin.clear_recipe_fields();
12
+ if(typeof wprmp_admin !== 'undefined') {
13
+ wprmp_admin.clear_recipe_fields();
14
+ }
15
 
16
+ if (recipe_id == 0) {
17
+ var button = jQuery('.wprm-button-action');
18
 
19
+ jQuery('.wprm-router.active').find('.wprm-menu-item').each(function() {
20
+ jQuery(this).data('button', wprm_modal.text.action_button_insert);
21
+ });
22
+ button.text(wprm_modal.text.action_button_insert);
23
+ } else {
24
+ var button = jQuery('.wprm-button-action');
25
 
26
+ jQuery('.wprm-router.active').find('.wprm-menu-item').each(function() {
27
+ jQuery(this).data('button', wprm_modal.text.action_button_update);
28
+ });
29
+ button.text(wprm_modal.text.action_button_update);
30
 
31
+ wprm_admin.disable_menu();
 
 
 
 
32
 
33
+ var data = {
34
+ action: 'wprm_get_recipe',
35
+ security: wprm_modal.nonce,
36
+ recipe_id: recipe_id
37
+ };
38
 
39
+ wprm_admin.start_loader(button);
 
40
 
41
+ jQuery.post(wprm_modal.ajax_url, data, function(out) {
42
+ wprm_admin.stop_loader(button);
43
+
44
+ if (out.success) {
45
+ wprm_admin.set_recipe_fields(out.data.recipe);
46
+ if(typeof wprmp_admin !== 'undefined') {
47
+ wprmp_admin.set_recipe_fields(out.data.recipe);
48
+ }
49
+ jQuery('.wprm-frame-title').find('h1').text(wprm_modal.text.edit_recipe);
50
+ }
51
+ }, 'json');
52
+ }
53
  };
54
 
55
  wprm_admin.edit_recipe = function() {
135
  if (cook_time) wprm_admin.cook_time_set = true;
136
  if (total_time) wprm_admin.total_time_set = true;
137
 
138
+ for (var tag in recipe.tags) {
139
+ if (recipe.tags.hasOwnProperty(tag)) {
140
+ wprm_admin.set_recipe_tags(recipe, tag);
141
+ }
142
+ }
143
+
144
  // Ingredients & Instructions
145
  wprm_admin.set_recipe_ingredient_fields(recipe.ingredients);
146
  wprm_admin.set_recipe_instruction_fields(recipe.instructions);
147
 
148
  // Recipe Notes
149
  if (typeof tinyMCE !== 'undefined' && tinyMCE.get('wprm_recipe_notes') && !tinyMCE.get('wprm_recipe_notes').isHidden()) {
150
+ tinyMCE.get('wprm_recipe_notes').focus(true);
151
+ tinyMCE.activeEditor.setContent(recipe.notes);
152
  } else {
153
+ jQuery('#wprm_recipe_notes').val(recipe.notes);
154
  }
155
  };
156
 
350
  }
351
  };
352
 
353
+ // Recipe Tags
354
+ recipe.tags = {};
355
+ jQuery('.wprm-recipe-tags').each(function() {
356
+ recipe.tags[jQuery(this).data('key')] = jQuery(this).val();
357
+ });
358
+
359
  // Recipe Ingredients
360
  var ingredients = [];
361
  var ingredient_group = {
421
  recipe.instructions = instructions;
422
 
423
  // Recipe Notes
424
+ if (typeof tinyMCE !== 'undefined' && tinyMCE.get('wprm_recipe_notes') && !tinyMCE.get('wprm_recipe_notes').isHidden()) {
425
+ recipe.notes = tinyMCE.get('wprm_recipe_notes').getContent();
426
  } else {
427
+ recipe.notes = jQuery('#wprm_recipe_notes').val();
428
  }
429
 
430
  // Add any Premium fields
assets/js/admin/settings.js CHANGED
@@ -2,4 +2,5 @@ var wprm_admin = wprm_admin || {};
2
 
3
  jQuery(document).ready(function($) {
4
  jQuery('.wprm-settings').find('select').select2_wprm();
 
5
  });
2
 
3
  jQuery(document).ready(function($) {
4
  jQuery('.wprm-settings').find('select').select2_wprm();
5
+ jQuery('.wprm-settings').find('.wprm-color').wpColorPicker();
6
  });
includes/admin/class-wprm-import-manager.php CHANGED
@@ -49,6 +49,7 @@ class WPRM_Import_Manager {
49
  public static function add_submenu_page() {
50
  add_submenu_page( 'wprecipemaker', __( 'Import Recipes', 'wp-recipe-maker' ), __( 'Import Recipes', 'wp-recipe-maker' ), 'manage_options', 'wprm_import_overview', array( __CLASS__, 'overview_page_template' ) );
51
  add_submenu_page( null, __( 'Import Recipes', 'wp-recipe-maker' ), __( 'Import Recipes', 'wp-recipe-maker' ), 'manage_options', 'wprm_import', array( __CLASS__, 'import_page_template' ) );
 
52
  }
53
 
54
  /**
@@ -68,7 +69,7 @@ class WPRM_Import_Manager {
68
  * @since 1.0.0
69
  */
70
  public static function overview_page_template() {
71
- require_once( WPRM_DIR . 'templates/admin/menu/import-overview.php' );
72
  }
73
 
74
  /**
@@ -77,7 +78,16 @@ class WPRM_Import_Manager {
77
  * @since 1.0.0
78
  */
79
  public static function import_page_template() {
80
- require_once( WPRM_DIR . 'templates/admin/menu/import-recipes.php' );
 
 
 
 
 
 
 
 
 
81
  }
82
 
83
  /**
49
  public static function add_submenu_page() {
50
  add_submenu_page( 'wprecipemaker', __( 'Import Recipes', 'wp-recipe-maker' ), __( 'Import Recipes', 'wp-recipe-maker' ), 'manage_options', 'wprm_import_overview', array( __CLASS__, 'overview_page_template' ) );
51
  add_submenu_page( null, __( 'Import Recipes', 'wp-recipe-maker' ), __( 'Import Recipes', 'wp-recipe-maker' ), 'manage_options', 'wprm_import', array( __CLASS__, 'import_page_template' ) );
52
+ add_submenu_page( null, __( 'Search Recipes', 'wp-recipe-maker' ), __( 'Search Recipes', 'wp-recipe-maker' ), 'manage_options', 'wprm_import_search', array( __CLASS__, 'import_search_page_template' ) );
53
  }
54
 
55
  /**
69
  * @since 1.0.0
70
  */
71
  public static function overview_page_template() {
72
+ require_once( WPRM_DIR . 'templates/admin/menu/import/import-overview.php' );
73
  }
74
 
75
  /**
78
  * @since 1.0.0
79
  */
80
  public static function import_page_template() {
81
+ require_once( WPRM_DIR . 'templates/admin/menu/import/import-recipes.php' );
82
+ }
83
+
84
+ /**
85
+ * Get the template for the import search page.
86
+ *
87
+ * @since 1.10.0
88
+ */
89
+ public static function import_search_page_template() {
90
+ require_once( WPRM_DIR . 'templates/admin/menu/import/import-search.php' );
91
  }
92
 
93
  /**
includes/admin/class-wprm-migrations.php CHANGED
@@ -19,6 +19,15 @@
19
  */
20
  class WPRM_Migrations {
21
 
 
 
 
 
 
 
 
 
 
22
  /**
23
  * Register actions and filters.
24
  *
@@ -26,6 +35,7 @@ class WPRM_Migrations {
26
  */
27
  public static function init() {
28
  add_action( 'admin_init', array( __CLASS__, 'check_if_migration_needed' ) );
 
29
  }
30
 
31
  /**
@@ -36,12 +46,34 @@ class WPRM_Migrations {
36
  public static function check_if_migration_needed() {
37
  $migrated_to_version = get_option( 'wprm_migrated_to_version', '0.0.0' );
38
 
39
- if ( version_compare( $migrated_to_version, WPRM_VERSION ) < 0 ) {
40
  require_once( WPRM_DIR . 'includes/admin/migrations/wprm-1-7-1-ingredient-ids.php' );
41
  }
 
 
 
 
 
 
 
42
 
43
  update_option( 'wprm_migrated_to_version', WPRM_VERSION );
44
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
45
  }
46
 
47
  WPRM_Migrations::init();
19
  */
20
  class WPRM_Migrations {
21
 
22
+ /**
23
+ * Notices to show after migrating.
24
+ *
25
+ * @since 1.10.0
26
+ * @access private
27
+ * @var array $notices Notices to show.
28
+ */
29
+ private static $notices = array();
30
+
31
  /**
32
  * Register actions and filters.
33
  *
35
  */
36
  public static function init() {
37
  add_action( 'admin_init', array( __CLASS__, 'check_if_migration_needed' ) );
38
+ add_action( 'admin_notices', array( __CLASS__, 'migration_notices' ) );
39
  }
40
 
41
  /**
46
  public static function check_if_migration_needed() {
47
  $migrated_to_version = get_option( 'wprm_migrated_to_version', '0.0.0' );
48
 
49
+ if ( version_compare( $migrated_to_version, '1.7.1' ) < 0 ) {
50
  require_once( WPRM_DIR . 'includes/admin/migrations/wprm-1-7-1-ingredient-ids.php' );
51
  }
52
+ if ( version_compare( $migrated_to_version, '1.10.0' ) < 0 ) {
53
+ require_once( WPRM_DIR . 'includes/admin/migrations/wprm-1-10-0-wpurp.php' );
54
+ }
55
+
56
+ if ( '0.0.0' === $migrated_to_version ) {
57
+ self::$notices = array();
58
+ }
59
 
60
  update_option( 'wprm_migrated_to_version', WPRM_VERSION );
61
  }
62
+
63
+ /**
64
+ * Show any migration notices that might have been set.
65
+ *
66
+ * @since 1.10.0
67
+ */
68
+ public static function migration_notices() {
69
+ foreach ( self::$notices as $notice ) {
70
+ echo '<div class="notice notice-warning is-dismissible">';
71
+ echo '<p><strong>WP Recipe Maker</strong><br/>';
72
+ echo wp_kses( $notice );
73
+ echo '</p>';
74
+ echo '</div>';
75
+ }
76
+ }
77
  }
78
 
79
  WPRM_Migrations::init();
includes/admin/class-wprm-recipe-sanitizer.php CHANGED
@@ -48,8 +48,11 @@ class WPRM_Recipe_Sanitizer {
48
 
49
  // Recipe Tags.
50
  $sanitized_recipe['tags'] = array();
51
- $sanitized_recipe['tags']['course'] = isset( $recipe['tags'] ) && isset( $recipe['tags']['course'] ) && $recipe['tags']['course'] ? array_map( array( __CLASS__, 'sanitize_tags' ), $recipe['tags']['course'] ) : array();
52
- $sanitized_recipe['tags']['cuisine'] = isset( $recipe['tags'] ) && isset( $recipe['tags']['cuisine'] ) && $recipe['tags']['cuisine'] ? array_map( array( __CLASS__, 'sanitize_tags' ), $recipe['tags']['cuisine'] ) : array();
 
 
 
53
 
54
  // Recipe Ingredients.
55
  $sanitized_recipe['ingredients'] = array();
@@ -160,7 +163,7 @@ class WPRM_Recipe_Sanitizer {
160
  );
161
 
162
  foreach ( $nutrition_fields as $field ) {
163
- $sanitized_recipe['nutrition'][ $field ] = isset( $recipe['nutrition'][ $field ] ) && '' !== trim( $recipe['nutrition'][ $field ] ) ? str_replace( ',', '.', $recipe['nutrition'][ $field ] ) : false;
164
  }
165
  }
166
 
48
 
49
  // Recipe Tags.
50
  $sanitized_recipe['tags'] = array();
51
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
52
+ foreach ( $taxonomies as $taxonomy => $options ) {
53
+ $key = substr( $taxonomy, 5 ); // Get rid of wprm_.
54
+ $sanitized_recipe['tags'][ $key ] = isset( $recipe['tags'] ) && isset( $recipe['tags'][ $key ] ) && $recipe['tags'][ $key ] ? array_map( array( __CLASS__, 'sanitize_tags' ), $recipe['tags'][ $key ] ) : array();
55
+ }
56
 
57
  // Recipe Ingredients.
58
  $sanitized_recipe['ingredients'] = array();
163
  );
164
 
165
  foreach ( $nutrition_fields as $field ) {
166
+ $sanitized_recipe['nutrition'][ $field ] = isset( $recipe['nutrition'][ $field ] ) && '' !== trim( $recipe['nutrition'][ $field ] ) ? floatval( str_replace( ',', '.', $recipe['nutrition'][ $field ] ) ) : false;
167
  }
168
  }
169
 
includes/admin/class-wprm-recipe-saver.php CHANGED
@@ -101,8 +101,11 @@ class WPRM_Recipe_Saver {
101
  }
102
 
103
  // Recipe Taxonomies.
104
- wp_set_object_terms( $id, $recipe['tags']['course'], 'wprm_course', false );
105
- wp_set_object_terms( $id, $recipe['tags']['cuisine'], 'wprm_cuisine', false );
 
 
 
106
 
107
  // Recipe Ingredients.
108
  $ingredient_ids = array();
101
  }
102
 
103
  // Recipe Taxonomies.
104
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
105
+ foreach ( $taxonomies as $taxonomy => $options ) {
106
+ $key = substr( $taxonomy, 5 ); // Get rid of wprm_.
107
+ wp_set_object_terms( $id, $recipe['tags'][ $key ], $taxonomy, false );
108
+ }
109
 
110
  // Recipe Ingredients.
111
  $ingredient_ids = array();
includes/admin/import/class-wprm-import-bigoven.php CHANGED
@@ -27,6 +27,15 @@ class WPRM_Import_Bigoven extends WPRM_Import {
27
  return 'bigoven';
28
  }
29
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Get the name of this import source.
32
  *
@@ -45,34 +54,46 @@ class WPRM_Import_Bigoven extends WPRM_Import {
45
  return '';
46
  }
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  /**
49
  * Get a list of recipes that are available to import.
50
  *
51
  * @since 1.7.0
 
52
  */
53
- public function get_recipes() {
54
  $recipes = array();
55
 
56
- // Loop through all posts.
57
  $limit = 100;
58
- $offset = 0;
59
-
60
- while ( true ) {
61
- $args = array(
62
- 'post_type' => 'bo-recipe',
63
- 'post_status' => 'any',
64
- 'orderby' => 'date',
65
- 'order' => 'DESC',
66
- 'posts_per_page' => $limit,
67
- 'offset' => $offset,
68
- );
69
-
70
- $query = new WP_Query( $args );
71
 
72
- if ( ! $query->have_posts() ) {
73
- break;
74
- }
75
 
 
76
  $posts = $query->posts;
77
 
78
  foreach ( $posts as $post ) {
@@ -80,13 +101,7 @@ class WPRM_Import_Bigoven extends WPRM_Import {
80
  'name' => $post->post_title,
81
  'url' => get_edit_post_link( $post->ID ),
82
  );
83
-
84
- wp_cache_delete( $post->ID, 'posts' );
85
- wp_cache_delete( $post->ID, 'post_meta' );
86
  }
87
-
88
- $offset += $limit;
89
- wp_cache_flush();
90
  }
91
 
92
  return $recipes;
27
  return 'bigoven';
28
  }
29
 
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.10.0
34
+ */
35
+ public function requires_search() {
36
+ return false;
37
+ }
38
+
39
  /**
40
  * Get the name of this import source.
41
  *
54
  return '';
55
  }
56
 
57
+ /**
58
+ * Get the total number of recipes to import.
59
+ *
60
+ * @since 1.10.0
61
+ */
62
+ public function get_recipe_count() {
63
+ $args = array(
64
+ 'post_type' => 'bo-recipe',
65
+ 'post_status' => 'any',
66
+ 'posts_per_page' => 1,
67
+ );
68
+
69
+ $query = new WP_Query( $args );
70
+ return $query->found_posts;
71
+ }
72
+
73
  /**
74
  * Get a list of recipes that are available to import.
75
  *
76
  * @since 1.7.0
77
+ * @param int $page Page of recipes to get.
78
  */
79
+ public function get_recipes( $page = 0 ) {
80
  $recipes = array();
81
 
 
82
  $limit = 100;
83
+ $offset = $limit * $page;
84
+
85
+ $args = array(
86
+ 'post_type' => 'bo-recipe',
87
+ 'post_status' => 'any',
88
+ 'orderby' => 'date',
89
+ 'order' => 'DESC',
90
+ 'posts_per_page' => $limit,
91
+ 'offset' => $offset,
92
+ );
 
 
 
93
 
94
+ $query = new WP_Query( $args );
 
 
95
 
96
+ if ( $query->have_posts() ) {
97
  $posts = $query->posts;
98
 
99
  foreach ( $posts as $post ) {
101
  'name' => $post->post_title,
102
  'url' => get_edit_post_link( $post->ID ),
103
  );
 
 
 
104
  }
 
 
 
105
  }
106
 
107
  return $recipes;
includes/admin/import/class-wprm-import-easyrecipe.php CHANGED
@@ -27,6 +27,15 @@ class WPRM_Import_Easyrecipe extends WPRM_Import {
27
  return 'easyrecipe';
28
  }
29
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Get the name of this import source.
32
  *
@@ -46,38 +55,45 @@ class WPRM_Import_Easyrecipe extends WPRM_Import {
46
  }
47
 
48
  /**
49
- * Get a list of recipes that are available to import.
50
  *
51
- * @since 1.0.0
52
  */
53
- public function get_recipes() {
 
 
 
 
 
 
 
 
 
 
 
54
  if ( ! class_exists( 'simple_html_dom' ) && ! class_exists( 'simple_html_dom_node' ) ) {
55
  require_once( WPRM_DIR . 'vendor/simple_html_dom/simple_html_dom.php' );
56
  libxml_use_internal_errors( true );
57
  }
58
 
59
  $recipes = array();
 
60
 
61
- // Loop through all posts.
62
  $limit = 100;
63
- $offset = 0;
64
-
65
- while ( true ) {
66
- $args = array(
67
- 'post_type' => array( 'post', 'page' ),
68
- 'post_status' => 'any',
69
- 'orderby' => 'date',
70
- 'order' => 'DESC',
71
- 'posts_per_page' => $limit,
72
- 'offset' => $offset,
73
- );
74
-
75
- $query = new WP_Query( $args );
76
 
77
- if ( ! $query->have_posts() ) {
78
- break;
79
- }
80
 
 
81
  $posts = $query->posts;
82
 
83
  foreach ( $posts as $post ) {
@@ -95,16 +111,37 @@ class WPRM_Import_Easyrecipe extends WPRM_Import {
95
  );
96
  }
97
  }
98
-
99
- wp_cache_delete( $post->ID, 'posts' );
100
- wp_cache_delete( $post->ID, 'post_meta' );
101
  }
102
-
103
- $offset += $limit;
104
- wp_cache_flush();
105
  }
106
 
107
- return $recipes;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
108
  }
109
 
110
  /**
@@ -373,6 +410,11 @@ class WPRM_Import_Easyrecipe extends WPRM_Import {
373
  );
374
  wp_update_post( $update_content );
375
 
 
 
 
 
 
376
  // Migrate comment ratings.
377
  $comments = get_comments( array( 'post_id' => $post_id ) );
378
 
27
  return 'easyrecipe';
28
  }
29
 
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.10.0
34
+ */
35
+ public function requires_search() {
36
+ return true;
37
+ }
38
+
39
  /**
40
  * Get the name of this import source.
41
  *
55
  }
56
 
57
  /**
58
+ * Get the total number of recipes to import.
59
  *
60
+ * @since 1.10.0
61
  */
62
+ public function get_recipe_count() {
63
+ $recipes_found = get_option( 'wprm_import_easyrecipe_recipes', array() );
64
+ return count( $recipes_found );
65
+ }
66
+
67
+ /**
68
+ * Search for recipes to import.
69
+ *
70
+ * @since 1.10.0
71
+ * @param int $page Page of recipes to import.
72
+ */
73
+ public function search_recipes( $page = 0 ) {
74
  if ( ! class_exists( 'simple_html_dom' ) && ! class_exists( 'simple_html_dom_node' ) ) {
75
  require_once( WPRM_DIR . 'vendor/simple_html_dom/simple_html_dom.php' );
76
  libxml_use_internal_errors( true );
77
  }
78
 
79
  $recipes = array();
80
+ $finished = false;
81
 
 
82
  $limit = 100;
83
+ $offset = $limit * $page;
84
+
85
+ $args = array(
86
+ 'post_type' => array( 'post', 'page' ),
87
+ 'post_status' => 'any',
88
+ 'orderby' => 'date',
89
+ 'order' => 'DESC',
90
+ 'posts_per_page' => $limit,
91
+ 'offset' => $offset,
92
+ );
 
 
 
93
 
94
+ $query = new WP_Query( $args );
 
 
95
 
96
+ if ( $query->have_posts() ) {
97
  $posts = $query->posts;
98
 
99
  foreach ( $posts as $post ) {
111
  );
112
  }
113
  }
 
 
 
114
  }
115
+ } else {
116
+ $finished = true;
 
117
  }
118
 
119
+ $found_recipes = get_option( 'wprm_import_easyrecipe_recipes', array() );
120
+ $found_recipes = array_merge( $found_recipes, $recipes );
121
+
122
+ update_option( 'wprm_import_easyrecipe_recipes', $found_recipes, false );
123
+
124
+ $search_result = array(
125
+ 'finished' => $finished,
126
+ 'recipes' => count( $found_recipes ),
127
+ );
128
+
129
+ return $search_result;
130
+ }
131
+
132
+ /**
133
+ * Get a list of recipes that are available to import.
134
+ *
135
+ * @since 1.0.0
136
+ * @param int $page Page of recipes to get.
137
+ */
138
+ public function get_recipes( $page = 0 ) {
139
+ $found_recipes = get_option( 'wprm_import_easyrecipe_recipes', array() );
140
+
141
+ $limit = 100;
142
+ $offset = $limit * $page;
143
+
144
+ return array_slice( $found_recipes, $offset, $limit );
145
  }
146
 
147
  /**
410
  );
411
  wp_update_post( $update_content );
412
 
413
+ // Remove from found recipes.
414
+ $found_recipes = get_option( 'wprm_import_easyrecipe_recipes', array() );
415
+ unset( $found_recipes[ $id ] );
416
+ update_option( 'wprm_import_easyrecipe_recipes', $found_recipes, false );
417
+
418
  // Migrate comment ratings.
419
  $comments = get_comments( array( 'post_id' => $post_id ) );
420
 
includes/admin/import/class-wprm-import-mealplannerpro.php CHANGED
@@ -27,6 +27,15 @@ class WPRM_Import_Mealplannerpro extends WPRM_Import {
27
  return 'mealplannerpro';
28
  }
29
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Get the name of this import source.
32
  *
@@ -45,12 +54,25 @@ class WPRM_Import_Mealplannerpro extends WPRM_Import {
45
  return '';
46
  }
47
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  /**
49
  * Get a list of recipes that are available to import.
50
  *
51
  * @since 1.7.0
 
52
  */
53
- public function get_recipes() {
54
  $recipes = array();
55
 
56
  global $wpdb;
27
  return 'mealplannerpro';
28
  }
29
 
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.10.0
34
+ */
35
+ public function requires_search() {
36
+ return false;
37
+ }
38
+
39
  /**
40
  * Get the name of this import source.
41
  *
54
  return '';
55
  }
56
 
57
+ /**
58
+ * Get the total number of recipes to import.
59
+ *
60
+ * @since 1.10.0
61
+ */
62
+ public function get_recipe_count() {
63
+ global $wpdb;
64
+ $nbr_recipes = $wpdb->get_var( 'SELECT COUNT(*) FROM ' . $wpdb->prefix . 'mpprecipe_recipes WHERE SUBSTRING( server_recipe_id, 0, 5 ) <> "wprm-"' );
65
+
66
+ return $nbr_recipes;
67
+ }
68
+
69
  /**
70
  * Get a list of recipes that are available to import.
71
  *
72
  * @since 1.7.0
73
+ * @param int $page Page of recipes to get.
74
  */
75
+ public function get_recipes( $page = 0 ) {
76
  $recipes = array();
77
 
78
  global $wpdb;
includes/admin/import/class-wprm-import-wpultimaterecipe.php CHANGED
@@ -27,6 +27,15 @@ class WPRM_Import_Wpultimaterecipe extends WPRM_Import {
27
  return 'wpultimaterecipe';
28
  }
29
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Get the name of this import source.
32
  *
@@ -52,56 +61,65 @@ class WPRM_Import_Wpultimaterecipe extends WPRM_Import {
52
  $wpurp_taxonomies = get_option( 'wpurp_taxonomies', array() );
53
  unset( $wpurp_taxonomies['ingredient'] );
54
 
55
- $html .= '<label for="wpurp-tags-course">Courses:</label> ';
56
- $html .= '<select name="wpurp-tags-course" id="wpurp-tags-course">';
57
- $html .= "<option value=\"\">Don't import anything for this tag</option>";
58
- foreach ( $wpurp_taxonomies as $name => $options ) {
59
- $selected = 'course' === $name ? ' selected="selected"' : '';
60
- $html .= '<option value="' . esc_attr( $name ) . '"' . esc_html( $selected ) . '>' . esc_html( $options['labels']['name'] ) . '</option>';
61
- }
62
- $html .= '</select>';
63
- $html .= '<br />';
64
-
65
- $html .= '<label for="wpurp-tags-cuisine">Cuisines:</label> ';
66
- $html .= '<select name="wpurp-tags-cuisine" id="wpurp-tags-cuisine">';
67
- $html .= "<option value=\"\">Don't import anything for this tag</option>";
68
- foreach ( $wpurp_taxonomies as $name => $options ) {
69
- $selected = 'cuisine' === $name ? ' selected="selected"' : '';
70
- $html .= '<option value="' . esc_attr( $name ) . '"' . esc_html( $selected ) . '>' . esc_html( $options['labels']['name'] ) . '</option>';
71
  }
72
- $html .= '</select>';
73
 
74
  return $html;
75
  }
76
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
77
  /**
78
  * Get a list of recipes that are available to import.
79
  *
80
  * @since 1.3.0
 
81
  */
82
- public function get_recipes() {
83
  $recipes = array();
84
 
85
- // Loop through all posts.
86
  $limit = 100;
87
- $offset = 0;
88
-
89
- while ( true ) {
90
- $args = array(
91
- 'post_type' => 'recipe',
92
- 'post_status' => 'any',
93
- 'orderby' => 'date',
94
- 'order' => 'DESC',
95
- 'posts_per_page' => $limit,
96
- 'offset' => $offset,
97
- );
98
-
99
- $query = new WP_Query( $args );
100
 
101
- if ( ! $query->have_posts() ) {
102
- break;
103
- }
104
 
 
105
  $posts = $query->posts;
106
 
107
  foreach ( $posts as $post ) {
@@ -109,13 +127,7 @@ class WPRM_Import_Wpultimaterecipe extends WPRM_Import {
109
  'name' => $post->post_title,
110
  'url' => get_edit_post_link( $post->ID ),
111
  );
112
-
113
- wp_cache_delete( $post->ID, 'posts' );
114
- wp_cache_delete( $post->ID, 'post_meta' );
115
  }
116
-
117
- $offset += $limit;
118
- wp_cache_flush();
119
  }
120
 
121
  return $recipes;
@@ -177,26 +189,19 @@ class WPRM_Import_Wpultimaterecipe extends WPRM_Import {
177
  $recipe['total_time'] = $recipe['prep_time'] + $recipe['cook_time'] + $passive_time_minutes;
178
 
179
  // Recipe Tags.
180
- $course_tag = isset( $post_data['wpurp-tags-course'] ) ? $post_data['wpurp-tags-course'] : false;
181
- $cuisine_tag = isset( $post_data['wpurp-tags-cuisine'] ) ? $post_data['wpurp-tags-cuisine'] : false;
182
-
183
  $recipe['tags'] = array();
184
- $recipe['tags']['course'] = array();
185
- if ( $course_tag ) {
186
- $terms = get_the_terms( $id, $course_tag );
187
- if ( $terms && ! is_wp_error( $terms ) ) {
188
- foreach ( $terms as $term ) {
189
- $recipe['tags']['course'][] = $term->name;
190
- }
191
- }
192
- }
193
 
194
- $recipe['tags']['cuisine'] = array();
195
- if ( $cuisine_tag ) {
196
- $terms = get_the_terms( $id, $cuisine_tag );
197
- if ( $terms && ! is_wp_error( $terms ) ) {
198
- foreach ( $terms as $term ) {
199
- $recipe['tags']['cuisine'][] = $term->name;
 
 
 
 
 
200
  }
201
  }
202
  }
27
  return 'wpultimaterecipe';
28
  }
29
 
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.10.0
34
+ */
35
+ public function requires_search() {
36
+ return false;
37
+ }
38
+
39
  /**
40
  * Get the name of this import source.
41
  *
61
  $wpurp_taxonomies = get_option( 'wpurp_taxonomies', array() );
62
  unset( $wpurp_taxonomies['ingredient'] );
63
 
64
+ $wprm_taxonomies = WPRM_Taxonomies::get_taxonomies();
65
+
66
+ foreach ( $wprm_taxonomies as $wprm_taxonomy => $options ) {
67
+ $wprm_key = substr( $wprm_taxonomy, 5 );
68
+
69
+ $html .= '<label for="wpurp-tags-' . $wprm_key . '">' . $options['name'] . ':</label> ';
70
+ $html .= '<select name="wpurp-tags-' . $wprm_key . '" id="wpurp-tags-' . $wprm_key . '">';
71
+ $html .= "<option value=\"\">Don't import anything for this tag</option>";
72
+ foreach ( $wpurp_taxonomies as $name => $options ) {
73
+ $selected = $wprm_key === $name ? ' selected="selected"' : '';
74
+ $html .= '<option value="' . esc_attr( $name ) . '"' . esc_html( $selected ) . '>' . esc_html( $options['labels']['name'] ) . '</option>';
75
+ }
76
+ $html .= '</select>';
77
+ $html .= '<br />';
 
 
78
  }
 
79
 
80
  return $html;
81
  }
82
 
83
+ /**
84
+ * Get the total number of recipes to import.
85
+ *
86
+ * @since 1.10.0
87
+ */
88
+ public function get_recipe_count() {
89
+ $args = array(
90
+ 'post_type' => 'recipe',
91
+ 'post_status' => 'any',
92
+ 'posts_per_page' => 1,
93
+ );
94
+
95
+ $query = new WP_Query( $args );
96
+ return $query->found_posts;
97
+ }
98
+
99
  /**
100
  * Get a list of recipes that are available to import.
101
  *
102
  * @since 1.3.0
103
+ * @param int $page Page of recipes to get.
104
  */
105
+ public function get_recipes( $page = 0 ) {
106
  $recipes = array();
107
 
 
108
  $limit = 100;
109
+ $offset = $limit * $page;
110
+
111
+ $args = array(
112
+ 'post_type' => 'recipe',
113
+ 'post_status' => 'any',
114
+ 'orderby' => 'date',
115
+ 'order' => 'DESC',
116
+ 'posts_per_page' => $limit,
117
+ 'offset' => $offset,
118
+ );
 
 
 
119
 
120
+ $query = new WP_Query( $args );
 
 
121
 
122
+ if ( $query->have_posts() ) {
123
  $posts = $query->posts;
124
 
125
  foreach ( $posts as $post ) {
127
  'name' => $post->post_title,
128
  'url' => get_edit_post_link( $post->ID ),
129
  );
 
 
 
130
  }
 
 
 
131
  }
132
 
133
  return $recipes;
189
  $recipe['total_time'] = $recipe['prep_time'] + $recipe['cook_time'] + $passive_time_minutes;
190
 
191
  // Recipe Tags.
 
 
 
192
  $recipe['tags'] = array();
 
 
 
 
 
 
 
 
 
193
 
194
+ $wprm_taxonomies = WPRM_Taxonomies::get_taxonomies();
195
+ foreach ( $wprm_taxonomies as $wprm_taxonomy => $options ) {
196
+ $wprm_key = substr( $wprm_taxonomy, 5 );
197
+ $tag = isset( $post_data[ 'wpurp-tags-' . $wprm_key ] ) ? $post_data[ 'wpurp-tags-' . $wprm_key ] : false;
198
+
199
+ if ( $tag ) {
200
+ $terms = get_the_terms( $id, $tag );
201
+ if ( $terms && ! is_wp_error( $terms ) ) {
202
+ foreach ( $terms as $term ) {
203
+ $recipe['tags'][ $wprm_key ][] = $term->name;
204
+ }
205
  }
206
  }
207
  }
includes/admin/import/class-wprm-import-ziplist.php CHANGED
@@ -27,6 +27,15 @@ class WPRM_Import_Ziplist extends WPRM_Import {
27
  return 'ziplist';
28
  }
29
 
 
 
 
 
 
 
 
 
 
30
  /**
31
  * Get the name of this import source.
32
  *
@@ -45,12 +54,22 @@ class WPRM_Import_Ziplist extends WPRM_Import {
45
  return '';
46
  }
47
 
 
 
 
 
 
 
 
 
 
48
  /**
49
  * Get a list of recipes that are available to import.
50
  *
51
  * @since 1.8.0
 
52
  */
53
- public function get_recipes() {
54
  $recipes = array();
55
 
56
  global $wpdb;
27
  return 'ziplist';
28
  }
29
 
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.10.0
34
+ */
35
+ public function requires_search() {
36
+ return false;
37
+ }
38
+
39
  /**
40
  * Get the name of this import source.
41
  *
54
  return '';
55
  }
56
 
57
+ /**
58
+ * Get the total number of recipes to import.
59
+ *
60
+ * @since 1.10.0
61
+ */
62
+ public function get_recipe_count() {
63
+ return count( $this->get_recipes() );
64
+ }
65
+
66
  /**
67
  * Get a list of recipes that are available to import.
68
  *
69
  * @since 1.8.0
70
+ * @param int $page Page of recipes to get.
71
  */
72
+ public function get_recipes( $page = 0 ) {
73
  $recipes = array();
74
 
75
  global $wpdb;
includes/admin/import/class-wprm-import.php CHANGED
@@ -32,6 +32,13 @@ abstract class WPRM_Import {
32
  */
33
  abstract public function get_name();
34
 
 
 
 
 
 
 
 
35
  /**
36
  * Get HTML for the import settings.
37
  *
@@ -39,12 +46,20 @@ abstract class WPRM_Import {
39
  */
40
  abstract public function get_settings_html();
41
 
 
 
 
 
 
 
 
42
  /**
43
  * Get a list of recipes that are available to import.
44
  *
45
  * @since 1.0.0
 
46
  */
47
- abstract public function get_recipes();
48
 
49
  /**
50
  * Get recipe with the specified ID in the import format.
32
  */
33
  abstract public function get_name();
34
 
35
+ /**
36
+ * Wether or not this importer requires a manual search for recipes.
37
+ *
38
+ * @since 1.10.0
39
+ */
40
+ abstract public function requires_search();
41
+
42
  /**
43
  * Get HTML for the import settings.
44
  *
46
  */
47
  abstract public function get_settings_html();
48
 
49
+ /**
50
+ * Get the total number of recipes to import.
51
+ *
52
+ * @since 1.10.0
53
+ */
54
+ abstract public function get_recipe_count();
55
+
56
  /**
57
  * Get a list of recipes that are available to import.
58
  *
59
  * @since 1.0.0
60
+ * @param int $page Page of recipes to get.
61
  */
62
+ abstract public function get_recipes( $page );
63
 
64
  /**
65
  * Get recipe with the specified ID in the import format.
includes/admin/manage/class-wprm-manage-taxonomies.php ADDED
@@ -0,0 +1,96 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Handle the manage taxonomies pages.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.10.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/includes/admin/manage
10
+ */
11
+
12
+ /**
13
+ * Handle the manage taxonomies pages.
14
+ *
15
+ * @since 1.10.0
16
+ * @package WP_Recipe_Maker
17
+ * @subpackage WP_Recipe_Maker/includes/admin/manage
18
+ * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19
+ */
20
+ class WPRM_Manage_Taxonomies {
21
+
22
+ /**
23
+ * Register actions and filters.
24
+ *
25
+ * @since 1.10.0
26
+ */
27
+ public static function init() {
28
+ add_filter( 'wprm_manage_tabs', array( __CLASS__, 'manage_tabs' ) );
29
+ }
30
+
31
+ /**
32
+ * Add tags to the manage tabs.
33
+ *
34
+ * @since 1.10.0
35
+ * @param array $tabs Tags tabs.
36
+ */
37
+ public static function manage_tabs( $tabs ) {
38
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
39
+
40
+ foreach ( $taxonomies as $taxonomy => $labels ) {
41
+ $uid = 'taxonomy_' . substr( $taxonomy, 5 );
42
+ $tabs[ $uid ] = $labels['name'];
43
+ }
44
+ return $tabs;
45
+ }
46
+
47
+ /**
48
+ * Get the data to display in the datatable.
49
+ *
50
+ * @since 1.10.0
51
+ * @param array $datatable Datatable request values.
52
+ * @param mixed $taxonomy Taxonomy to get the datatable for.
53
+ */
54
+ public static function get_datatable( $datatable, $taxonomy ) {
55
+ $data = array();
56
+
57
+ $orderby_options = array(
58
+ 0 => 'id',
59
+ 1 => 'name',
60
+ 2 => 'count',
61
+ );
62
+ $orderby = isset( $orderby_options[ $datatable['orderby'] ] ) ? $orderby_options[ $datatable['orderby'] ] : $orderby_options[0];
63
+
64
+ $args = array(
65
+ 'taxonomy' => $taxonomy,
66
+ 'hide_empty' => false,
67
+ 'orderby' => $orderby,
68
+ 'order' => $datatable['order'],
69
+ 'number' => $datatable['length'],
70
+ 'offset' => $datatable['start'],
71
+ 'search' => $datatable['search'],
72
+ );
73
+
74
+ $terms = get_terms( $args );
75
+
76
+ foreach ( $terms as $term ) {
77
+ $data[] = array(
78
+ $term->term_id,
79
+ '<span id="wprm-manage-taxonomies-name-' . esc_attr( $term->term_id ) . '">' . $term->name . '</span>',
80
+ $term->count,
81
+ '<span class="dashicons dashicons-admin-tools wprm-icon wprm-manage-taxonomies-actions" data-id="' . esc_attr( $term->term_id ) . '" data-count="' . esc_attr( $term->count ) . '"></span>',
82
+ );
83
+ }
84
+
85
+ $total = wp_count_terms( $taxonomy, array( 'hide_empty' => false ) );
86
+
87
+ return array(
88
+ 'draw' => $datatable['draw'],
89
+ 'recordsTotal' => $total,
90
+ 'recordsFiltered' => $total,
91
+ 'data' => $data,
92
+ );
93
+ }
94
+ }
95
+
96
+ WPRM_Manage_Taxonomies::init();
includes/admin/manage/class-wprm-manage.php CHANGED
@@ -28,6 +28,7 @@ class WPRM_Manage {
28
  add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
29
  add_action( 'admin_menu', array( __CLASS__, 'add_submenu_page' ) );
30
  add_action( 'admin_notices', array( __CLASS__, 'notices' ) );
 
31
 
32
  add_action( 'wp_ajax_wprm_manage_datatable', array( __CLASS__, 'ajax_manage_datatable' ) );
33
  add_action( 'wp_ajax_wprm_update_term_metadata', array( __CLASS__, 'ajax_update_term_metadata' ) );
@@ -41,18 +42,22 @@ class WPRM_Manage {
41
  * @since 1.9.0
42
  */
43
  public static function enqueue() {
44
- wp_enqueue_style( 'datatables', WPRM_URL . 'vendor/datatables/datatables.min.css', array(), WPRM_VERSION, 'all' );
45
- wp_enqueue_style( 'tooltipster', WPRM_URL . 'vendor/tooltipster/css/tooltipster.bundle.min.css', array(), WPRM_VERSION, 'all' );
46
- wp_enqueue_style( 'wprm-manage', WPRM_URL . 'assets/css/admin/manage.min.css', array(), WPRM_VERSION, 'all' );
47
-
48
- wp_enqueue_script( 'datatables', WPRM_URL . 'vendor/datatables/datatables.min.js', array( 'jquery' ), WPRM_VERSION, true );
49
- wp_enqueue_script( 'tooltipster', WPRM_URL . 'vendor/tooltipster/js/tooltipster.bundle.min.js', array( 'jquery' ), WPRM_VERSION, true );
50
- wp_enqueue_script( 'wprm-manage', WPRM_URL . 'assets/js/admin/manage.js', array( 'jquery', 'datatables', 'tooltipster' ), WPRM_VERSION, true );
51
-
52
- wp_localize_script( 'wprm-manage', 'wprm_manage', array(
53
- 'ajax_url' => admin_url( 'admin-ajax.php' ),
54
- 'nonce' => wp_create_nonce( 'wprm' ),
55
- ));
 
 
 
 
56
  }
57
 
58
  /**
@@ -83,24 +88,29 @@ class WPRM_Manage {
83
  public static function ajax_delete_or_merge_term() {
84
  if ( check_ajax_referer( 'wprm', 'security', false ) ) {
85
  $term_id = isset( $_POST['term_id'] ) ? intval( $_POST['term_id'] ) : 0; // Input var okay.
 
86
  $new_term_id = isset( $_POST['new_term_id'] ) ? intval( $_POST['new_term_id'] ) : 0; // Input var okay.
87
 
 
 
 
88
  if ( $term_id ) {
89
- $term = get_term( $term_id );
90
 
91
  // Check if this is one of our taxonomies.
92
- if ( ! is_wp_error( $term ) && in_array( $term->taxonomy, array( 'wprm_ingredient' ), true ) ) {
93
  if ( ! $new_term_id ) {
94
- // Make sure this term is not used anymore before deleting.
95
- if ( 0 === $term->count ) {
96
- wp_delete_term( $term->term_id, $term->taxonomy );
97
  }
98
  } else {
99
- $new_term = get_term( $new_term_id );
 
100
 
101
- if ( ! is_wp_error( $new_term ) && $new_term->taxonomy === $term->taxonomy ) {
102
  self::merge_recipe_terms( $term, $new_term );
103
- wp_delete_term( $term->term_id, $term->taxonomy );
104
  }
105
  }
106
  }
@@ -134,30 +144,35 @@ class WPRM_Manage {
134
  $query = new WP_Query( $args );
135
  $posts = $query->posts;
136
  foreach ( $posts as $post ) {
137
- $recipe = WPRM_Recipe_Manager::get_recipe( $post );
138
-
139
- $new_ingredients = array();
140
- $new_ingredient_ids = array();
141
- foreach ( $recipe->ingredients() as $ingredient_group ) {
142
- $new_ingredient_group = $ingredient_group;
143
- $new_ingredient_group['ingredients'] = array();
144
-
145
- foreach ( $ingredient_group['ingredients'] as $ingredient ) {
146
- if ( intval( $ingredient['id'] ) === $term->term_id ) {
147
- $ingredient['id'] = $new_term->term_id;
148
- $ingredient['name'] = $new_term->name;
 
 
 
 
149
  }
150
- $new_ingredient_ids[] = intval( $ingredient['id'] );
151
- $new_ingredient_group['ingredients'][] = $ingredient;
152
- }
153
 
154
- $new_ingredients[] = $new_ingredient_group;
155
- }
156
 
157
- $new_ingredient_ids = array_unique( $new_ingredient_ids );
158
- wp_set_object_terms( $recipe->id(), $new_ingredient_ids, 'wprm_ingredient', false );
159
 
160
- update_post_meta( $recipe->id(), 'wprm_ingredients', $new_ingredients );
 
 
 
 
161
  }
162
  }
163
 
@@ -198,6 +213,9 @@ class WPRM_Manage {
198
  $data = WPRM_Manage_Recipes::get_datatable( $datatable );
199
  } elseif ( 'wprm-manage-ingredients' === $table ) {
200
  $data = WPRM_Manage_Ingredients::get_datatable( $datatable );
 
 
 
201
  }
202
 
203
  echo wp_json_encode( $data );
@@ -241,6 +259,22 @@ class WPRM_Manage {
241
  require_once( WPRM_DIR . 'templates/admin/manage.php' );
242
  }
243
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  /**
245
  * Show notices on the manage pages.
246
  *
28
  add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
29
  add_action( 'admin_menu', array( __CLASS__, 'add_submenu_page' ) );
30
  add_action( 'admin_notices', array( __CLASS__, 'notices' ) );
31
+ add_action( 'wprm_manage_page', array( __CLASS__, 'manage_page' ) );
32
 
33
  add_action( 'wp_ajax_wprm_manage_datatable', array( __CLASS__, 'ajax_manage_datatable' ) );
34
  add_action( 'wp_ajax_wprm_update_term_metadata', array( __CLASS__, 'ajax_update_term_metadata' ) );
42
  * @since 1.9.0
43
  */
44
  public static function enqueue() {
45
+ $screen = get_current_screen();
46
+
47
+ if ( 'toplevel_page_wprecipemaker' === $screen->base ) {
48
+ wp_enqueue_style( 'datatables', WPRM_URL . 'vendor/datatables/datatables.min.css', array(), WPRM_VERSION, 'all' );
49
+ wp_enqueue_style( 'tooltipster', WPRM_URL . 'vendor/tooltipster/css/tooltipster.bundle.min.css', array(), WPRM_VERSION, 'all' );
50
+ wp_enqueue_style( 'wprm-manage', WPRM_URL . 'assets/css/admin/manage.min.css', array(), WPRM_VERSION, 'all' );
51
+
52
+ wp_enqueue_script( 'datatables', WPRM_URL . 'vendor/datatables/datatables.min.js', array( 'jquery' ), WPRM_VERSION, true );
53
+ wp_enqueue_script( 'tooltipster', WPRM_URL . 'vendor/tooltipster/js/tooltipster.bundle.min.js', array( 'jquery' ), WPRM_VERSION, true );
54
+ wp_enqueue_script( 'wprm-manage', WPRM_URL . 'assets/js/admin/manage.js', array( 'jquery', 'datatables', 'tooltipster' ), WPRM_VERSION, true );
55
+
56
+ wp_localize_script( 'wprm-manage', 'wprm_manage', array(
57
+ 'ajax_url' => admin_url( 'admin-ajax.php' ),
58
+ 'nonce' => wp_create_nonce( 'wprm' ),
59
+ ));
60
+ }
61
  }
62
 
63
  /**
88
  public static function ajax_delete_or_merge_term() {
89
  if ( check_ajax_referer( 'wprm', 'security', false ) ) {
90
  $term_id = isset( $_POST['term_id'] ) ? intval( $_POST['term_id'] ) : 0; // Input var okay.
91
+ $taxonomy = isset( $_POST['taxonomy'] ) ? sanitize_key( wp_unslash( $_POST['taxonomy'] ) ) : ''; // Input var okay.
92
  $new_term_id = isset( $_POST['new_term_id'] ) ? intval( $_POST['new_term_id'] ) : 0; // Input var okay.
93
 
94
+ // This ensures were only chaning our own taxonomies.
95
+ $taxonomy = 'wprm_' . $taxonomy;
96
+
97
  if ( $term_id ) {
98
+ $term = get_term( $term_id, $taxonomy );
99
 
100
  // Check if this is one of our taxonomies.
101
+ if ( $term && ! is_wp_error( $term ) ) {
102
  if ( ! $new_term_id ) {
103
+ // Make sure this ingredient is not used anymore before deleting.
104
+ if ( 'wprm_ingredient' !== $taxonomy || 0 === $term->count ) {
105
+ wp_delete_term( $term->term_id, $taxonomy );
106
  }
107
  } else {
108
+ // This ensures the term to merge into is in the same taxonomy.
109
+ $new_term = get_term( $new_term_id, $taxonomy );
110
 
111
+ if ( $new_term && ! is_wp_error( $new_term ) ) {
112
  self::merge_recipe_terms( $term, $new_term );
113
+ wp_delete_term( $term->term_id, $taxonomy );
114
  }
115
  }
116
  }
144
  $query = new WP_Query( $args );
145
  $posts = $query->posts;
146
  foreach ( $posts as $post ) {
147
+ if ( 'wprm_ingredient' === $term->taxonomy ) {
148
+ $recipe = WPRM_Recipe_Manager::get_recipe( $post );
149
+
150
+ $new_ingredients = array();
151
+ $new_ingredient_ids = array();
152
+ foreach ( $recipe->ingredients() as $ingredient_group ) {
153
+ $new_ingredient_group = $ingredient_group;
154
+ $new_ingredient_group['ingredients'] = array();
155
+
156
+ foreach ( $ingredient_group['ingredients'] as $ingredient ) {
157
+ if ( intval( $ingredient['id'] ) === $term->term_id ) {
158
+ $ingredient['id'] = $new_term->term_id;
159
+ $ingredient['name'] = $new_term->name;
160
+ }
161
+ $new_ingredient_ids[] = intval( $ingredient['id'] );
162
+ $new_ingredient_group['ingredients'][] = $ingredient;
163
  }
 
 
 
164
 
165
+ $new_ingredients[] = $new_ingredient_group;
166
+ }
167
 
168
+ $new_ingredient_ids = array_unique( $new_ingredient_ids );
169
+ wp_set_object_terms( $recipe->id(), $new_ingredient_ids, 'wprm_ingredient', false );
170
 
171
+ update_post_meta( $recipe->id(), 'wprm_ingredients', $new_ingredients );
172
+ } else {
173
+ // Append new term.
174
+ wp_set_object_terms( $post->ID, $new_term->term_id, $term->taxonomy, true );
175
+ }
176
  }
177
  }
178
 
213
  $data = WPRM_Manage_Recipes::get_datatable( $datatable );
214
  } elseif ( 'wprm-manage-ingredients' === $table ) {
215
  $data = WPRM_Manage_Ingredients::get_datatable( $datatable );
216
+ } elseif ( 'wprm-manage-taxonomy-' === substr( $table, 0, 21 ) ) {
217
+ $taxonomy = 'wprm_' . substr( $table, 21 );
218
+ $data = WPRM_Manage_Taxonomies::get_datatable( $datatable, $taxonomy );
219
  }
220
 
221
  echo wp_json_encode( $data );
259
  require_once( WPRM_DIR . 'templates/admin/manage.php' );
260
  }
261
 
262
+ /**
263
+ * Manage page to output.
264
+ *
265
+ * @since 1.10.0
266
+ * @param mixed $sub Sub manage page to display.
267
+ */
268
+ public static function manage_page( $sub ) {
269
+ if ( 'recipes' === $sub ) {
270
+ require_once( WPRM_DIR . 'templates/admin/manage/recipes.php' );
271
+ } elseif ( 'ingredients' === $sub ) {
272
+ require_once( WPRM_DIR . 'templates/admin/manage/ingredients.php' );
273
+ } elseif ( 'taxonomy_' === substr( $sub, 0, 9 ) ) {
274
+ require_once( WPRM_DIR . 'templates/admin/manage/taxonomies.php' );
275
+ }
276
+ }
277
+
278
  /**
279
  * Show notices on the manage pages.
280
  *
includes/admin/migrations/wprm-1-10-0-wpurp.php ADDED
@@ -0,0 +1,39 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Migration for cleaning up potential WP Ultimate Recipe leftovers.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.10.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/includes/admin/migrations
10
+ */
11
+
12
+ // Delete options.
13
+ delete_option( 'wpurp_custom_templates' );
14
+ delete_option( 'wpurp_cache' );
15
+ delete_option( 'wpurp_cache_temp' );
16
+ delete_option( 'wpurp_cache_resetting' );
17
+ delete_option( 'wpurp_custom_template_preview' );
18
+
19
+ // Disable autoload for custom templates.
20
+ $mapping = get_option( 'wpurp_custom_template_mapping', array() );
21
+
22
+ foreach ( $mapping as $id => $name ) {
23
+ $id = intval( $id );
24
+
25
+ $template = get_option( 'wpurp_custom_template_' . $id, array() );
26
+ update_option( 'wpurp_custom_template_' . $id, array(), false );
27
+ update_option( 'wpurp_custom_template_' . $id, $template, false );
28
+ }
29
+
30
+ // Disable autoload for nutritional information.
31
+ $nutritional = get_option( 'wpurp_nutritional_information', false );
32
+
33
+ if ( $nutritional ) {
34
+ update_option( 'wpurp_nutritional_information', array(), false );
35
+ update_option( 'wpurp_nutritional_information', $nutritional, false );
36
+ }
37
+
38
+ // Notice regarding template changes.
39
+ self::$notices[] = 'We introduced an easy way to set the recipe template colors on the <em>WP Recipe Maker > Settings</em> page. Please check your recipe template and make adjustments if needed.';
includes/admin/modal/class-wprm-modal.php CHANGED
@@ -57,11 +57,14 @@ class WPRM_Modal {
57
  'ajax_url' => admin_url( 'admin-ajax.php' ),
58
  'nonce' => wp_create_nonce( 'wprm' ),
59
  'text' => array(
 
 
60
  'action_button_update' => __( 'Update', 'wp-recipe-maker' ),
61
  'media_title' => __( 'Select or Upload Image', 'wp-recipe-maker' ),
62
  'media_button' => __( 'Use Image', 'wp-recipe-maker' ),
63
  'shortcode_remove' => __( 'Are you sure you want to remove this recipe?', 'wp-recipe-maker' ),
64
  'import_text_reset' => __( 'Are you sure you want to start over with importing from text?', 'wp-recipe-maker' ),
 
65
  'first_recipe_on_page' => __( 'First recipe on page', 'wp-recipe-maker' ),
66
  'medium_editor_placeholder' => __( 'Type here (select text for advanced styling options)', 'wp-recipe-maker' ),
67
  ),
@@ -115,7 +118,7 @@ class WPRM_Modal {
115
  'recipe' => array(
116
  'order' => 100,
117
  'default' => true,
118
- 'label' => __( 'Recipe', 'wp-recipe-maker' ),
119
  'tabs' => array(
120
  'text-import' => array(
121
  'order' => 50,
57
  'ajax_url' => admin_url( 'admin-ajax.php' ),
58
  'nonce' => wp_create_nonce( 'wprm' ),
59
  'text' => array(
60
+ 'modal_close_confirm' => __( 'Are you sure? You will lose any unsaved changes.', 'wp-recipe-maker' ),
61
+ 'action_button_insert' => __( 'Insert', 'wp-recipe-maker' ),
62
  'action_button_update' => __( 'Update', 'wp-recipe-maker' ),
63
  'media_title' => __( 'Select or Upload Image', 'wp-recipe-maker' ),
64
  'media_button' => __( 'Use Image', 'wp-recipe-maker' ),
65
  'shortcode_remove' => __( 'Are you sure you want to remove this recipe?', 'wp-recipe-maker' ),
66
  'import_text_reset' => __( 'Are you sure you want to start over with importing from text?', 'wp-recipe-maker' ),
67
+ 'edit_recipe' => __( 'Edit Recipe', 'wp-recipe-maker' ),
68
  'first_recipe_on_page' => __( 'First recipe on page', 'wp-recipe-maker' ),
69
  'medium_editor_placeholder' => __( 'Type here (select text for advanced styling options)', 'wp-recipe-maker' ),
70
  ),
118
  'recipe' => array(
119
  'order' => 100,
120
  'default' => true,
121
+ 'label' => __( 'New Recipe', 'wp-recipe-maker' ),
122
  'tabs' => array(
123
  'text-import' => array(
124
  'order' => 50,
includes/class-wp-recipe-maker.php CHANGED
@@ -31,7 +31,7 @@ class WP_Recipe_Maker {
31
  * @since 1.0.0
32
  */
33
  private function define_constants() {
34
- define( 'WPRM_VERSION', '1.9.1' );
35
  define( 'WPRM_PREMIUM_VERSION_REQUIRED', '1.1.1' );
36
  define( 'WPRM_POST_TYPE', 'wprm_recipe' );
37
  define( 'WPRM_DIR', plugin_dir_path( dirname( __FILE__ ) ) );
@@ -89,6 +89,7 @@ class WP_Recipe_Maker {
89
  // Manage.
90
  require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage-ingredients.php' );
91
  require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage-recipes.php' );
 
92
  require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage.php' );
93
 
94
  // Menu.
31
  * @since 1.0.0
32
  */
33
  private function define_constants() {
34
+ define( 'WPRM_VERSION', '1.10.0' );
35
  define( 'WPRM_PREMIUM_VERSION_REQUIRED', '1.1.1' );
36
  define( 'WPRM_POST_TYPE', 'wprm_recipe' );
37
  define( 'WPRM_DIR', plugin_dir_path( dirname( __FILE__ ) ) );
89
  // Manage.
90
  require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage-ingredients.php' );
91
  require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage-recipes.php' );
92
+ require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage-taxonomies.php' );
93
  require_once( WPRM_DIR . 'includes/admin/manage/class-wprm-manage.php' );
94
 
95
  // Menu.
includes/class-wprm-activator.php CHANGED
@@ -32,6 +32,6 @@ class WPRM_Activator {
32
  WPRM_Taxonomies::register_taxonomies();
33
  WPRM_Taxonomies::insert_default_taxonomy_terms();
34
 
35
- add_option( 'wprm_activated', true );
36
  }
37
  }
32
  WPRM_Taxonomies::register_taxonomies();
33
  WPRM_Taxonomies::insert_default_taxonomy_terms();
34
 
35
+ add_option( 'wprm_activated', true, '', 'no' );
36
  }
37
  }
includes/public/class-wprm-recipe.php CHANGED
@@ -73,8 +73,11 @@ class WPRM_Recipe {
73
  $recipe['total_time'] = $this->total_time();
74
 
75
  $recipe['tags'] = array();
76
- $recipe['tags']['course'] = $this->tags( 'course' );
77
- $recipe['tags']['cuisine'] = $this->tags( 'cuisine' );
 
 
 
78
 
79
  // Ingredients & Instructions.
80
  $recipe['ingredients'] = $this->ingredients();
@@ -229,6 +232,14 @@ class WPRM_Recipe {
229
  $image_id = get_post_thumbnail_id( $this->id() );
230
  if ( ! $image_id ) {
231
  $image_id = 0;
 
 
 
 
 
 
 
 
232
  }
233
  return $image_id;
234
  }
73
  $recipe['total_time'] = $this->total_time();
74
 
75
  $recipe['tags'] = array();
76
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
77
+ foreach ( $taxonomies as $taxonomy => $options ) {
78
+ $key = substr( $taxonomy, 5 ); // Get rid of wprm_.
79
+ $recipe['tags'][ $key ] = $this->tags( $key );
80
+ }
81
 
82
  // Ingredients & Instructions.
83
  $recipe['ingredients'] = $this->ingredients();
232
  $image_id = get_post_thumbnail_id( $this->id() );
233
  if ( ! $image_id ) {
234
  $image_id = 0;
235
+
236
+ if ( WPRM_Settings::get( 'recipe_image_use_featured' ) ) {
237
+ $parent_image_id = get_post_thumbnail_id( $this->parent_post_id() );
238
+
239
+ if ( $parent_image_id ) {
240
+ $image_id = $parent_image_id;
241
+ }
242
+ }
243
  }
244
  return $image_id;
245
  }
includes/public/class-wprm-settings.php CHANGED
@@ -36,6 +36,18 @@ class WPRM_Settings {
36
  */
37
  private static $defaults = array(
38
  // Appearance.
 
 
 
 
 
 
 
 
 
 
 
 
39
  'default_recipe_template' => 'simple',
40
  'default_print_template' => 'clean-print',
41
  // Features.
@@ -53,6 +65,7 @@ class WPRM_Settings {
53
  add_action( 'admin_menu', array( __CLASS__, 'add_submenu_page' ), 20 );
54
  add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
55
  add_action( 'admin_post_wprm_settings_appearance', array( __CLASS__, 'form_save_settings_appearance' ) );
 
56
  add_action( 'admin_post_wprm_settings_features', array( __CLASS__, 'form_save_settings_features' ) );
57
 
58
  add_action( 'wprm_settings_page', array( __CLASS__, 'settings_page' ) );
@@ -64,9 +77,10 @@ class WPRM_Settings {
64
  * @since 1.2.0
65
  */
66
  public static function enqueue() {
 
67
  wp_enqueue_style( 'wprm-settings', WPRM_URL . 'assets/css/admin/settings.min.css', array(), WPRM_VERSION, 'all' );
68
 
69
- wp_enqueue_script( 'wprm-settings', WPRM_URL . 'assets/js/admin/settings.js', array( 'jquery' ), WPRM_VERSION, true );
70
  }
71
 
72
  /**
@@ -87,6 +101,8 @@ class WPRM_Settings {
87
  public static function settings_page( $sub ) {
88
  if ( 'appearance' === $sub ) {
89
  require_once( WPRM_DIR . 'templates/admin/settings/appearance.php' );
 
 
90
  } elseif ( 'features' === $sub ) {
91
  require_once( WPRM_DIR . 'templates/admin/settings/features.php' );
92
  }
@@ -188,18 +204,41 @@ class WPRM_Settings {
188
  */
189
  public static function form_save_settings_appearance() {
190
  if ( isset( $_POST['wprm_settings'] ) && wp_verify_nonce( sanitize_key( $_POST['wprm_settings'] ), 'wprm_settings' ) ) { // Input var okay.
 
 
 
 
 
 
 
 
 
 
 
 
 
 
191
  $default_recipe_template = isset( $_POST['default_recipe_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_recipe_template'] ) ) : ''; // Input var okay.
192
  $default_print_template = isset( $_POST['default_print_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_print_template'] ) ) : ''; // Input var okay.
193
 
194
  $settings = array();
195
 
196
- if ( $default_recipe_template ) {
197
- $settings['default_recipe_template'] = $default_recipe_template;
198
- }
199
 
200
- if ( $default_print_template ) {
201
- $settings['default_print_template'] = $default_print_template;
202
- }
 
 
 
 
 
 
 
 
 
 
203
 
204
  self::update_settings( $settings );
205
  }
@@ -207,6 +246,28 @@ class WPRM_Settings {
207
  exit();
208
  }
209
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
210
  /**
211
  * Save the features settings.
212
  *
36
  */
37
  private static $defaults = array(
38
  // Appearance.
39
+ 'recipe_image_use_featured' => false,
40
+ 'show_nutrition_label' => false,
41
+ 'template_color_border' => '#aaaaaa',
42
+ 'template_color_background' => '#ffffff',
43
+ 'template_color_text' => '#333333',
44
+ 'template_color_link' => '#000000',
45
+ 'template_color_header' => '#000000',
46
+ 'template_color_icon' => '#343434',
47
+ 'template_color_accent' => '#2c3e50',
48
+ 'template_color_accent_text' => '#ffffff',
49
+ 'template_color_accent2' => '#3498db',
50
+ 'template_color_accent2_text' => '#ffffff',
51
  'default_recipe_template' => 'simple',
52
  'default_print_template' => 'clean-print',
53
  // Features.
65
  add_action( 'admin_menu', array( __CLASS__, 'add_submenu_page' ), 20 );
66
  add_action( 'admin_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
67
  add_action( 'admin_post_wprm_settings_appearance', array( __CLASS__, 'form_save_settings_appearance' ) );
68
+ add_action( 'admin_post_wprm_settings_labels', array( __CLASS__, 'form_save_settings_labels' ) );
69
  add_action( 'admin_post_wprm_settings_features', array( __CLASS__, 'form_save_settings_features' ) );
70
 
71
  add_action( 'wprm_settings_page', array( __CLASS__, 'settings_page' ) );
77
  * @since 1.2.0
78
  */
79
  public static function enqueue() {
80
+ wp_enqueue_style( 'wp-color-picker' );
81
  wp_enqueue_style( 'wprm-settings', WPRM_URL . 'assets/css/admin/settings.min.css', array(), WPRM_VERSION, 'all' );
82
 
83
+ wp_enqueue_script( 'wprm-settings', WPRM_URL . 'assets/js/admin/settings.js', array( 'jquery', 'wp-color-picker' ), WPRM_VERSION, true );
84
  }
85
 
86
  /**
101
  public static function settings_page( $sub ) {
102
  if ( 'appearance' === $sub ) {
103
  require_once( WPRM_DIR . 'templates/admin/settings/appearance.php' );
104
+ } elseif ( 'labels' === $sub ) {
105
+ require_once( WPRM_DIR . 'templates/admin/settings/labels.php' );
106
  } elseif ( 'features' === $sub ) {
107
  require_once( WPRM_DIR . 'templates/admin/settings/features.php' );
108
  }
204
  */
205
  public static function form_save_settings_appearance() {
206
  if ( isset( $_POST['wprm_settings'] ) && wp_verify_nonce( sanitize_key( $_POST['wprm_settings'] ), 'wprm_settings' ) ) { // Input var okay.
207
+ $recipe_image_use_featured = isset( $_POST['recipe_image_use_featured'] ) && sanitize_key( $_POST['recipe_image_use_featured'] ) ? true : false; // Input var okay.
208
+ $show_nutrition_label = isset( $_POST['show_nutrition_label'] ) && sanitize_key( $_POST['show_nutrition_label'] ) ? true : false; // Input var okay.
209
+
210
+ $template_color_border = isset( $_POST['template_color_border'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_border'] ) ) : ''; // Input var okay.
211
+ $template_color_background = isset( $_POST['template_color_background'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_background'] ) ) : ''; // Input var okay.
212
+ $template_color_text = isset( $_POST['template_color_text'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_text'] ) ) : ''; // Input var okay.
213
+ $template_color_link = isset( $_POST['template_color_link'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_link'] ) ) : ''; // Input var okay.
214
+ $template_color_header = isset( $_POST['template_color_header'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_header'] ) ) : ''; // Input var okay.
215
+ $template_color_icon = isset( $_POST['template_color_icon'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_icon'] ) ) : ''; // Input var okay.
216
+ $template_color_accent = isset( $_POST['template_color_accent'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_accent'] ) ) : ''; // Input var okay.
217
+ $template_color_accent_text = isset( $_POST['template_color_accent_text'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_accent_text'] ) ) : ''; // Input var okay.
218
+ $template_color_accent2 = isset( $_POST['template_color_accent2'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_accent2'] ) ) : ''; // Input var okay.
219
+ $template_color_accent2_text = isset( $_POST['template_color_accent2_text'] ) ? sanitize_text_field( wp_unslash( $_POST['template_color_accent2_text'] ) ) : ''; // Input var okay.
220
+
221
  $default_recipe_template = isset( $_POST['default_recipe_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_recipe_template'] ) ) : ''; // Input var okay.
222
  $default_print_template = isset( $_POST['default_print_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_print_template'] ) ) : ''; // Input var okay.
223
 
224
  $settings = array();
225
 
226
+ $settings['recipe_image_use_featured'] = $recipe_image_use_featured;
227
+ $settings['show_nutrition_label'] = $show_nutrition_label;
 
228
 
229
+ if ( $template_color_border ) { $settings['template_color_border'] = $template_color_border; }
230
+ if ( $template_color_background ) { $settings['template_color_background'] = $template_color_background; }
231
+ if ( $template_color_text ) { $settings['template_color_text'] = $template_color_text; }
232
+ if ( $template_color_link ) { $settings['template_color_link'] = $template_color_link; }
233
+ if ( $template_color_header ) { $settings['template_color_header'] = $template_color_header; }
234
+ if ( $template_color_icon ) { $settings['template_color_icon'] = $template_color_icon; }
235
+ if ( $template_color_accent ) { $settings['template_color_accent'] = $template_color_accent; }
236
+ if ( $template_color_accent_text ) { $settings['template_color_accent_text'] = $template_color_accent_text; }
237
+ if ( $template_color_accent2 ) { $settings['template_color_accent2'] = $template_color_accent2; }
238
+ if ( $template_color_accent2_text ) { $settings['template_color_accent2_text'] = $template_color_accent2_text; }
239
+
240
+ if ( $default_recipe_template ) { $settings['default_recipe_template'] = $default_recipe_template; }
241
+ if ( $default_print_template ) { $settings['default_print_template'] = $default_print_template; }
242
 
243
  self::update_settings( $settings );
244
  }
246
  exit();
247
  }
248
 
249
+ /**
250
+ * Save the labels settings.
251
+ *
252
+ * @since 1.10.0
253
+ */
254
+ public static function form_save_settings_labels() {
255
+ if ( isset( $_POST['wprm_settings'] ) && wp_verify_nonce( sanitize_key( $_POST['wprm_settings'] ), 'wprm_settings' ) ) { // Input var okay.
256
+ $labels = array();
257
+
258
+ foreach ( $_POST as $id => $value ) { // Input var okay.
259
+ if ( 'wprm_label_' === substr( $id, 0, 11 ) ) {
260
+ $uid = sanitize_key( substr( $id, 11 ) );
261
+ $labels[ $uid ] = sanitize_text_field( wp_unslash( $value ) );
262
+ }
263
+ }
264
+
265
+ WPRM_Template_Helper::update_labels( $labels );
266
+ }
267
+ wp_safe_redirect( admin_url( 'admin.php?page=wprm_settings&sub=labels' ) );
268
+ exit();
269
+ }
270
+
271
  /**
272
  * Save the features settings.
273
  *
includes/public/class-wprm-shortcode.php CHANGED
@@ -222,31 +222,33 @@ class WPRM_Shortcode {
222
  'align' => 'left',
223
  ), $atts, 'wprm_nutrition_label' );
224
 
225
- $recipe_id = intval( $atts['id'] );
226
- $align = in_array( $atts['align'], array( 'center', 'right' ) ) ? $atts['align'] : 'left';
227
-
228
- // Get first recipe in post content if no ID is set.
229
- if ( ! $recipe_id ) {
230
- $parent_post = get_post();
231
- $recipes = WPRM_Recipe_Manager::get_recipe_ids_from_content( $parent_post->post_content );
232
-
233
- if ( isset( $recipes[0] ) ) {
234
- $recipe_id = $recipes[0];
 
 
235
  }
236
- }
237
 
238
- if ( $recipe_id && WPRM_Addons::is_active( 'premium' ) ) {
239
- $recipe = WPRM_Recipe_Manager::get_recipe( $recipe_id );
240
- $label = WPRMP_Nutrition_Label::nutrition_label( $recipe );
241
 
242
- if ( 'left' !== $align ) {
243
- $label = '<div class="wprm-nutrition-label-container" style="text-align: ' . $align . ';">' . $label . '</div>';
244
- }
245
 
246
- return $label;
247
- } else {
248
- return '';
249
  }
 
 
250
  }
251
 
252
  /**
222
  'align' => 'left',
223
  ), $atts, 'wprm_nutrition_label' );
224
 
225
+ if ( WPRM_Addons::is_active( 'premium' ) ) {
226
+ $recipe_id = intval( $atts['id'] );
227
+ $align = in_array( $atts['align'], array( 'center', 'right' ) ) ? $atts['align'] : 'left';
228
+
229
+ // Get first recipe in post content if no ID is set.
230
+ if ( ! $recipe_id ) {
231
+ $parent_post = get_post();
232
+ $recipes = WPRM_Recipe_Manager::get_recipe_ids_from_content( $parent_post->post_content );
233
+
234
+ if ( isset( $recipes[0] ) ) {
235
+ $recipe_id = $recipes[0];
236
+ }
237
  }
 
238
 
239
+ if ( $recipe_id ) {
240
+ $recipe = WPRM_Recipe_Manager::get_recipe( $recipe_id );
241
+ $label = WPRMP_Nutrition_Label::nutrition_label( $recipe );
242
 
243
+ if ( 'left' !== $align ) {
244
+ $label = '<div class="wprm-nutrition-label-container" style="text-align: ' . $align . ';">' . $label . '</div>';
245
+ }
246
 
247
+ return $label;
248
+ }
 
249
  }
250
+
251
+ return '';
252
  }
253
 
254
  /**
includes/public/class-wprm-taxonomies.php CHANGED
@@ -34,7 +34,7 @@ class WPRM_Taxonomies {
34
  * @since 1.0.0
35
  */
36
  public static function register_taxonomies() {
37
- $taxonomies = WPRM_Taxonomies::get_taxonomies();
38
 
39
  foreach ( $taxonomies as $taxonomy => $labels ) {
40
  $args = array(
@@ -52,11 +52,11 @@ class WPRM_Taxonomies {
52
  }
53
 
54
  /**
55
- * Get the recipe taxonomies.
56
  *
57
  * @since 1.0.0
58
  */
59
- public static function get_taxonomies() {
60
  $taxonomies = apply_filters( 'wprm_recipe_taxonomies', array(
61
  'wprm_course' => array(
62
  'name' => _x( 'Courses', 'taxonomy general name', 'wp-recipe-maker' ),
@@ -75,6 +75,18 @@ class WPRM_Taxonomies {
75
  return $taxonomies;
76
  }
77
 
 
 
 
 
 
 
 
 
 
 
 
 
78
  /**
79
  * Insert default terms for recipe taxonomies.
80
  *
34
  * @since 1.0.0
35
  */
36
  public static function register_taxonomies() {
37
+ $taxonomies = WPRM_Taxonomies::get_taxonomies_to_register();
38
 
39
  foreach ( $taxonomies as $taxonomy => $labels ) {
40
  $args = array(
52
  }
53
 
54
  /**
55
+ * Get the recipe taxonomies to register.
56
  *
57
  * @since 1.0.0
58
  */
59
+ public static function get_taxonomies_to_register() {
60
  $taxonomies = apply_filters( 'wprm_recipe_taxonomies', array(
61
  'wprm_course' => array(
62
  'name' => _x( 'Courses', 'taxonomy general name', 'wp-recipe-maker' ),
75
  return $taxonomies;
76
  }
77
 
78
+ /**
79
+ * Get the recipe taxonomies.
80
+ *
81
+ * @since 1.10.0
82
+ */
83
+ public static function get_taxonomies() {
84
+ $taxonomies = self::get_taxonomies_to_register();
85
+ unset( $taxonomies['wprm_ingredient'] );
86
+
87
+ return $taxonomies;
88
+ }
89
+
90
  /**
91
  * Insert default terms for recipe taxonomies.
92
  *
includes/public/class-wprm-template-helper.php CHANGED
@@ -18,6 +18,93 @@
18
  * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19
  */
20
  class WPRM_Template_Helper {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
21
  /**
22
  * Display the ingredient name with or without link.
23
  *
@@ -50,15 +137,33 @@ class WPRM_Template_Helper {
50
  * @param boolean $shorthand Wether to use shorthand for the unit text.
51
  */
52
  public static function time( $type, $time, $shorthand ) {
53
- $hours = floor( $time / 60 );
54
- $minutes = $time % 60;
 
55
 
56
  $output = '';
57
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
58
  if ( $hours > 0 ) {
 
 
 
59
  $output .= '<span class="wprm-recipe-details wprm-recipe-details-hours wprm-recipe-' . $type . ' wprm-recipe-' . $type . '-hours">';
60
  $output .= $hours;
61
- $output .= '</span> <span class="wprm-recipe-details-unit wprm-recipe-details-unit-minutes wprm-recipe-' . $type . '-unit wprm-recipe-' . $type . 'unit-hours">';
62
 
63
  if ( $shorthand ) {
64
  $output .= $hours > 1 ? __( 'hr', 'wp-recipe-maker' ) : __( 'hrs', 'wp-recipe-maker' );
@@ -70,7 +175,7 @@ class WPRM_Template_Helper {
70
  }
71
 
72
  if ( $minutes > 0 ) {
73
- if ( $hours > 0 ) {
74
  $output .= ' ';
75
  }
76
  $output .= '<span class="wprm-recipe-details wprm-recipe-details-minutes wprm-recipe-' . $type . ' wprm-recipe-' . $type . '-minutes">';
@@ -80,7 +185,7 @@ class WPRM_Template_Helper {
80
  if ( $shorthand ) {
81
  $output .= $minutes > 1 ? __( 'mins', 'wp-recipe-maker' ) : __( 'min', 'wp-recipe-maker' );
82
  } else {
83
- $output .= $minutes > 1 ? __( 'minutes', 'wp-recipe-maker' ) : __( 'minutes', 'wp-recipe-maker' );
84
  }
85
 
86
  $output .= '</span>';
@@ -124,4 +229,35 @@ class WPRM_Template_Helper {
124
 
125
  return $output;
126
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
127
  }
18
  * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19
  */
20
  class WPRM_Template_Helper {
21
+
22
+ /**
23
+ * Cached version of the labels once they have been requested.
24
+ *
25
+ * @since 1.10.0
26
+ * @access private
27
+ * @var array $recipes Array containing recipes that have already been requested for easy access.
28
+ */
29
+ private static $labels = array();
30
+
31
+ /**
32
+ * Display a label that can be changed in the settings.
33
+ *
34
+ * @since 1.10.0
35
+ * @param mixed $uid UID of the label.
36
+ * @param mixed $default Default text for the label.
37
+ */
38
+ public static function label( $uid, $default = '' ) {
39
+ $uid = sanitize_key( $uid );
40
+ $labels = self::get_labels();
41
+
42
+ if ( ! isset( $labels[ $uid ] ) ) {
43
+ $labels[ $uid ] = $default;
44
+ self::update_labels( $labels );
45
+ }
46
+
47
+ return $labels[ $uid ];
48
+ }
49
+
50
+ /**
51
+ * Get all the labels.
52
+ *
53
+ * @since 1.10.0
54
+ */
55
+ public static function get_labels() {
56
+ // Lazy load labels.
57
+ if ( empty( self::$labels ) ) {
58
+ $default_labels = self::get_default_labels();
59
+ $saved_labels = get_option( 'wprm_labels', array() );
60
+
61
+ self::$labels = array_merge( $default_labels, $saved_labels );
62
+ }
63
+
64
+ return self::$labels;
65
+ }
66
+
67
+ /**
68
+ * Get the default labels.
69
+ *
70
+ * @since 1.10.0
71
+ */
72
+ public static function get_default_labels() {
73
+ $defaults = array(
74
+ 'print_button' => __( 'Print', 'wp-recipe-maker' ),
75
+ 'course_tags' => __( 'Course', 'wp-recipe-maker' ),
76
+ 'cuisine_tags' => __( 'Cuisine', 'wp-recipe-maker' ),
77
+ 'prep_time' => __( 'Prep Time', 'wp-recipe-maker' ),
78
+ 'cook_time' => __( 'Cook Time', 'wp-recipe-maker' ),
79
+ 'total_time' => __( 'Total Time', 'wp-recipe-maker' ),
80
+ 'servings' => __( 'Servings', 'wp-recipe-maker' ),
81
+ 'calories' => __( 'Calories', 'wp-recipe-maker' ),
82
+ 'author' => __( 'Author', 'wp-recipe-maker' ),
83
+ 'ingredients' => __( 'Ingredients', 'wp-recipe-maker' ),
84
+ 'instructions' => __( 'Instructions', 'wp-recipe-maker' ),
85
+ 'notes' => __( 'Recipe Notes', 'wp-recipe-maker' ),
86
+ );
87
+
88
+ return apply_filters( 'wprm_label_defaults', $defaults );
89
+ }
90
+
91
+ /**
92
+ * Update the labels.
93
+ *
94
+ * @since 1.10.0
95
+ * @param array $labels_to_update Labels to update.
96
+ */
97
+ public static function update_labels( $labels_to_update ) {
98
+ $labels = self::get_labels();
99
+
100
+ if ( is_array( $labels_to_update ) ) {
101
+ $labels = array_merge( $labels, $labels_to_update );
102
+ }
103
+
104
+ update_option( 'wprm_labels', $labels );
105
+ self::$labels = $labels;
106
+ }
107
+
108
  /**
109
  * Display the ingredient name with or without link.
110
  *
137
  * @param boolean $shorthand Wether to use shorthand for the unit text.
138
  */
139
  public static function time( $type, $time, $shorthand ) {
140
+ $days = floor( $time / (24 * 60) );
141
+ $hours = floor( ( $time - $days * 24 * 60 ) / 60 );
142
+ $minutes = ( $time - $days * 24 * 60 ) % 60;
143
 
144
  $output = '';
145
 
146
+ if ( $days > 0 ) {
147
+ $output .= '<span class="wprm-recipe-details wprm-recipe-details-days wprm-recipe-' . $type . ' wprm-recipe-' . $type . '-days">';
148
+ $output .= $days;
149
+ $output .= '</span> <span class="wprm-recipe-details-unit wprm-recipe-details-unit-days wprm-recipe-' . $type . '-unit wprm-recipe-' . $type . 'unit-days">';
150
+
151
+ if ( $shorthand ) {
152
+ $output .= $days > 1 ? __( 'd', 'wp-recipe-maker' ) : __( 'd', 'wp-recipe-maker' );
153
+ } else {
154
+ $output .= $days > 1 ? __( 'days', 'wp-recipe-maker' ) : __( 'day', 'wp-recipe-maker' );
155
+ }
156
+
157
+ $output .= '</span>';
158
+ }
159
+
160
  if ( $hours > 0 ) {
161
+ if ( $days > 0 ) {
162
+ $output .= ' ';
163
+ }
164
  $output .= '<span class="wprm-recipe-details wprm-recipe-details-hours wprm-recipe-' . $type . ' wprm-recipe-' . $type . '-hours">';
165
  $output .= $hours;
166
+ $output .= '</span> <span class="wprm-recipe-details-unit wprm-recipe-details-unit-hours wprm-recipe-' . $type . '-unit wprm-recipe-' . $type . 'unit-hours">';
167
 
168
  if ( $shorthand ) {
169
  $output .= $hours > 1 ? __( 'hr', 'wp-recipe-maker' ) : __( 'hrs', 'wp-recipe-maker' );
175
  }
176
 
177
  if ( $minutes > 0 ) {
178
+ if ( $days > 0 || $hours > 0 ) {
179
  $output .= ' ';
180
  }
181
  $output .= '<span class="wprm-recipe-details wprm-recipe-details-minutes wprm-recipe-' . $type . ' wprm-recipe-' . $type . '-minutes">';
185
  if ( $shorthand ) {
186
  $output .= $minutes > 1 ? __( 'mins', 'wp-recipe-maker' ) : __( 'min', 'wp-recipe-maker' );
187
  } else {
188
+ $output .= $minutes > 1 ? __( 'minutes', 'wp-recipe-maker' ) : __( 'minute', 'wp-recipe-maker' );
189
  }
190
 
191
  $output .= '</span>';
229
 
230
  return $output;
231
  }
232
+
233
+ /**
234
+ * Display the nutrition label.
235
+ *
236
+ * @since 1.10.0
237
+ * @param mixed $align Optional alignment for the nutrition label.
238
+ */
239
+ public static function nutrition_label( $align = 'left' ) {
240
+ $label = '';
241
+ if ( WPRM_Settings::get( 'show_nutrition_label' ) ) {
242
+ $label = '[wprm-nutrition-label align="' . $align . '"]';
243
+ }
244
+ return $label;
245
+ }
246
+
247
+ /**
248
+ * Metadata to add for tags.
249
+ *
250
+ * @since 1.10.0
251
+ * @param mixed $key Tag we're adding the metadata for.
252
+ */
253
+ public static function tags_meta( $key ) {
254
+ $meta = '';
255
+ if ( 'course' === $key ) {
256
+ $meta = ' itemprop="recipeCategory"';
257
+ } elseif ( 'cuisine' === $key ) {
258
+ $meta = ' itemprop="recipeCuisine"';
259
+ }
260
+
261
+ return $meta;
262
+ }
263
  }
includes/public/class-wprm-template-manager.php CHANGED
@@ -34,6 +34,7 @@ class WPRM_Template_Manager {
34
  */
35
  public static function init() {
36
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
 
37
  }
38
 
39
  /**
@@ -47,6 +48,39 @@ class WPRM_Template_Manager {
47
  wp_enqueue_style( 'wprm-template', $template['url'] . '/' . $template['slug'] . '.min.css', array(), WPRM_VERSION, 'all' );
48
  }
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  /**
51
  * Get template for a specific recipe.
52
  *
34
  */
35
  public static function init() {
36
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
37
+ add_action( 'wp_head', array( __CLASS__, 'custom_css' ) );
38
  }
39
 
40
  /**
48
  wp_enqueue_style( 'wprm-template', $template['url'] . '/' . $template['slug'] . '.min.css', array(), WPRM_VERSION, 'all' );
49
  }
50
 
51
+ /**
52
+ * Output custom CSS from the options.
53
+ *
54
+ * @since 1.10.0
55
+ */
56
+ public static function custom_css() {
57
+ $selector = ' html body .wprm-recipe-container';
58
+
59
+ $output = '<style type="text/css">';
60
+ $output .= $selector . ' { color: ' . WPRM_Settings::get( 'template_color_text' ) . '; }';
61
+ $output .= $selector . ' .wprm-recipe { background-color: ' . WPRM_Settings::get( 'template_color_background' ) . '; }';
62
+ $output .= $selector . ' .wprm-recipe { border-color: ' . WPRM_Settings::get( 'template_color_border' ) . '; }';
63
+ $output .= $selector . ' .wprm-recipe .wprm-color-border { border-color: ' . WPRM_Settings::get( 'template_color_border' ) . '; }';
64
+ $output .= $selector . ' a { color: ' . WPRM_Settings::get( 'template_color_link' ) . '; }';
65
+ $output .= $selector . ' .wprm-recipe .wprm-color-header { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
66
+ $output .= $selector . ' h1 { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
67
+ $output .= $selector . ' h2 { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
68
+ $output .= $selector . ' h3 { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
69
+ $output .= $selector . ' h4 { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
70
+ $output .= $selector . ' h5 { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
71
+ $output .= $selector . ' h6 { color: ' . WPRM_Settings::get( 'template_color_header' ) . '; }';
72
+ $output .= $selector . ' svg path { fill: ' . WPRM_Settings::get( 'template_color_icon' ) . '; }';
73
+ $output .= $selector . ' svg rect { fill: ' . WPRM_Settings::get( 'template_color_icon' ) . '; }';
74
+ $output .= $selector . ' svg polygon { stroke: ' . WPRM_Settings::get( 'template_color_icon' ) . '; }';
75
+ $output .= $selector . ' .wprm-recipe .wprm-color-accent { background-color: ' . WPRM_Settings::get( 'template_color_accent' ) . '; }';
76
+ $output .= $selector . ' .wprm-recipe .wprm-color-accent { color: ' . WPRM_Settings::get( 'template_color_accent_text' ) . '; }';
77
+ $output .= $selector . ' .wprm-recipe .wprm-color-accent2 { background-color: ' . WPRM_Settings::get( 'template_color_accent2' ) . '; }';
78
+ $output .= $selector . ' .wprm-recipe .wprm-color-accent2 { color: ' . WPRM_Settings::get( 'template_color_accent2_text' ) . '; }';
79
+ $output .= '</style>';
80
+
81
+ echo $output;
82
+ }
83
+
84
  /**
85
  * Get template for a specific recipe.
86
  *
languages/wp-recipe-maker-de_DE.mo ADDED
Binary file
languages/wp-recipe-maker-de_DE.po ADDED
@@ -0,0 +1,1219 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Recipe Maker 1.7.1\n"
4
+ "Report-Msgid-Bugs-To: https://wordpress.org/support/plugin/wp-recipe-maker\n"
5
+ "POT-Creation-Date: 2016-12-07 15:02+0000\n"
6
+ "MIME-Version: 1.0\n"
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "PO-Revision-Date: 2016-12-07 15:03+0000\n"
10
+ "Last-Translator: Redaktion <uli@insellivetv.de>\n"
11
+ "Language-Team: German\n"
12
+ "Language: de-DE\n"
13
+ "Plural-Forms: nplurals=2; plural=n != 1\n"
14
+ "X-Generator: Loco - https://localise.biz/"
15
+
16
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:30
17
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:30
18
+ msgid "Shortcode Builder"
19
+ msgstr "Shortcode Builder"
20
+
21
+ #: includes/admin/class-wprm-import-manager.php:50
22
+ #: includes/admin/class-wprm-import-manager.php:51
23
+ #: templates/admin/menu/import-overview.php:15
24
+ msgid "Import Recipes"
25
+ msgstr "Importiere Rezepte"
26
+
27
+ #: includes/admin/class-wprm-recipe-parser.php:148
28
+ msgid "kilograms"
29
+ msgstr "Kilogramm"
30
+
31
+ #: includes/admin/class-wprm-recipe-parser.php:149
32
+ msgid "kilogram"
33
+ msgstr "Kilogramm"
34
+
35
+ #: includes/admin/class-wprm-recipe-parser.php:150
36
+ msgid "kg"
37
+ msgstr "kg"
38
+
39
+ #: includes/admin/class-wprm-recipe-parser.php:151
40
+ msgid "grams"
41
+ msgstr "Gramm"
42
+
43
+ #: includes/admin/class-wprm-recipe-parser.php:152
44
+ msgid "gram"
45
+ msgstr "Gram"
46
+
47
+ #: includes/admin/class-wprm-recipe-parser.php:153
48
+ msgid "gr"
49
+ msgstr "gr"
50
+
51
+ #: includes/admin/class-wprm-recipe-parser.php:154
52
+ #: includes/public/class-wprm-metadata.php:164
53
+ msgid "g"
54
+ msgstr "g"
55
+
56
+ #: includes/admin/class-wprm-recipe-parser.php:155
57
+ msgid "milligrams"
58
+ msgstr "Milligramm"
59
+
60
+ #: includes/admin/class-wprm-recipe-parser.php:156
61
+ msgid "milligram"
62
+ msgstr "Milligramm"
63
+
64
+ #: includes/admin/class-wprm-recipe-parser.php:157
65
+ #: includes/public/class-wprm-metadata.php:169
66
+ msgid "mg"
67
+ msgstr "mg"
68
+
69
+ #: includes/admin/class-wprm-recipe-parser.php:158
70
+ msgid "pounds"
71
+ msgstr "Pfund"
72
+
73
+ #: includes/admin/class-wprm-recipe-parser.php:159
74
+ msgid "pound"
75
+ msgstr "Pfund"
76
+
77
+ #: includes/admin/class-wprm-recipe-parser.php:160
78
+ msgid "lbs"
79
+ msgstr "lbs"
80
+
81
+ #: includes/admin/class-wprm-recipe-parser.php:161
82
+ msgid "lb"
83
+ msgstr "lb"
84
+
85
+ #: includes/admin/class-wprm-recipe-parser.php:162
86
+ msgid "ounces"
87
+ msgstr "Unzen"
88
+
89
+ #: includes/admin/class-wprm-recipe-parser.php:163
90
+ msgid "ounce"
91
+ msgstr "Unze"
92
+
93
+ #: includes/admin/class-wprm-recipe-parser.php:164
94
+ msgid "oz"
95
+ msgstr "uze"
96
+
97
+ #: includes/admin/class-wprm-recipe-parser.php:166
98
+ msgid "liters"
99
+ msgstr "Liter"
100
+
101
+ #: includes/admin/class-wprm-recipe-parser.php:167
102
+ msgid "liter"
103
+ msgstr "Liter"
104
+
105
+ #: includes/admin/class-wprm-recipe-parser.php:168
106
+ msgid "l"
107
+ msgstr "L"
108
+
109
+ #: includes/admin/class-wprm-recipe-parser.php:169
110
+ msgid "deciliters"
111
+ msgstr "Deziliter"
112
+
113
+ #: includes/admin/class-wprm-recipe-parser.php:170
114
+ msgid "deciliter"
115
+ msgstr "Deziliter"
116
+
117
+ #: includes/admin/class-wprm-recipe-parser.php:171
118
+ msgid "dl"
119
+ msgstr "dl"
120
+
121
+ #: includes/admin/class-wprm-recipe-parser.php:172
122
+ msgid "centiliters"
123
+ msgstr "Zentiliter"
124
+
125
+ #: includes/admin/class-wprm-recipe-parser.php:173
126
+ msgid "centiliter"
127
+ msgstr "Zentiliter"
128
+
129
+ #: includes/admin/class-wprm-recipe-parser.php:174
130
+ msgid "cl"
131
+ msgstr "ct"
132
+
133
+ #: includes/admin/class-wprm-recipe-parser.php:175
134
+ msgid "milliliters"
135
+ msgstr "Milliliter"
136
+
137
+ #: includes/admin/class-wprm-recipe-parser.php:176
138
+ msgid "milliliter"
139
+ msgstr "Milliliter"
140
+
141
+ #: includes/admin/class-wprm-recipe-parser.php:177
142
+ msgid "ml"
143
+ msgstr "ml"
144
+
145
+ #: includes/admin/class-wprm-recipe-parser.php:178
146
+ msgid "gallons"
147
+ msgstr "Gallonen"
148
+
149
+ #: includes/admin/class-wprm-recipe-parser.php:179
150
+ msgid "gallon"
151
+ msgstr "Gallone"
152
+
153
+ #: includes/admin/class-wprm-recipe-parser.php:180
154
+ msgid "gal"
155
+ msgstr "gal"
156
+
157
+ #: includes/admin/class-wprm-recipe-parser.php:181
158
+ msgid "quarts"
159
+ msgstr "Viertel"
160
+
161
+ #: includes/admin/class-wprm-recipe-parser.php:182
162
+ msgid "quart"
163
+ msgstr "Viertel"
164
+
165
+ #: includes/admin/class-wprm-recipe-parser.php:183
166
+ msgid "qt"
167
+ msgstr "1/4"
168
+
169
+ #: includes/admin/class-wprm-recipe-parser.php:184
170
+ msgid "pints"
171
+ msgstr "Pinnchen"
172
+
173
+ #: includes/admin/class-wprm-recipe-parser.php:185
174
+ msgid "pint"
175
+ msgstr "Pinnchen"
176
+
177
+ #: includes/admin/class-wprm-recipe-parser.php:186
178
+ msgid "pt"
179
+ msgstr "Pn."
180
+
181
+ #: includes/admin/class-wprm-recipe-parser.php:187
182
+ msgid "cups"
183
+ msgstr "Tassen"
184
+
185
+ #: includes/admin/class-wprm-recipe-parser.php:188
186
+ msgid "cup"
187
+ msgstr "Tasse"
188
+
189
+ #: includes/admin/class-wprm-recipe-parser.php:189
190
+ msgid "cu"
191
+ msgstr "Tsn."
192
+
193
+ #: includes/admin/class-wprm-recipe-parser.php:190
194
+ msgid "c"
195
+ msgstr "Ts."
196
+
197
+ #: includes/admin/class-wprm-recipe-parser.php:191
198
+ msgid "fluid ounces"
199
+ msgstr "Flüssige Unzen"
200
+
201
+ #: includes/admin/class-wprm-recipe-parser.php:192
202
+ msgid "fluid ounce"
203
+ msgstr "Flüssigunzen"
204
+
205
+ #: includes/admin/class-wprm-recipe-parser.php:193
206
+ msgid "fl ounces"
207
+ msgstr "fl Unzen"
208
+
209
+ #: includes/admin/class-wprm-recipe-parser.php:194
210
+ msgid "fl ounce"
211
+ msgstr "fl Unze"
212
+
213
+ #: includes/admin/class-wprm-recipe-parser.php:195
214
+ msgid "floz"
215
+ msgstr "fluz"
216
+
217
+ #: includes/admin/class-wprm-recipe-parser.php:196
218
+ msgid "tablespoons"
219
+ msgstr "Esslöffel"
220
+
221
+ #: includes/admin/class-wprm-recipe-parser.php:197
222
+ msgid "tablespoon"
223
+ msgstr "Essllöffel"
224
+
225
+ #: includes/admin/class-wprm-recipe-parser.php:198
226
+ msgid "tbsps"
227
+ msgstr "EL"
228
+
229
+ #: includes/admin/class-wprm-recipe-parser.php:199
230
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:34
231
+ msgid "tbsp"
232
+ msgstr "EL"
233
+
234
+ #: includes/admin/class-wprm-recipe-parser.php:200
235
+ msgid "tbls"
236
+ msgstr "EL"
237
+
238
+ #: includes/admin/class-wprm-recipe-parser.php:201
239
+ msgid "tbs"
240
+ msgstr "EL"
241
+
242
+ #: includes/admin/class-wprm-recipe-parser.php:202
243
+ msgid "tb"
244
+ msgstr "EL"
245
+
246
+ #: includes/admin/class-wprm-recipe-parser.php:203
247
+ msgid "T"
248
+ msgstr "EL"
249
+
250
+ #: includes/admin/class-wprm-recipe-parser.php:204
251
+ msgid "teaspoons"
252
+ msgstr "Teelöffel"
253
+
254
+ #: includes/admin/class-wprm-recipe-parser.php:205
255
+ msgid "teaspoon"
256
+ msgstr "Teelöffel"
257
+
258
+ #: includes/admin/class-wprm-recipe-parser.php:206
259
+ msgid "tsps"
260
+ msgstr "TL"
261
+
262
+ #: includes/admin/class-wprm-recipe-parser.php:207
263
+ msgid "tsp"
264
+ msgstr "TL"
265
+
266
+ #: includes/admin/class-wprm-recipe-parser.php:208
267
+ msgid "ts"
268
+ msgstr "TL"
269
+
270
+ #: includes/admin/class-wprm-recipe-parser.php:209
271
+ msgid "t"
272
+ msgstr "TL"
273
+
274
+ #: includes/admin/class-wprm-recipe-parser.php:211
275
+ msgid "meters"
276
+ msgstr "Meter"
277
+
278
+ #: includes/admin/class-wprm-recipe-parser.php:212
279
+ msgid "meter"
280
+ msgstr "Meter"
281
+
282
+ #: includes/admin/class-wprm-recipe-parser.php:213
283
+ msgid "m"
284
+ msgstr "m"
285
+
286
+ #: includes/admin/class-wprm-recipe-parser.php:214
287
+ msgid "centimeters"
288
+ msgstr "Zentimeter"
289
+
290
+ #: includes/admin/class-wprm-recipe-parser.php:215
291
+ msgid "centimeter"
292
+ msgstr "Zentimeter"
293
+
294
+ #: includes/admin/class-wprm-recipe-parser.php:216
295
+ msgid "cm"
296
+ msgstr "cm"
297
+
298
+ #: includes/admin/class-wprm-recipe-parser.php:217
299
+ msgid "millimeters"
300
+ msgstr "Millimeter"
301
+
302
+ #: includes/admin/class-wprm-recipe-parser.php:218
303
+ msgid "millimeter"
304
+ msgstr "Millimeter"
305
+
306
+ #: includes/admin/class-wprm-recipe-parser.php:219
307
+ msgid "mm"
308
+ msgstr "mm"
309
+
310
+ #: includes/admin/class-wprm-recipe-parser.php:220
311
+ msgid "yards"
312
+ msgstr "Yard"
313
+
314
+ #: includes/admin/class-wprm-recipe-parser.php:221
315
+ msgid "yard"
316
+ msgstr "Yard"
317
+
318
+ #: includes/admin/class-wprm-recipe-parser.php:222
319
+ msgid "yd"
320
+ msgstr "yd"
321
+
322
+ #: includes/admin/class-wprm-recipe-parser.php:223
323
+ msgid "feet"
324
+ msgstr "Feed"
325
+
326
+ #: includes/admin/class-wprm-recipe-parser.php:224
327
+ msgid "foot"
328
+ msgstr "Fuß"
329
+
330
+ #: includes/admin/class-wprm-recipe-parser.php:225
331
+ msgid "ft"
332
+ msgstr "ft"
333
+
334
+ #: includes/admin/class-wprm-recipe-parser.php:226
335
+ msgid "inches"
336
+ msgstr "Inch"
337
+
338
+ #: includes/admin/class-wprm-recipe-parser.php:227
339
+ msgid "inch"
340
+ msgstr "Inch"
341
+
342
+ #: includes/admin/class-wprm-recipe-parser.php:228
343
+ msgid "in"
344
+ msgstr "in"
345
+
346
+ #: includes/admin/class-wprm-recipe-parser.php:230
347
+ msgid "cloves"
348
+ msgstr "Zehen"
349
+
350
+ #: includes/admin/class-wprm-recipe-parser.php:231
351
+ msgid "clove"
352
+ msgstr "Zehe"
353
+
354
+ #: includes/admin/class-wprm-recipe-parser.php:232
355
+ msgid "leaves"
356
+ msgstr "Blätter"
357
+
358
+ #: includes/admin/class-wprm-recipe-parser.php:233
359
+ msgid "leave"
360
+ msgstr "Blatt"
361
+
362
+ #: includes/admin/class-wprm-recipe-parser.php:234
363
+ msgid "slices"
364
+ msgstr "Scheiben"
365
+
366
+ #: includes/admin/class-wprm-recipe-parser.php:235
367
+ msgid "slice"
368
+ msgstr "Scheibe"
369
+
370
+ #: includes/admin/class-wprm-recipe-parser.php:236
371
+ msgid "pieces"
372
+ msgstr "Stücke"
373
+
374
+ #: includes/admin/class-wprm-recipe-parser.php:237
375
+ msgid "piece"
376
+ msgstr "Stück"
377
+
378
+ #: includes/admin/class-wprm-recipe-parser.php:238
379
+ msgid "pinches"
380
+ msgstr "Prisen"
381
+
382
+ #: includes/admin/class-wprm-recipe-parser.php:239
383
+ msgid "pinche"
384
+ msgstr "Prise"
385
+
386
+ #: includes/admin/import/class-wprm-import-easyrecipe.php:89
387
+ msgid "Unknown"
388
+ msgstr "unbekannt"
389
+
390
+ #: includes/admin/import/class-wprm-import-wpultimaterecipe.php:349
391
+ #: includes/public/class-wprm-template-helper.php:66
392
+ msgid "hour"
393
+ msgstr "Stunde"
394
+
395
+ #: includes/admin/import/class-wprm-import-wpultimaterecipe.php:350
396
+ #: includes/public/class-wprm-template-helper.php:66
397
+ msgid "hours"
398
+ msgstr "Stunden"
399
+
400
+ #: includes/admin/menu/class-wprm-admin-menu-addons.php:47
401
+ #: templates/admin/menu/addons.php:15
402
+ msgid "Add-Ons"
403
+ msgstr "Add-Ons"
404
+
405
+ #: includes/admin/menu/class-wprm-admin-menu-faq.php:76
406
+ msgid "FAQ & Support"
407
+ msgstr "FAQ & Unterstützung"
408
+
409
+ #: includes/admin/modal/class-wprm-modal.php:60
410
+ #: templates/admin/modal/modal.php:96
411
+ msgid "Insert"
412
+ msgstr "einfügen"
413
+
414
+ #: includes/admin/modal/class-wprm-modal.php:61
415
+ msgid "Update"
416
+ msgstr "Aktualisieren"
417
+
418
+ #: includes/admin/modal/class-wprm-modal.php:62
419
+ msgid "Select or Upload Image"
420
+ msgstr "Bild auswählen und hochladen"
421
+
422
+ #: includes/admin/modal/class-wprm-modal.php:63
423
+ msgid "Use Image"
424
+ msgstr "Bild verwenden"
425
+
426
+ #: includes/admin/modal/class-wprm-modal.php:64
427
+ msgid "Are you sure you want to remove this recipe?"
428
+ msgstr "Möchten Sie dieses Rezept wirklich entfernen?"
429
+
430
+ #: includes/admin/modal/class-wprm-modal.php:65
431
+ msgid "Are you sure you want to start over with importing from text?"
432
+ msgstr "Sind Sie sicher, dass Sie mit dem Import von Text beginnen möchten?"
433
+
434
+ #: includes/admin/modal/class-wprm-modal.php:117
435
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:33
436
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:33
437
+ msgid "Recipe"
438
+ msgstr "Rezept"
439
+
440
+ #: includes/admin/modal/class-wprm-modal.php:121
441
+ msgid "Import from Text"
442
+ msgstr "Importiere aus Text"
443
+
444
+ #: includes/admin/modal/class-wprm-modal.php:128
445
+ msgid "Recipe Details"
446
+ msgstr "Rezept Details"
447
+
448
+ #: includes/admin/modal/class-wprm-modal.php:135
449
+ msgid "Ingredients & Instructions"
450
+ msgstr "Zutaten & Verarbeitung"
451
+
452
+ #: includes/admin/modal/class-wprm-modal.php:141
453
+ #: templates/recipe/clean-print/clean-print.php:141
454
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:142
455
+ #: templates/recipe/simple/simple.php:161
456
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:165
457
+ msgid "Recipe Notes"
458
+ msgstr "Rezept-Anmerkungen"
459
+
460
+ #: includes/admin/modal/class-wprm-modal.php:150
461
+ msgid "Recipe Snippets"
462
+ msgstr "Rezept-Schnipsel"
463
+
464
+ #: includes/admin/modal/class-wprm-modal.php:154
465
+ #: includes/public/class-wprm-shortcode.php:154
466
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:45
467
+ msgid "Jump to Recipe"
468
+ msgstr "Springe zu Rezept"
469
+
470
+ #: includes/admin/modal/class-wprm-modal.php:161
471
+ #: includes/public/class-wprm-shortcode.php:186
472
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:45
473
+ msgid "Print Recipe"
474
+ msgstr "Rezept drucken"
475
+
476
+ #: includes/admin/modal/class-wprm-shortcode-preview.php:46
477
+ msgid "remove"
478
+ msgstr "Entfernen"
479
+
480
+ #: includes/public/class-wprm-comment-rating.php:114
481
+ #: templates/public/comment-rating-form.php:14
482
+ msgid "Recipe Rating"
483
+ msgstr "Rezept Bewertung"
484
+
485
+ #: includes/public/class-wprm-metadata.php:167
486
+ #: templates/admin/modal/tabs/recipe-details.php:59
487
+ #: templates/recipe/clean-print/clean-print.php:76
488
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:77
489
+ #: templates/recipe/simple/simple.php:93
490
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:97
491
+ msgid "kcal"
492
+ msgstr "kcal"
493
+
494
+ #: includes/public/class-wprm-metadata.php:178
495
+ msgid "1 serving"
496
+ msgstr "1 Portion"
497
+
498
+ #: includes/public/class-wprm-post-type.php:39
499
+ msgctxt "post type general name"
500
+ msgid "Recipes"
501
+ msgstr "Rezepte"
502
+
503
+ #: includes/public/class-wprm-post-type.php:40
504
+ msgctxt "post type singular name"
505
+ msgid "Recipe"
506
+ msgstr "Rezept"
507
+
508
+ #: includes/public/class-wprm-settings.php:78
509
+ msgid "WPRM Settings"
510
+ msgstr "WPRM-Einstellungen"
511
+
512
+ #: includes/public/class-wprm-settings.php:78
513
+ msgid "Settings"
514
+ msgstr "Einstellungen"
515
+
516
+ #: includes/public/class-wprm-taxonomies.php:62
517
+ msgctxt "taxonomy general name"
518
+ msgid "Courses"
519
+ msgstr "Gerichte"
520
+
521
+ #: includes/public/class-wprm-taxonomies.php:63
522
+ msgctxt "taxonomy singular name"
523
+ msgid "Course"
524
+ msgstr "Gericht"
525
+
526
+ #: includes/public/class-wprm-taxonomies.php:66
527
+ msgctxt "taxonomy general name"
528
+ msgid "Cuisines"
529
+ msgstr "Länder & Regionen"
530
+
531
+ #: includes/public/class-wprm-taxonomies.php:67
532
+ msgctxt "taxonomy singular name"
533
+ msgid "Cuisine"
534
+ msgstr "Land & Region"
535
+
536
+ #: includes/public/class-wprm-taxonomies.php:70
537
+ msgctxt "taxonomy general name"
538
+ msgid "Ingredients"
539
+ msgstr "Zutaten"
540
+
541
+ #: includes/public/class-wprm-taxonomies.php:71
542
+ msgctxt "taxonomy singular name"
543
+ msgid "Ingredient"
544
+ msgstr "Zutat"
545
+
546
+ #: includes/public/class-wprm-taxonomies.php:85
547
+ msgid "Breakfast"
548
+ msgstr "Frühstück"
549
+
550
+ #: includes/public/class-wprm-taxonomies.php:86
551
+ msgid "Appetizer"
552
+ msgstr "Vorspeise"
553
+
554
+ #: includes/public/class-wprm-taxonomies.php:87
555
+ msgid "Soup"
556
+ msgstr "Suppe"
557
+
558
+ #: includes/public/class-wprm-taxonomies.php:88
559
+ msgid "Main Course"
560
+ msgstr "Hauptgericht"
561
+
562
+ #: includes/public/class-wprm-taxonomies.php:89
563
+ msgid "Side Dish"
564
+ msgstr "Beilage"
565
+
566
+ #: includes/public/class-wprm-taxonomies.php:90
567
+ msgid "Salad"
568
+ msgstr "Salat"
569
+
570
+ #: includes/public/class-wprm-taxonomies.php:91
571
+ msgid "Dessert"
572
+ msgstr "Nachspeise"
573
+
574
+ #: includes/public/class-wprm-taxonomies.php:92
575
+ msgid "Snack"
576
+ msgstr "Kleinigkeit"
577
+
578
+ #: includes/public/class-wprm-taxonomies.php:93
579
+ msgid "Drinks"
580
+ msgstr "Getränke"
581
+
582
+ #: includes/public/class-wprm-taxonomies.php:97
583
+ msgid "French"
584
+ msgstr "Französisch"
585
+
586
+ #: includes/public/class-wprm-taxonomies.php:98
587
+ msgid "Italian"
588
+ msgstr "Italienisch"
589
+
590
+ #: includes/public/class-wprm-taxonomies.php:99
591
+ msgid "Mediterranean"
592
+ msgstr "Mediterran"
593
+
594
+ #: includes/public/class-wprm-taxonomies.php:100
595
+ msgid "Indian"
596
+ msgstr "Indisch"
597
+
598
+ #: includes/public/class-wprm-taxonomies.php:101
599
+ msgid "Chinese"
600
+ msgstr "Chinesisch"
601
+
602
+ #: includes/public/class-wprm-taxonomies.php:102
603
+ msgid "Japanese"
604
+ msgstr "Japanisch"
605
+
606
+ #: includes/public/class-wprm-taxonomies.php:103
607
+ msgid "American"
608
+ msgstr "Amerikanisch"
609
+
610
+ #: includes/public/class-wprm-taxonomies.php:104
611
+ msgid "Mexican"
612
+ msgstr "Mexikanisch"
613
+
614
+ #: includes/public/class-wprm-template-helper.php:64
615
+ msgid "hr"
616
+ msgstr "Std."
617
+
618
+ #: includes/public/class-wprm-template-helper.php:64
619
+ msgid "hrs"
620
+ msgstr "Stdn."
621
+
622
+ #: includes/public/class-wprm-template-helper.php:81
623
+ msgid "mins"
624
+ msgstr "Min."
625
+
626
+ #: includes/public/class-wprm-template-helper.php:81
627
+ msgid "min"
628
+ msgstr "Min."
629
+
630
+ #: includes/public/class-wprm-template-helper.php:83
631
+ #: templates/admin/modal/tabs/recipe-details.php:64
632
+ #: templates/admin/modal/tabs/recipe-details.php:67
633
+ #: templates/admin/modal/tabs/recipe-details.php:70
634
+ msgid "minutes"
635
+ msgstr "Minuten"
636
+
637
+ #: includes/public/class-wprm-template-helper.php:120
638
+ msgid "from"
639
+ msgstr "von"
640
+
641
+ #: includes/public/class-wprm-template-helper.php:120
642
+ msgid "vote"
643
+ msgid_plural "votes"
644
+ msgstr[0] "Bewertung"
645
+ msgstr[1] "Bewertungen"
646
+
647
+ #: templates/admin/menu/import-overview.php:16
648
+ msgid "Considerations Before Importing"
649
+ msgstr "Überprüfen vor dem Import"
650
+
651
+ #: templates/admin/menu/import-overview.php:18
652
+ msgid ""
653
+ "Importing recipes will convert them to our format and they won't be "
654
+ "available in the old plugin anymore. We recommend backing up before starting "
655
+ "the process and trying to import 1 single recipe first to make sure "
656
+ "everything converts properly."
657
+ msgstr ""
658
+ "Beim Importieren von Rezepten werden diese in ein neues Format konvertiert "
659
+ "und sie sind nicht mehr im alten Plugin verfügbar. Wir empfehlen die "
660
+ "Sicherung vor dem Start des Prozesses und versuchen zunächst nur 1 einziges "
661
+ "Rezept zu importieren, um sicherzustellen, dass alles richtig umgewandelt "
662
+ "wird."
663
+
664
+ #: templates/admin/menu/import-overview.php:21
665
+ msgid ""
666
+ "If your current plugin uses custom post types and has different permalinks "
667
+ "than regular posts you might want to use a redirection plugin to set up 301 "
668
+ "redirects. Contact us if you need help!"
669
+ msgstr ""
670
+ "Wenn Ihr aktuelles Plugin benutzerdefinierte Post-Typen verwendet und andere "
671
+ "Permalinks hat, als reguläre Beiträge, können Sie ein Umleitungs-Plugin "
672
+ "verwenden, um 301 Redirects einzurichten. Treten Sie mit uns in Verbindung, "
673
+ "wenn Sie Hilfe benötigen!"
674
+
675
+ #: templates/admin/menu/import-overview.php:24
676
+ msgid ""
677
+ "Importing lots of recipes at once can cause a PHP timeout error. All recipes "
678
+ "that were handled up until the error will have been imported correctly."
679
+ msgstr ""
680
+ "Viele Rezepte auf einmal importieren kann einen PHP-Timeout-Fehler "
681
+ "verursachen. Alle Rezepte, die bis zu den Fehler behandelt wurden, werden "
682
+ "korrekt importiert wurden."
683
+
684
+ #: templates/admin/menu/import-overview.php:27
685
+ #: templates/admin/menu/import-recipes.php:44
686
+ msgid "Recipes to Import"
687
+ msgstr "Rezepte zum Importieren"
688
+
689
+ #: templates/admin/menu/import-overview.php:42
690
+ #: templates/admin/menu/import-overview.php:67
691
+ msgid "No recipes found."
692
+ msgstr "Kein Rezept gefunden"
693
+
694
+ #: templates/admin/menu/import-overview.php:47
695
+ msgid "%d recipe found"
696
+ msgid_plural "%d recipes found"
697
+ msgstr[0] "%d Rezept gefunden"
698
+ msgstr[1] "%d Rezepte gefunden"
699
+
700
+ #: templates/admin/menu/import-overview.php:48
701
+ msgid "Explore import options"
702
+ msgstr "Erkunden Sie die Importoptionen"
703
+
704
+ #: templates/admin/menu/import-overview.php:52
705
+ msgid "Imported Recipes to Check"
706
+ msgstr "Importierte Rezepte überprüfen"
707
+
708
+ #: templates/admin/menu/import-overview.php:71
709
+ msgid ""
710
+ "We recommend going through all of these recipes to make sure the import "
711
+ "process was successful. Pay attention to the different ingredient parts to "
712
+ "be able to make use of all of our features."
713
+ msgstr ""
714
+ "Es wird empfohlen, alle diese Rezepte zu überprüfen, um sicherzustellen, "
715
+ "dass der Importvorgang erfolgreich war. Achten Sie auf die Teile der "
716
+ "verschiedenen Zutaten. ob alle Funktionen richtig übertragen wurden."
717
+
718
+ #: templates/admin/menu/import-overview.php:74
719
+ msgid ""
720
+ "After doing so you can mark a recipe as checked to keep track of the recipes "
721
+ "you still have to go through."
722
+ msgstr ""
723
+ "Nachdem Sie das getan haben, markieren Sie alle Rezepte als überprüft, um "
724
+ "den Überblick zu behalten, welche Rezepte noch geprüft werden müssen."
725
+
726
+ #: templates/admin/menu/import-overview.php:97
727
+ msgid "Mark Selected Recipes as Checked"
728
+ msgstr "Ausgewählte Rezepte als überprüft markieren"
729
+
730
+ #: templates/admin/menu/import-recipes.php:20
731
+ msgid "Something went wrong."
732
+ msgstr "Etwas ist schief gelaufen."
733
+
734
+ #: templates/admin/menu/import-recipes.php:27
735
+ msgid "Import from %s"
736
+ msgstr "Import aus %"
737
+
738
+ #: templates/admin/menu/import-recipes.php:41
739
+ msgid "Import Settings"
740
+ msgstr "Importeinstellungen"
741
+
742
+ #: templates/admin/menu/import-recipes.php:45
743
+ msgid "Select"
744
+ msgstr "Auswählen"
745
+
746
+ #: templates/admin/menu/import-recipes.php:45
747
+ msgid "all"
748
+ msgstr "Alle"
749
+
750
+ #: templates/admin/menu/import-recipes.php:45
751
+ msgid "none"
752
+ msgstr "Keine"
753
+
754
+ #: templates/admin/menu/import-recipes.php:63
755
+ msgid "Import Selected Recipes"
756
+ msgstr "Importieren Sie ausgewählte Rezepte"
757
+
758
+ #: templates/admin/modal/modal.php:16
759
+ msgid "Close Modal"
760
+ msgstr "Schließen Sie Modal"
761
+
762
+ #: templates/admin/modal/modal.php:38
763
+ msgid "You're currently editing a recipe."
764
+ msgstr "Sie bearbeiten gerade ein Rezept."
765
+
766
+ #: templates/admin/modal/modal.php:38
767
+ msgid "Use the \"WP Recipe Maker\" button to access other features."
768
+ msgstr ""
769
+ "Die Schaltfläche 'WP-Rezept-Maker' bietet Zugriff auf andere Funktionen."
770
+
771
+ #: templates/admin/modal/tabs/import-text.php:16
772
+ msgid "Start Over"
773
+ msgstr "Starte nun"
774
+
775
+ #: templates/admin/modal/tabs/import-text.php:17
776
+ msgid "Clear"
777
+ msgstr "Löschen"
778
+
779
+ #: templates/admin/modal/tabs/import-text.php:18
780
+ msgid "Next"
781
+ msgstr "Nächste"
782
+
783
+ #: templates/admin/modal/tabs/import-text.php:22
784
+ msgid ""
785
+ "Paste the recipe you want to import in the textarea below to get started."
786
+ msgstr ""
787
+ "Fügen Sie das Rezept, das Sie in den Textbereich importieren möchten, ein, "
788
+ "um zu beginnen."
789
+
790
+ #: templates/admin/modal/tabs/import-text.php:30
791
+ #: templates/admin/modal/tabs/import-text.php:35
792
+ #: templates/admin/modal/tabs/import-text.php:40
793
+ #: templates/admin/modal/tabs/import-text.php:52
794
+ #: templates/admin/modal/tabs/import-text.php:64
795
+ msgid "Highlight this part of the recipe:"
796
+ msgstr "Markieren Sie diesen Teil des Rezepts:"
797
+
798
+ #: templates/admin/modal/tabs/import-text.php:30
799
+ #: templates/admin/modal/tabs/recipe-details.php:30
800
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:21
801
+ msgid "Name"
802
+ msgstr "Name"
803
+
804
+ #: templates/admin/modal/tabs/import-text.php:35
805
+ #: templates/admin/modal/tabs/recipe-details.php:34
806
+ msgid "Summary"
807
+ msgstr "Zusammenfassung"
808
+
809
+ #: templates/admin/modal/tabs/import-text.php:40
810
+ #: templates/recipe/clean-print/clean-print.php:90
811
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:91
812
+ #: templates/recipe/simple/simple.php:107
813
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:111
814
+ msgid "Ingredients"
815
+ msgstr "Zutaten"
816
+
817
+ #: templates/admin/modal/tabs/import-text.php:45
818
+ msgid "Check any ingredient groups in this list:"
819
+ msgstr "Überprüfen Sie jede Zutatengruppe in dieser Liste:"
820
+
821
+ #: templates/admin/modal/tabs/import-text.php:52
822
+ #: templates/recipe/clean-print/clean-print.php:120
823
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:121
824
+ #: templates/recipe/simple/simple.php:137
825
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:141
826
+ msgid "Instructions"
827
+ msgstr "Anleitungen"
828
+
829
+ #: templates/admin/modal/tabs/import-text.php:57
830
+ msgid "Check any instruction groups in this list:"
831
+ msgstr "Überprüfen Sie jede Anleitungsgruppe in dieser Liste:"
832
+
833
+ #: templates/admin/modal/tabs/import-text.php:64
834
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:22
835
+ #: templates/admin/modal/tabs/recipe-notes.php:16
836
+ msgid "Notes"
837
+ msgstr "Notizen"
838
+
839
+ #: templates/admin/modal/tabs/import-text.php:69
840
+ msgid "Finished the text import."
841
+ msgstr "Text Import abgeschlossen."
842
+
843
+ #: templates/admin/modal/tabs/recipe-details.php:23
844
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:54
845
+ msgid "Image"
846
+ msgstr "Bild"
847
+
848
+ #: templates/admin/modal/tabs/recipe-details.php:24
849
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:70
850
+ msgid "Add Image"
851
+ msgstr "Bild hinzufügen"
852
+
853
+ #: templates/admin/modal/tabs/recipe-details.php:25
854
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:71
855
+ msgid "Remove Image"
856
+ msgstr "Bild entfernen"
857
+
858
+ #: templates/admin/modal/tabs/recipe-details.php:31
859
+ msgid "Recipe Name"
860
+ msgstr "Rezept Name"
861
+
862
+ #: templates/admin/modal/tabs/recipe-details.php:38
863
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:87
864
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:91
865
+ msgid "Hint"
866
+ msgstr "Hinweis"
867
+
868
+ #: templates/admin/modal/tabs/recipe-details.php:39
869
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:92
870
+ msgid "Select text to add styling or links."
871
+ msgstr ""
872
+ "Markieren Sie Textstellen, um Styling oder Links hinzuzufügen.\n"
873
+ "\t\n"
874
+ "\t\n"
875
+ "\t\n"
876
+ "\t\n"
877
+ "\t\n"
878
+ "\t\n"
879
+ "\t\t\n"
880
+
881
+ #: templates/admin/modal/tabs/recipe-details.php:42
882
+ #: templates/recipe/clean-print/clean-print.php:81
883
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:82
884
+ #: templates/recipe/simple/simple.php:98
885
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:102
886
+ msgid "Author"
887
+ msgstr "Autor"
888
+
889
+ #: templates/admin/modal/tabs/recipe-details.php:44
890
+ msgid "Don't show"
891
+ msgstr "Nicht anzeigen"
892
+
893
+ #: templates/admin/modal/tabs/recipe-details.php:45
894
+ msgid "Name of post author"
895
+ msgstr "Name des Post-Autors"
896
+
897
+ #: templates/admin/modal/tabs/recipe-details.php:46
898
+ msgid "Custom author name"
899
+ msgstr "Benutzerdefinierte Autorenname"
900
+
901
+ #: templates/admin/modal/tabs/recipe-details.php:49
902
+ msgid "Custom Author Name"
903
+ msgstr "Benutzerdefinierter Autorenname"
904
+
905
+ #: templates/admin/modal/tabs/recipe-details.php:50
906
+ msgid "Author Name"
907
+ msgstr "Name des Autors"
908
+
909
+ #: templates/admin/modal/tabs/recipe-details.php:53
910
+ #: templates/recipe/clean-print/clean-print.php:71
911
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:72
912
+ #: templates/recipe/simple/simple.php:88
913
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:92
914
+ msgid "Servings"
915
+ msgstr "Portionen"
916
+
917
+ #: templates/admin/modal/tabs/recipe-details.php:54
918
+ msgid "people"
919
+ msgstr "Personen"
920
+
921
+ #: templates/admin/modal/tabs/recipe-details.php:58
922
+ #: templates/recipe/clean-print/clean-print.php:76
923
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:77
924
+ #: templates/recipe/simple/simple.php:93
925
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:97
926
+ msgid "Calories"
927
+ msgstr "Kalorien"
928
+
929
+ #: templates/admin/modal/tabs/recipe-details.php:63
930
+ #: templates/recipe/clean-print/clean-print.php:54
931
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:55
932
+ #: templates/recipe/simple/simple.php:69
933
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:35
934
+ msgid "Prep Time"
935
+ msgstr "Vorbereitungszeit"
936
+
937
+ #: templates/admin/modal/tabs/recipe-details.php:66
938
+ #: templates/recipe/clean-print/clean-print.php:59
939
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:60
940
+ #: templates/recipe/simple/simple.php:75
941
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:42
942
+ msgid "Cook Time"
943
+ msgstr "Zubereitungszeit"
944
+
945
+ #: templates/admin/modal/tabs/recipe-details.php:69
946
+ #: templates/recipe/clean-print/clean-print.php:64
947
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:65
948
+ #: templates/recipe/simple/simple.php:81
949
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:49
950
+ msgid "Total Time"
951
+ msgstr "Arbeitszeit"
952
+
953
+ #: templates/admin/modal/tabs/recipe-details.php:73
954
+ #: templates/recipe/clean-print/clean-print.php:24
955
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:25
956
+ #: templates/recipe/simple/simple.php:38
957
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:64
958
+ msgid "Course"
959
+ msgstr "Gericht"
960
+
961
+ #: templates/admin/modal/tabs/recipe-details.php:87
962
+ #: templates/recipe/clean-print/clean-print.php:39
963
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:40
964
+ #: templates/recipe/simple/simple.php:53
965
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:79
966
+ msgid "Cuisine"
967
+ msgstr "Länder & Regionen"
968
+
969
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:19
970
+ msgid "Amount"
971
+ msgstr "Menge"
972
+
973
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:20
974
+ msgid "Unit"
975
+ msgstr "Einheiten"
976
+
977
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:28
978
+ msgid "Ingredient Group"
979
+ msgstr "Zutatengruppe"
980
+
981
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:35
982
+ msgid "olive oil"
983
+ msgstr "Olivenöl"
984
+
985
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:36
986
+ msgid "extra virgin"
987
+ msgstr "Extra Nativ"
988
+
989
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:44
990
+ msgid "Add Ingredient"
991
+ msgstr "weitere Zutaten"
992
+
993
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:45
994
+ msgid "Add Ingredient Group"
995
+ msgstr "weitere Zutatengruppe"
996
+
997
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:53
998
+ msgid "Instruction"
999
+ msgstr "Anleitung"
1000
+
1001
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:60
1002
+ msgid "Instruction Group"
1003
+ msgstr "Anleitungsschritt"
1004
+
1005
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:81
1006
+ msgid "Add Instruction"
1007
+ msgstr "Anleitung hinzu fügen"
1008
+
1009
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:82
1010
+ msgid "Add Instruction Group"
1011
+ msgstr "weiterer Anleitungsschritt"
1012
+
1013
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:88
1014
+ msgid ""
1015
+ "Use the TAB key to easily move from field to field and add "
1016
+ "ingredients/instructions without having to click the button."
1017
+ msgstr ""
1018
+ "Verwenden Sie die TAB-Taste, um sich leicht von Feld zu Feld zu bewegen und "
1019
+ "Zutaten / Anweisungen hinzuzufügen, ohne auf die Schaltfläche klicken zu "
1020
+ "müssen."
1021
+
1022
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:15
1023
+ msgid ""
1024
+ "The %s shortcode can be used to add a link that jumps your visitors to a "
1025
+ "recipe on the page."
1026
+ msgstr ""
1027
+ "Der% s-Kurzcode kann verwendet werden, um einen Link hinzuzufügen, der Ihre "
1028
+ "Besucher zu einem anderen Rezept auf der Seite springen lässt."
1029
+
1030
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:17
1031
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:17
1032
+ msgid "Shortcode Examples"
1033
+ msgstr "Shortcode Beispiele:"
1034
+
1035
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:20
1036
+ msgid ""
1037
+ "Add a link that jumps to the first recipe found on the page with \"Jump to "
1038
+ "Recipe\" as the link text."
1039
+ msgstr ""
1040
+ "Fügen Sie einen Link hinzu, der zum ersten Rezept springt, das auf der Seite "
1041
+ "mit 'Springe zu Rezept' als Linktext gefunden wird."
1042
+
1043
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:24
1044
+ msgid ""
1045
+ "Add a link that jumps to the recipe with ID 123 with \"Jump to Recipe\" as "
1046
+ "the link text."
1047
+ msgstr ""
1048
+ "Fügen Sie einen Link hinzu, der zu dem Rezept mit ID 123 mit 'Springen zu "
1049
+ "Rezept' als Linktext anzeigt."
1050
+
1051
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:28
1052
+ msgid ""
1053
+ "Add a link that jumps to the recipe with ID 123 with \"View Recipe\" as the "
1054
+ "link text."
1055
+ msgstr ""
1056
+ "Fügen Sie einen Link hinzu, der zum Rezept mit ID 123 mit 'Rezept ansehen' "
1057
+ "als Linktext springt."
1058
+
1059
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:35
1060
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:35
1061
+ msgid "First recipe on page"
1062
+ msgstr "Erstes Rezept der Seite"
1063
+
1064
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:44
1065
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:44
1066
+ msgid "Text"
1067
+ msgstr "Text"
1068
+
1069
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:46
1070
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:46
1071
+ msgid "Leave blank to use default"
1072
+ msgstr "Leer lassen, um die Standardeinstellung zu verwenden"
1073
+
1074
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:15
1075
+ msgid "The %s shortcode can be used to add a link for printing a recipe."
1076
+ msgstr ""
1077
+ "Der %s Kurzcode kann verwendet werden, um einen Link zum Drucken eines "
1078
+ "Rezepts hinzuzufügen."
1079
+
1080
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:20
1081
+ msgid ""
1082
+ "Add a link that prints the first recipe found on the page with \"Print "
1083
+ "Recipe\" as the link text."
1084
+ msgstr ""
1085
+ "Fügen Sie einen Link hinzu, der das erste Rezept auf der Seite mit 'Rezept "
1086
+ "drucken' als Linktext druckt."
1087
+
1088
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:24
1089
+ msgid ""
1090
+ "Add a link that prints the recipe with ID 123 with \"Print Recipe\" as the "
1091
+ "link text."
1092
+ msgstr ""
1093
+ "Fügen Sie einen Link hinzu, der das Rezept mit ID 123 mit 'Druckrezept' als "
1094
+ "Linktext druckt."
1095
+
1096
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:28
1097
+ msgid ""
1098
+ "Add a link that prints the recipe with ID 123 with \"Print my new Recipe\" "
1099
+ "as the link text."
1100
+ msgstr ""
1101
+ "ügen Sie einen Link hinzu, der das Rezept mit ID 123 mit 'Mein neues Rezept "
1102
+ "drucken' als Linktext druckt."
1103
+
1104
+ #: templates/admin/settings/appearance.php:17
1105
+ msgid "Recipe Template"
1106
+ msgstr "Vorlage für das Rezepterscheinungsbild"
1107
+
1108
+ #: templates/admin/settings/appearance.php:19
1109
+ msgid "Change the look of recipes on your website."
1110
+ msgstr "Ändern Sie das Aussehen der Rezepte auf Ihrer Website."
1111
+
1112
+ #: templates/admin/settings/appearance.php:28
1113
+ msgid "Default Recipe Template"
1114
+ msgstr "Standard-Rezepterscheinungsbild"
1115
+
1116
+ #: templates/admin/settings/appearance.php:41
1117
+ msgid "The default template to use for recipes on your website."
1118
+ msgstr "Das Standarderscheinungsbild für Rezepte auf Ihrer Website verwenden."
1119
+
1120
+ #: templates/admin/settings/appearance.php:47
1121
+ msgid "Default Print Template"
1122
+ msgstr "Standard-Druckvorlage"
1123
+
1124
+ #: templates/admin/settings/appearance.php:60
1125
+ msgid "The default template to use when printing a recipe."
1126
+ msgstr ""
1127
+ "Die Standardvorlage, die beim Drucken eines Rezepts verwendet werden soll."
1128
+
1129
+ #: templates/admin/settings/appearance.php:86
1130
+ msgid "No Screenshot"
1131
+ msgstr "Keine Screenshots"
1132
+
1133
+ #: templates/admin/settings/appearance.php:95
1134
+ #: templates/admin/settings/features.php:67
1135
+ msgid "Save Changes"
1136
+ msgstr "Änderungen speichern"
1137
+
1138
+ #: templates/admin/settings/features.php:17 templates/admin/settings.php:17
1139
+ msgid "Features"
1140
+ msgstr "Eigenschaften"
1141
+
1142
+ #: templates/admin/settings/features.php:19
1143
+ msgid "Choose the features you want to use on your website."
1144
+ msgstr ""
1145
+ "Wählen Sie die Funktionen, die Sie auf Ihrer Website verwenden möchten."
1146
+
1147
+ #: templates/admin/settings/features.php:25
1148
+ msgid "Comment Ratings"
1149
+ msgstr "Kommentar Bewertungen"
1150
+
1151
+ #: templates/admin/settings/features.php:31
1152
+ msgid "Allow visitors to vote on your recipes when commenting"
1153
+ msgstr ""
1154
+ "Lassen Sie Ihre Besucher Ihre Rezepte in der Kommentarfunktion bewerten"
1155
+
1156
+ #: templates/admin/settings/features.php:34
1157
+ #: templates/admin/settings/features.php:61
1158
+ msgid "Learn more"
1159
+ msgstr "Mehr erfahren"
1160
+
1161
+ #: templates/admin/settings/features.php:40
1162
+ msgid "Premium Features"
1163
+ msgstr "Premium Funktionen"
1164
+
1165
+ #: templates/admin/settings/features.php:43
1166
+ msgid "These features are only available in"
1167
+ msgstr "Diese Funktionen sind nur verfügbar in"
1168
+
1169
+ #: templates/admin/settings/features.php:45
1170
+ msgid "Choose the Premium features you want to use on your website."
1171
+ msgstr ""
1172
+ "Wählen Sie aus den Premium-Funktionen, welche Sie auf Ihrer Website "
1173
+ "verwenden möchten."
1174
+
1175
+ #: templates/admin/settings/features.php:52
1176
+ msgid "Adjustable Servings"
1177
+ msgstr "Einstellbare Portionsgrößen"
1178
+
1179
+ #: templates/admin/settings/features.php:58
1180
+ msgid "Visitors can adjust the serving size of your recipes"
1181
+ msgstr "Besucher können die Portionsgröße Ihrer Rezepte anpassen"
1182
+
1183
+ #: templates/admin/settings.php:16
1184
+ msgid "Appearance"
1185
+ msgstr "Erscheinungsbild"
1186
+
1187
+ #: templates/admin/settings.php:26
1188
+ msgid "WP Recipe Maker Settings"
1189
+ msgstr "WP Rezept Maker Einstellungen"
1190
+
1191
+ #: templates/recipe/simple/simple.php:26
1192
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:26
1193
+ msgid "Print"
1194
+ msgstr "Drucken"
1195
+
1196
+ #. Plugin Name of the plugin/theme
1197
+ msgid "WP Recipe Maker"
1198
+ msgstr "WP Rezept Maker"
1199
+
1200
+ #. Plugin URI of the plugin/theme
1201
+ msgid "http://bootstrapped.ventures/wp-recipe-maker/"
1202
+ msgstr "http://bootstrapped.ventures/wp-recipe-maker/"
1203
+
1204
+ #. Description of the plugin/theme
1205
+ msgid ""
1206
+ "The easy and user-friendly recipe plugin for everyone. Automatic JSON-LD "
1207
+ "metadata for better SEO will get you more visitors!"
1208
+ msgstr ""
1209
+ "Das einfache und benutzerfreundliche Rezept-Plugin für alle. Durch "
1210
+ "automatische JSON-LD Metadaten für ein besseres SEO erhalten Sie mehr "
1211
+ "Besucher!"
1212
+
1213
+ #. Author of the plugin/theme
1214
+ msgid "Bootstrapped Ventures"
1215
+ msgstr "Bootstrapped Ventures"
1216
+
1217
+ #. Author URI of the plugin/theme
1218
+ msgid "http://bootstrapped.ventures/"
1219
+ msgstr "http://bootstrapped.ventures/"
readme.txt CHANGED
@@ -3,7 +3,7 @@ Contributors: BrechtVds
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QG7KZMGFU325Y
4
  Tags: recipe, recipes, ingredients, food, cooking, seo, schema.org, json-ld
5
  Requires at least: 4.4
6
- Tested up to: 4.6.1
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -25,6 +25,7 @@ An overview of WP Recipe Maker features:
25
  * Add **photos** to any step of the recipe
26
  * Print recipe and **jump to recipe** shortcodes
27
  * This plugin is **fully responsive**, your recipes will look good on any device
 
28
  * Structure your ingredients and instructions in **groups** (e.g. icing and cake batter)
29
  * **Full text search** for your recipes
30
  * Access your recipes through the WordPress **REST API**
@@ -45,6 +46,7 @@ Looking for some more advanced functionality? We also have the [WP Recipe Maker
45
  * Display all nutrition data in a **nutrition label**
46
  * Add a mobile-friendly **kitchen timer** to your recipes
47
  * More **Premium templates** for a unique recipe template
 
48
 
49
  This plugin is in active development. Feel free to contact us with any feature requests or ideas.
50
 
@@ -80,6 +82,19 @@ Yes! We pride ourselves on offering awesome support and almost always answer sup
80
 
81
  == Changelog ==
82
 
 
 
 
 
 
 
 
 
 
 
 
 
 
83
  = 1.9.1 =
84
  * Feature: WP Recipe Maker icon in TinyMCE editor
85
  * Fix: Ingredients settings page
@@ -173,6 +188,9 @@ Yes! We pride ourselves on offering awesome support and almost always answer sup
173
 
174
  == Upgrade notice =
175
 
 
 
 
176
  = 1.9.1 =
177
  Fix for settings issue introduced in previous update
178
 
3
  Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QG7KZMGFU325Y
4
  Tags: recipe, recipes, ingredients, food, cooking, seo, schema.org, json-ld
5
  Requires at least: 4.4
6
+ Tested up to: 4.7
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
25
  * Add **photos** to any step of the recipe
26
  * Print recipe and **jump to recipe** shortcodes
27
  * This plugin is **fully responsive**, your recipes will look good on any device
28
+ * Easily **change labels and colors** to fit your website
29
  * Structure your ingredients and instructions in **groups** (e.g. icing and cake batter)
30
  * **Full text search** for your recipes
31
  * Access your recipes through the WordPress **REST API**
46
  * Display all nutrition data in a **nutrition label**
47
  * Add a mobile-friendly **kitchen timer** to your recipes
48
  * More **Premium templates** for a unique recipe template
49
+ * Create custom **recipe taxonomies** like price level, difficulty, ...
50
 
51
  This plugin is in active development. Feel free to contact us with any feature requests or ideas.
52
 
82
 
83
  == Changelog ==
84
 
85
+ = 1.10.0 =
86
+ * Feature: Change recipe template colors in the settings
87
+ * Feature: Change recipe template labels in the settings
88
+ * Feature: Manage courses and cuisines
89
+ * Improvement: Show days in recipe times
90
+ * Improvement: Recipe import performance
91
+ * Improvement: Prevent accidental closing of the modal
92
+ * Improvement: Setting to use featured image of parent post
93
+ * Improvement: Prevent recipe getting overwritten by our other shortcodes
94
+ * Fix: Prevent issue with post content replacing recipe notes
95
+ * Fix: Only import numbers for nutrition facts
96
+ * Fix: WordFence Compatibility
97
+
98
  = 1.9.1 =
99
  * Feature: WP Recipe Maker icon in TinyMCE editor
100
  * Fix: Ingredients settings page
188
 
189
  == Upgrade notice =
190
 
191
+ = 1.10.0 =
192
+ Make your recipe template unique in this new update
193
+
194
  = 1.9.1 =
195
  Fix for settings issue introduced in previous update
196
 
templates/admin/manage.php CHANGED
@@ -12,7 +12,12 @@
12
  // Subpage.
13
  $sub = isset( $_GET['sub'] ) ? sanitize_key( wp_unslash( $_GET['sub'] ) ) : ''; // Input var okay.
14
 
15
- if ( ! in_array( $sub, array( 'recipes', 'ingredients' ), true ) ) {
 
 
 
 
 
16
  $sub = 'recipes';
17
  }
18
  ?>
@@ -21,14 +26,17 @@ if ( ! in_array( $sub, array( 'recipes', 'ingredients' ), true ) ) {
21
  <h2><?php esc_html_e( 'Manage', 'wp-recipe-maker-premium' ); ?></h2>
22
 
23
  <h2 class="nav-tab-wrapper">
24
- <a href="<?php echo esc_url( add_query_arg( 'sub', 'recipes', admin_url( 'admin.php?page=wprecipemaker' ) ) ); ?>" class="nav-tab<?php if ( 'recipes' === $sub ) { echo esc_attr( ' nav-tab-active' ); } ?>">
25
- <?php esc_html_e( 'Recipes', 'wp-recipe-maker-premium' ); ?>
26
- </a><a href="<?php echo esc_url( add_query_arg( 'sub', 'ingredients', admin_url( 'admin.php?page=wprecipemaker' ) ) ); ?>" class="nav-tab<?php if ( 'ingredients' === $sub ) { echo esc_attr( ' nav-tab-active' ); } ?>">
27
- <?php esc_html_e( 'Ingredients', 'wp-recipe-maker-premium' ); ?>
28
- </a>
 
 
 
29
  </h2>
30
 
31
- <?php include( WPRM_DIR . 'templates/admin/manage/' . $sub . '.php' ); ?>
32
  </div>
33
 
34
  <?php
12
  // Subpage.
13
  $sub = isset( $_GET['sub'] ) ? sanitize_key( wp_unslash( $_GET['sub'] ) ) : ''; // Input var okay.
14
 
15
+ $tabs = apply_filters( 'wprm_manage_tabs', array(
16
+ 'recipes' => __( 'Recipes', 'wp-recipe-maker' ),
17
+ 'ingredients' => __( 'Ingredients', 'wp-recipe-maker' ),
18
+ ) );
19
+
20
+ if ( ! array_key_exists( $sub, $tabs ) ) {
21
  $sub = 'recipes';
22
  }
23
  ?>
26
  <h2><?php esc_html_e( 'Manage', 'wp-recipe-maker-premium' ); ?></h2>
27
 
28
  <h2 class="nav-tab-wrapper">
29
+ <?php
30
+ foreach ( $tabs as $tab => $label ) {
31
+ $url = add_query_arg( 'sub', $tab, admin_url( 'admin.php?page=wprecipemaker' ) );
32
+ $active = $sub === $tab ? ' nav-tab-active' : '';
33
+
34
+ echo '<a href="' . esc_url( $url ) . '" class="nav-tab' . esc_attr( $active ) . '">' . esc_html( $label ) . '</a>';
35
+ }
36
+ ?>
37
  </h2>
38
 
39
+ <?php do_action( 'wprm_manage_page', $sub ); ?>
40
  </div>
41
 
42
  <?php
templates/admin/manage/ingredients.php CHANGED
@@ -9,12 +9,16 @@
9
  * @subpackage WP_Recipe_Maker/templates/admin/manage
10
  */
11
 
 
 
 
 
12
  ?>
13
 
14
  <table id="wprm-manage-ingredients" class="wprm-manage-datatable" cellspacing="0" width="100%">
15
  <thead>
16
  <tr>
17
- <th>ID</th>
18
  <th>Name</th>
19
  <th data-width="50px">Recipes</th>
20
  <th data-sortable="false">Link</th>
9
  * @subpackage WP_Recipe_Maker/templates/admin/manage
10
  */
11
 
12
+ if ( ! function_exists( 'get_term_meta' ) ) {
13
+ echo '<br/><strong>Warning:</strong> You need at least WordPress 4.4 to manage the ingredients.';
14
+ }
15
+
16
  ?>
17
 
18
  <table id="wprm-manage-ingredients" class="wprm-manage-datatable" cellspacing="0" width="100%">
19
  <thead>
20
  <tr>
21
+ <th data-width="50px">ID</th>
22
  <th>Name</th>
23
  <th data-width="50px">Recipes</th>
24
  <th data-sortable="false">Link</th>
templates/admin/manage/recipes.php CHANGED
@@ -14,7 +14,7 @@
14
  <table id="wprm-manage-recipes" class="wprm-manage-datatable" cellspacing="0" width="100%">
15
  <thead>
16
  <tr>
17
- <th>ID</th>
18
  <th>Date</th>
19
  <th>Name</th>
20
  <th data-sortable="false">Parent Post</th>
14
  <table id="wprm-manage-recipes" class="wprm-manage-datatable" cellspacing="0" width="100%">
15
  <thead>
16
  <tr>
17
+ <th data-width="50px">ID</th>
18
  <th>Date</th>
19
  <th>Name</th>
20
  <th data-sortable="false">Parent Post</th>
templates/admin/manage/taxonomies.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for the taxonomies manage page.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.10.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/templates/admin/manage
10
+ */
11
+
12
+ $sub = isset( $_GET['sub'] ) ? sanitize_key( wp_unslash( $_GET['sub'] ) ) : ''; // Input var okay.
13
+ $taxonomy = substr( $sub, 9 );
14
+
15
+ ?>
16
+
17
+ <table id="wprm-manage-taxonomy-<?php echo esc_attr( $taxonomy ); ?>" class="wprm-manage-datatable wprm-manage-taxonomies" data-taxonomy="<?php echo esc_attr( $taxonomy ); ?>" cellspacing="0" width="100%">
18
+ <thead>
19
+ <tr>
20
+ <th data-width="50px">ID</th>
21
+ <th>Name</th>
22
+ <th data-width="50px">Recipes</th>
23
+ <th data-sortable="false" data-width="20px">&nbsp;</th>
24
+ </tr>
25
+ </thead>
26
+ </table>
templates/admin/menu/faq/whats_new.php CHANGED
@@ -11,6 +11,28 @@
11
 
12
  ?>
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  <h3>2016-11-30 | WP Recipe Maker 1.9.0</h3>
15
  <ul>
16
  <li>Feature: Manage recipes and ingredients in a central place</li>
11
 
12
  ?>
13
 
14
+ <h3>2016-12-16 | WP Recipe Maker Premium 1.2.0</h3>
15
+ <ul>
16
+ <li>Feature: Create your own recipe taxonomies (like courses and cuisines)</li>
17
+ <li>Feature: Smarter servings changer works for ranges as well</li>
18
+ <li>Feature: Setting to display nutrition label in recipe template</li>
19
+ </ul>
20
+
21
+ <h3>2016-12-16 | WP Recipe Maker 1.10.0</h3>
22
+ <ul>
23
+ <li>Feature: Change recipe template colors in the settings</li>
24
+ <li>Feature: Change recipe template labels in the settings</li>
25
+ <li>Feature: Manage courses and cuisines</li>
26
+ <li>Improvement: Show days in recipe times</li>
27
+ <li>Improvement: Recipe import performance</li>
28
+ <li>Improvement: Prevent accidental closing of the modal</li>
29
+ <li>Improvement: Setting to use featured image of parent post</li>
30
+ <li>Improvement: Prevent recipe getting overwritten by our other shortcodes</li>
31
+ <li>Fix: Prevent issue with post content replacing recipe notes</li>
32
+ <li>Fix: Only import numbers for nutrition facts</li>
33
+ <li>Fix: WordFence Compatibility</li>
34
+ </ul>
35
+
36
  <h3>2016-11-30 | WP Recipe Maker 1.9.0</h3>
37
  <ul>
38
  <li>Feature: Manage recipes and ingredients in a central place</li>
templates/admin/menu/{import-overview.php → import/import-overview.php} RENAMED
@@ -6,7 +6,7 @@
6
  * @since 1.0.0
7
  *
8
  * @package WP_Recipe_Maker
9
- * @subpackage WP_Recipe_Maker/templates/admin/menu
10
  */
11
 
12
  ?>
@@ -28,12 +28,13 @@
28
  <?php
29
  $recipes_to_import = array();
30
  foreach ( self::$importers as $importer ) {
31
- $recipes = $importer->get_recipes();
32
 
33
- if ( count( $recipes ) > 0 ) {
34
  $recipes_to_import[ $importer->get_uid() ] = array(
35
  'name' => $importer->get_name(),
36
- 'count' => count( $recipes ),
 
37
  );
38
  }
39
  }
@@ -43,9 +44,20 @@
43
  else :
44
  ?>
45
  <?php foreach ( $recipes_to_import as $uid => $importer ) : ?>
46
- <h4 style="margin-bottom: 0"><?php echo esc_html( $importer['name'] ); ?></h4>
47
- <?php printf( esc_html( _n( '%d recipe found', '%d recipes found', $importer['count'], 'wp-recipe-maker' ) ), intval( $importer['count'] ) ); ?><br />
48
- <a href="<?php echo esc_url( add_query_arg( 'from', $uid, admin_url( 'admin.php?page=wprm_import' ) ) ); ?>"><?php esc_html_e( 'Explore import options', 'wp-recipe-maker' ); ?></a>
 
 
 
 
 
 
 
 
 
 
 
49
  <?php endforeach; // Each importer. ?>
50
  <?php endif; // Recipes to import. ?>
51
 
6
  * @since 1.0.0
7
  *
8
  * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/templates/admin/menu/import
10
  */
11
 
12
  ?>
28
  <?php
29
  $recipes_to_import = array();
30
  foreach ( self::$importers as $importer ) {
31
+ $recipe_count = $importer->get_recipe_count();
32
 
33
+ if ( intval( $recipe_count ) > 0 || $importer->requires_search() ) {
34
  $recipes_to_import[ $importer->get_uid() ] = array(
35
  'name' => $importer->get_name(),
36
+ 'requires_search' => $importer->requires_search(),
37
+ 'count' => $recipe_count,
38
  );
39
  }
40
  }
44
  else :
45
  ?>
46
  <?php foreach ( $recipes_to_import as $uid => $importer ) : ?>
47
+ <h4 style="margin-bottom: 0"><?php echo esc_html( $importer['name'] ); ?></h4>
48
+ <?php if ( $importer['requires_search'] ) : ?>
49
+ <a href="<?php echo esc_url( add_query_arg( array( 'from' => $uid ), admin_url( 'admin.php?page=wprm_import_search' ) ) ); ?>"><?php esc_html_e( 'Search for recipes', 'wp-recipe-maker' ); ?></a><br/?>
50
+ <?php endif; // Requires search. ?>
51
+ <?php if ( intval( $importer['count'] ) > 0 ) : ?>
52
+ <?php
53
+ if ( is_int( $importer['count'] ) ) {
54
+ printf( esc_html( _n( '%d recipe found', '%d recipes found', $importer['count'], 'wp-recipe-maker' ) ), intval( $importer['count'] ) );
55
+ } else {
56
+ echo esc_html( $importer['count'] ) . ' ' . esc_html__( ' recipes found' );
57
+ }
58
+ ?><br />
59
+ <a href="<?php echo esc_url( add_query_arg( array( 'from' => $uid, 'p' => 0 ), admin_url( 'admin.php?page=wprm_import' ) ) ); ?>"><?php esc_html_e( 'Explore import options', 'wp-recipe-maker' ); ?></a>
60
+ <?php endif; // Recipe count. ?>
61
  <?php endforeach; // Each importer. ?>
62
  <?php endif; // Recipes to import. ?>
63
 
templates/admin/menu/{import-recipes.php → import/import-recipes.php} RENAMED
@@ -6,7 +6,7 @@
6
  * @since 1.0.0
7
  *
8
  * @package WP_Recipe_Maker
9
- * @subpackage WP_Recipe_Maker/templates/admin/menu
10
  */
11
 
12
  ?>
@@ -14,6 +14,7 @@
14
  <div class="wrap wprm-import">
15
  <?php
16
  $uid = isset( $_GET['from'] ) ? sanitize_title( wp_unslash( $_GET['from'] ) ) : ''; // Input var okay.
 
17
  $importer = self::get_importer( $uid );
18
 
19
  if ( ! $importer ) :
@@ -47,7 +48,7 @@
47
  <table class="wprm-import-recipes">
48
  <tbody>
49
  <?php
50
- $recipes = $importer->get_recipes();
51
  foreach ( $recipes as $id => $recipe ) :
52
  ?>
53
  <tr>
@@ -65,6 +66,19 @@
65
  <?php endforeach; // Recipes to import. ?>
66
  </tbody>
67
  </table>
 
 
 
 
 
 
 
 
 
 
 
 
 
68
  <?php submit_button( __( 'Import Selected Recipes', 'wp-recipe-maker' ) ); ?>
69
  </form>
70
  <?php endif; // Recipe Importer. ?>
6
  * @since 1.0.0
7
  *
8
  * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/templates/admin/menu/import
10
  */
11
 
12
  ?>
14
  <div class="wrap wprm-import">
15
  <?php
16
  $uid = isset( $_GET['from'] ) ? sanitize_title( wp_unslash( $_GET['from'] ) ) : ''; // Input var okay.
17
+ $page = isset( $_GET['p'] ) ? intval( wp_unslash( $_GET['p'] ) ) : 0; // Input var okay.
18
  $importer = self::get_importer( $uid );
19
 
20
  if ( ! $importer ) :
48
  <table class="wprm-import-recipes">
49
  <tbody>
50
  <?php
51
+ $recipes = $importer->get_recipes( $page );
52
  foreach ( $recipes as $id => $recipe ) :
53
  ?>
54
  <tr>
66
  <?php endforeach; // Recipes to import. ?>
67
  </tbody>
68
  </table>
69
+ <?php
70
+ if ( $importer->get_recipe_count() > count( $recipes ) ) {
71
+ $recipes_left = $importer->get_recipe_count() - count( $recipes );
72
+ echo '<em>';
73
+ printf( esc_html( _n( '%d more recipe', '%d more recipes', $recipes_left, 'wp-recipe-maker' ) ), intval( $recipes_left ) );
74
+
75
+ if ( 0 === count( $recipes ) ) {
76
+ echo '<br/>';
77
+ esc_html_e( 'Try changing the "p" variable in the URL to find the other recipes.', 'wp-recipe-maker' );
78
+ }
79
+ echo '</em>';
80
+ }
81
+ ?>
82
  <?php submit_button( __( 'Import Selected Recipes', 'wp-recipe-maker' ) ); ?>
83
  </form>
84
  <?php endif; // Recipe Importer. ?>
templates/admin/menu/import/import-search.php ADDED
@@ -0,0 +1,45 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for recipe import search page.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.10.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/templates/admin/menu/import
10
+ */
11
+
12
+ ?>
13
+
14
+ <div class="wrap wprm-import">
15
+ <h4><?php esc_html_e( 'Search Results', 'wp-recipe-maker' ); ?></h4>
16
+ <?php
17
+ $uid = isset( $_GET['from'] ) ? sanitize_title( wp_unslash( $_GET['from'] ) ) : ''; // Input var okay.
18
+ $page = isset( $_GET['p'] ) ? intval( wp_unslash( $_GET['p'] ) ) : 0; // Input var okay.
19
+ $importer = self::get_importer( $uid );
20
+
21
+ if ( ! $importer || ! $importer->requires_search() ) {
22
+ esc_html_e( 'Something went wrong.', 'wp-recipe-maker' );
23
+ } else {
24
+ $search_result = $importer->search_recipes( $page );
25
+
26
+ if ( $search_result['finished'] ) {
27
+ esc_html_e( 'Search finished.', 'wp-recipe-maker' );
28
+ echo '<br/>';
29
+ printf( esc_html( _n( '%d recipe found', '%d recipes found', $search_result['recipes'], 'wp-recipe-maker' ) ), intval( $search_result['recipes'] ) );
30
+ echo '<br/>';
31
+ ?>
32
+ <a href="<?php echo esc_url( add_query_arg( array( 'from' => $uid, 'p' => 0 ), admin_url( 'admin.php?page=wprm_import' ) ) ); ?>"><?php esc_html_e( 'Explore import options', 'wp-recipe-maker' ); ?></a>
33
+ <?php
34
+ } else {
35
+ esc_html_e( 'Still searching, keep this page open.', 'wp-recipe-maker' );
36
+ echo '<br/>';
37
+ printf( esc_html( _n( '%d recipe found', '%d recipes found', $search_result['recipes'], 'wp-recipe-maker' ) ), intval( $search_result['recipes'] ) );
38
+ ?>
39
+ <script>
40
+ window.location = '<?php echo add_query_arg( array( 'from' => $uid, 'p' => ($page + 1) ), admin_url( 'admin.php?page=wprm_import_search' ) ); ?>';
41
+ </script>
42
+ <?php
43
+ }
44
+ }?>
45
+ </div>
templates/admin/modal/tabs/recipe-details.php CHANGED
@@ -69,26 +69,17 @@
69
  <label for="wprm-recipe-total-time"><?php esc_html_e( 'Total Time', 'wp-recipe-maker' ); ?></label>
70
  <input type="number" id="wprm-recipe-total-time" class="wprm-recipe-time" placeholder="30" min="0" /> <?php esc_html_e( 'minutes', 'wp-recipe-maker' ); ?>
71
  </div>
72
- <div class="wprm-recipe-form-container wprm-recipe-form-container-halfs">
73
- <label for="wprm-recipe-tag-course"><?php esc_html_e( 'Course', 'wp-recipe-maker' ); ?></label>
74
- <select id="wprm-recipe-tag-course" class="wprm-recipe-tags" multiple>
75
- <?php
76
- $terms = get_terms( array(
77
- 'taxonomy' => 'wprm_course',
78
- 'hide_empty' => false,
79
- ) );
80
 
81
- foreach ( $terms as $term ) {
82
- echo '<option value="' . esc_attr( $term->term_id ) . '">' . esc_html( $term->name ) . '</option>';
83
- }
84
- ?>
85
- </select>
86
- </div><div class="wprm-recipe-form-container wprm-recipe-form-container-halfs">
87
- <label for="wprm-recipe-tag-cuisine"><?php esc_html_e( 'Cuisine', 'wp-recipe-maker' ); ?></label>
88
- <select id="wprm-recipe-tag-cuisine" class="wprm-recipe-tags" multiple>
89
  <?php
90
  $terms = get_terms( array(
91
- 'taxonomy' => 'wprm_cuisine',
92
  'hide_empty' => false,
93
  ) );
94
 
@@ -97,5 +88,5 @@
97
  }
98
  ?>
99
  </select>
100
- </div>
101
  </div>
69
  <label for="wprm-recipe-total-time"><?php esc_html_e( 'Total Time', 'wp-recipe-maker' ); ?></label>
70
  <input type="number" id="wprm-recipe-total-time" class="wprm-recipe-time" placeholder="30" min="0" /> <?php esc_html_e( 'minutes', 'wp-recipe-maker' ); ?>
71
  </div>
72
+ <?php
73
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
 
 
 
 
 
 
74
 
75
+ foreach ( $taxonomies as $taxonomy => $options ) :
76
+ $key = substr( $taxonomy, 5 );
77
+ ?><div class="wprm-recipe-form-container wprm-recipe-form-container-halfs">
78
+ <label for="wprm-recipe-tag-<?php echo esc_attr( $key ); ?>"><?php echo esc_html( $options['singular_name'] ); ?></label>
79
+ <select id="wprm-recipe-tag-<?php echo esc_attr( $key ); ?>" class="wprm-recipe-tags" data-key="<?php echo esc_attr( $key ); ?>" multiple>
 
 
 
80
  <?php
81
  $terms = get_terms( array(
82
+ 'taxonomy' => $taxonomy,
83
  'hide_empty' => false,
84
  ) );
85
 
88
  }
89
  ?>
90
  </select>
91
+ </div><?php endforeach; // Taxonomies. ?>
92
  </div>
templates/admin/settings.php CHANGED
@@ -14,6 +14,7 @@ $sub = isset( $_GET['sub'] ) ? sanitize_key( wp_unslash( $_GET['sub'] ) ) : '';
14
 
15
  $tabs = apply_filters( 'wprm_settings_tabs', array(
16
  'appearance' => __( 'Appearance', 'wp-recipe-maker' ),
 
17
  'features' => __( 'Features', 'wp-recipe-maker' ),
18
  ) );
19
 
14
 
15
  $tabs = apply_filters( 'wprm_settings_tabs', array(
16
  'appearance' => __( 'Appearance', 'wp-recipe-maker' ),
17
+ 'labels' => __( 'Labels', 'wp-recipe-maker' ),
18
  'features' => __( 'Features', 'wp-recipe-maker' ),
19
  ) );
20
 
templates/admin/settings/appearance.php CHANGED
@@ -14,6 +14,130 @@
14
  <form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
15
  <input type="hidden" name="action" value="wprm_settings_appearance">
16
  <?php wp_nonce_field( 'wprm_settings', 'wprm_settings', false ); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
  <h2 class="title"><?php esc_html_e( 'Recipe Template', 'wp-recipe-maker' ); ?></h2>
18
  <p>
19
  <?php esc_html_e( 'Change the look of recipes on your website.', 'wp-recipe-maker' ); ?>
14
  <form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
15
  <input type="hidden" name="action" value="wprm_settings_appearance">
16
  <?php wp_nonce_field( 'wprm_settings', 'wprm_settings', false ); ?>
17
+ <h2 class="title"><?php esc_html_e( 'Recipe Fields', 'wp-recipe-maker' ); ?></h2>
18
+ <table class="form-table">
19
+ <tbody>
20
+ <tr>
21
+ <th scope="row">
22
+ <?php esc_html_e( 'Recipe Image', 'wp-recipe-maker' ); ?>
23
+ </th>
24
+ <td>
25
+ <label for="recipe_image_use_featured">
26
+ <?php $checked = WPRM_Settings::get( 'recipe_image_use_featured' ) ? ' checked="checked"' : ''; ?>
27
+ <input name="recipe_image_use_featured" type="checkbox" id="recipe_image_use_featured"<?php echo esc_html( $checked ); ?> />
28
+ <?php esc_html_e( 'Use featured image of parent post if no recipe image is set', 'wp-recipe-maker' ); ?>
29
+ </label>
30
+ </td>
31
+ </tr>
32
+ <tr>
33
+ <th scope="row">
34
+ <?php esc_html_e( 'Nutrition Label', 'wp-recipe-maker' ); ?>
35
+ </th>
36
+ <td>
37
+ <label for="show_nutrition_label">
38
+ <?php $checked = WPRM_Settings::get( 'show_nutrition_label' ) ? ' checked="checked"' : ''; ?>
39
+ <input name="show_nutrition_label" type="checkbox" id="show_nutrition_label"<?php echo esc_html( $checked ); ?> />
40
+ <?php esc_html_e( 'Display in recipe template', 'wp-recipe-maker' ); ?>
41
+ </label>
42
+ <p class="description">
43
+ <?php if ( ! WPRM_Addons::is_active( 'premium' ) ) : ?>
44
+ <?php esc_html_e( 'Only available in', 'wp-recipe-maker' ); ?> <a href="https://bootstrapped.ventures/wp-recipe-maker/get-the-plugin/" target="_blank">WP Recipe Maker Premium</a>.
45
+ <?php else : ?>
46
+ <?php esc_html_e( 'Display the nutrition label at its default location in the recipe template.', 'wp-recipe-maker' ); ?>
47
+ <?php endif; ?>
48
+ </p>
49
+ </td>
50
+ </tr>
51
+ </tbody>
52
+ </table>
53
+ <h2 class="title"><?php esc_html_e( 'Recipe Template Options', 'wp-recipe-maker' ); ?></h2>
54
+ <p>
55
+ <?php esc_html_e( 'Note: not all options will affect every recipe template.', 'wp-recipe-maker' ); ?>
56
+ </p>
57
+ <table class="form-table">
58
+ <tbody>
59
+ <tr>
60
+ <th scope="row">
61
+ <label for="template_color_background"><?php esc_html_e( 'Background Color', 'wp-recipe-maker' ); ?></label>
62
+ </th>
63
+ <td>
64
+ <input name="template_color_background" type="text" id="template_color_background" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_background' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_background' ) ); ?>" class="wprm-color">
65
+ </td>
66
+ </tr>
67
+ <tr>
68
+ <th scope="row">
69
+ <label for="template_color_border"><?php esc_html_e( 'Border Color', 'wp-recipe-maker' ); ?></label>
70
+ </th>
71
+ <td>
72
+ <input name="template_color_border" type="text" id="template_color_border" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_border' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_border' ) ); ?>" class="wprm-color">
73
+ </td>
74
+ </tr>
75
+ <tr>
76
+ <th scope="row">
77
+ <label for="template_color_text"><?php esc_html_e( 'Text Color', 'wp-recipe-maker' ); ?></label>
78
+ </th>
79
+ <td>
80
+ <input name="template_color_text" type="text" id="template_color_text" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_text' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_text' ) ); ?>" class="wprm-color">
81
+ </td>
82
+ </tr>
83
+ <tr>
84
+ <th scope="row">
85
+ <label for="template_color_link"><?php esc_html_e( 'Link Color', 'wp-recipe-maker' ); ?></label>
86
+ </th>
87
+ <td>
88
+ <input name="template_color_link" type="text" id="template_color_link" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_link' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_link' ) ); ?>" class="wprm-color">
89
+ </td>
90
+ </tr>
91
+ <tr>
92
+ <th scope="row">
93
+ <label for="template_color_header"><?php esc_html_e( 'Header Color', 'wp-recipe-maker' ); ?></label>
94
+ </th>
95
+ <td>
96
+ <input name="template_color_header" type="text" id="template_color_header" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_header' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_header' ) ); ?>" class="wprm-color">
97
+ </td>
98
+ </tr>
99
+ <tr>
100
+ <th scope="row">
101
+ <label for="template_color_icon"><?php esc_html_e( 'Icon Color', 'wp-recipe-maker' ); ?></label>
102
+ </th>
103
+ <td>
104
+ <input name="template_color_icon" type="text" id="template_color_icon" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_icon' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_icon' ) ); ?>" class="wprm-color">
105
+ </td>
106
+ </tr>
107
+ <tr>
108
+ <th scope="row">
109
+ <label for="template_color_accent"><?php esc_html_e( 'Accent Color', 'wp-recipe-maker' ); ?></label>
110
+ </th>
111
+ <td>
112
+ <input name="template_color_accent" type="text" id="template_color_accent" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_accent' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_accent' ) ); ?>" class="wprm-color">
113
+ </td>
114
+ </tr>
115
+ <tr>
116
+ <th scope="row">
117
+ <label for="template_color_accent_text"><?php esc_html_e( 'Accent Text Color', 'wp-recipe-maker' ); ?></label>
118
+ </th>
119
+ <td>
120
+ <input name="template_color_accent_text" type="text" id="template_color_accent_text" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_accent_text' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_accent_text' ) ); ?>" class="wprm-color">
121
+ </td>
122
+ </tr>
123
+ <tr>
124
+ <th scope="row">
125
+ <label for="template_color_accent2"><?php esc_html_e( 'Accent 2 Color', 'wp-recipe-maker' ); ?></label>
126
+ </th>
127
+ <td>
128
+ <input name="template_color_accent2" type="text" id="template_color_accent2" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_accent2' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_accent2' ) ); ?>" class="wprm-color">
129
+ </td>
130
+ </tr>
131
+ <tr>
132
+ <th scope="row">
133
+ <label for="template_color_accent2_text"><?php esc_html_e( 'Accent 2 Text Color', 'wp-recipe-maker' ); ?></label>
134
+ </th>
135
+ <td>
136
+ <input name="template_color_accent2_text" type="text" id="template_color_accent2_text" value="<?php echo esc_attr( WPRM_Settings::get( 'template_color_accent2_text' ) ); ?>" data-default-color="<?php echo esc_attr( WPRM_Settings::get_default( 'template_color_accent2_text' ) ); ?>" class="wprm-color">
137
+ </td>
138
+ </tr>
139
+ </tbody>
140
+ </table>
141
  <h2 class="title"><?php esc_html_e( 'Recipe Template', 'wp-recipe-maker' ); ?></h2>
142
  <p>
143
  <?php esc_html_e( 'Change the look of recipes on your website.', 'wp-recipe-maker' ); ?>
templates/admin/settings/labels.php ADDED
@@ -0,0 +1,43 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for the labels settings sub page.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.10.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/templates/admin/settings
10
+ */
11
+
12
+ ?>
13
+
14
+ <form method="post" action="<?php echo esc_url( admin_url( 'admin-post.php' ) ); ?>">
15
+ <input type="hidden" name="action" value="wprm_settings_labels">
16
+ <?php wp_nonce_field( 'wprm_settings', 'wprm_settings', false ); ?>
17
+ <h2 class="title"><?php esc_html_e( 'Labels', 'wp-recipe-maker' ); ?></h2>
18
+ <p>
19
+ <?php esc_html_e( 'Choose the features you want to use on your website.', 'wp-recipe-maker' ); ?>
20
+ </p>
21
+ <table class="form-table">
22
+ <tbody>
23
+ <?php
24
+ $labels = WPRM_Template_Helper::get_labels();
25
+ ksort( $labels );
26
+
27
+ foreach ( $labels as $uid => $text ) :
28
+ $name = ucwords( str_replace( '_', ' ', $uid ) );
29
+ $uid = 'wprm_label_' . $uid;
30
+ ?>
31
+ <tr>
32
+ <th scope="row">
33
+ <label for="<?php echo esc_attr( $uid ); ?>"><?php echo esc_html( $name ); ?></label>
34
+ </th>
35
+ <td>
36
+ <input name="<?php echo esc_attr( $uid ); ?>" type="text" id="<?php echo esc_attr( $uid ); ?>" value="<?php echo esc_attr( $text ); ?>" class="regular-text">
37
+ </td>
38
+ </tr>
39
+ <?php endforeach; // Labels. ?>
40
+ </tbody>
41
+ </table>
42
+ <?php submit_button( __( 'Save Changes', 'wp-recipe-maker' ) ); ?>
43
+ </form>
templates/recipe/clean-print-with-image/clean-print-with-image.min.css CHANGED
@@ -1 +1 @@
1
- .wprm-recipe-clean-print-with-image{font-size:.9em}.wprm-recipe-clean-print-with-image .wprm-recipe-image{float:left;margin:0 15px 15px 0}.wprm-recipe-clean-print-with-image h2.wprm-recipe-name,.wprm-recipe-clean-print-with-image h3.wprm-recipe-header,.wprm-recipe-clean-print-with-image h4.wprm-recipe-group-name{font-variant:normal;text-transform:none;letter-spacing:normal;margin:0;padding:0}.wprm-recipe-clean-print-with-image h2.wprm-recipe-name{clear:none;font-size:1.8em}.wprm-recipe-clean-print-with-image .wprm-recipe-details-container,.wprm-recipe-clean-print-with-image .wprm-recipe-summary{margin-bottom:15px}.wprm-recipe-clean-print-with-image .wprm-recipe-details-name{display:inline-block;font-weight:700;min-width:130px}.wprm-recipe-clean-print-with-image .wprm-recipe-details-unit{font-size:.8em}.wprm-recipe-clean-print-with-image h3.wprm-recipe-header{margin-top:10px;font-size:1.2em}.wprm-recipe-clean-print-with-image ol,.wprm-recipe-clean-print-with-image ul{margin:0 0 8px}.wprm-recipe-clean-print-with-image ol li,.wprm-recipe-clean-print-with-image ul li{margin:0 0 0 32px}.wprm-recipe-clean-print-with-image h4.wprm-recipe-group-name{margin-top:5px!important;font-weight:300;font-size:1em}.wprm-recipe-clean-print-with-image .wprm-recipe-ingredient-notes{color:#999}.wprm-recipe-clean-print-with-image .wprm-recipe-instructions .wprm-recipe-instruction{margin-bottom:5px}.wprm-recipe-clean-print-with-image .wprm-recipe-instruction-text p{margin:0 0 5px}.wprm-recipe-clean-print-with-image .wprm-recipe-instruction-text p:last-of-type{margin-bottom:0}.wprm-print .wprm-recipe-clean-print-with-image{max-width:750px;margin:0 auto}
1
+ .wprm-recipe-clean-print-with-image{font-size:.9em}.wprm-recipe-clean-print-with-image .wprm-recipe-image{float:left;margin:0 15px 15px 0}.wprm-recipe-clean-print-with-image h2.wprm-recipe-name,.wprm-recipe-clean-print-with-image h3.wprm-recipe-header,.wprm-recipe-clean-print-with-image h4.wprm-recipe-group-name{font-variant:normal;text-transform:none;letter-spacing:normal;margin:0;padding:0}.wprm-recipe-clean-print-with-image h2.wprm-recipe-name{clear:none;font-size:1.8em}.wprm-recipe-clean-print-with-image .wprm-recipe-details-container,.wprm-recipe-clean-print-with-image .wprm-recipe-summary{margin-bottom:15px}.wprm-recipe-clean-print-with-image .wprm-recipe-details-name{display:inline-block;font-weight:700;min-width:130px}.wprm-recipe-clean-print-with-image .wprm-recipe-details-unit{font-size:.8em}.wprm-recipe-clean-print-with-image h3.wprm-recipe-header{margin-top:10px;font-size:1.2em}.wprm-recipe-clean-print-with-image ol,.wprm-recipe-clean-print-with-image ul{margin:0 0 8px}.wprm-recipe-clean-print-with-image ol li,.wprm-recipe-clean-print-with-image ul li{margin:0 0 0 32px}.wprm-recipe-clean-print-with-image h4.wprm-recipe-group-name{margin-top:5px!important;font-weight:300;font-size:1em}.wprm-recipe-clean-print-with-image .wprm-recipe-ingredient-notes{opacity:.7}.wprm-recipe-clean-print-with-image .wprm-recipe-instructions .wprm-recipe-instruction{margin-bottom:5px}.wprm-recipe-clean-print-with-image .wprm-recipe-instruction-text p{margin:0 0 5px}.wprm-recipe-clean-print-with-image .wprm-recipe-instruction-text p:last-of-type{margin-bottom:0}.wprm-print .wprm-recipe-clean-print-with-image{max-width:750px;margin:0 auto}
templates/recipe/clean-print-with-image/clean-print-with-image.php CHANGED
@@ -19,67 +19,58 @@
19
  </div>
20
  <div class="wprm-recipe-details-container wprm-recipe-tags-container">
21
  <?php
22
- $courses = $recipe->tags( 'course' );
23
- if ( count( $courses ) > 0 ) : ?>
24
- <div class="wprm-recipe-course-container">
25
- <span class="wprm-recipe-details-name wprm-recipe-course-name"><?php _e( 'Course', 'wp-recipe-maker' ); ?></span>
26
- <span class="wprm-recipe-course">
27
- <?php foreach ( $courses as $index => $course ) {
28
- if ( 0 !== $index ) {
29
- echo ', ';
30
- }
31
- echo $course->name;
32
- } ?>
33
- </span>
34
- </div>
35
- <?php endif; // Course. ?>
36
- <?php
37
- $cuisines = $recipe->tags( 'cuisine' );
38
- if ( count( $recipe->tags( 'cuisine' ) ) > 0 ) : ?>
39
- <div class="wprm-recipe-cuisine-container">
40
- <span class="wprm-recipe-details-name wprm-recipe-cuisine-name"><?php _e( 'Cuisine', 'wp-recipe-maker' ); ?></span>
41
- <span class="wprm-recipe-details wprm-recipe-cuisine">
42
- <?php foreach ( $cuisines as $index => $cuisine ) {
43
- if ( 0 !== $index ) {
44
- echo ', ';
45
- }
46
- echo $cuisine->name;
47
- } ?>
48
- </span>
49
- </div>
50
- <?php endif; // Cuisine. ?>
51
  </div>
52
  <div class="wprm-recipe-details-container wprm-recipe-times-container">
53
  <?php if ( $recipe->prep_time() ) : ?>
54
  <div class="wprm-recipe-prep-time-container">
55
- <span class="wprm-recipe-details-name wprm-recipe-prep-time-name"><?php _e( 'Prep Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->prep_time_formatted(); ?>
56
  </div>
57
  <?php endif; // Prep time. ?>
58
  <?php if ( $recipe->cook_time() ) : ?>
59
  <div class="wprm-recipe-cook-time-container">
60
- <span class="wprm-recipe-details-name wprm-recipe-cook-time-name"><?php _e( 'Cook Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->cook_time_formatted(); ?>
61
  </div>
62
  <?php endif; // Cook time. ?>
63
  <?php if ( $recipe->total_time() ) : ?>
64
  <div class="wprm-recipe-total-time-container">
65
- <span class="wprm-recipe-details-name wprm-recipe-total-time-name"><?php _e( 'Total Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->total_time_formatted(); ?>
66
  </div>
67
  <?php endif; // Total time. ?>
68
  </div>
69
  <div class="wprm-recipe-details-container">
70
  <?php if ( $recipe->servings() ) : ?>
71
  <div class="wprm-recipe-servings-container">
72
- <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php _e( 'Servings', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span>
73
  </div>
74
  <?php endif; // Servings. ?>
75
  <?php if ( $recipe->calories() ) : ?>
76
  <div class="wprm-recipe-calories-container">
77
- <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php _e( 'Calories', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span>
78
  </div>
79
  <?php endif; // Calories. ?>
80
  <?php if ( $recipe->author() ) : ?>
81
  <div class="wprm-recipe-author-container">
82
- <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php _e( 'Author', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
83
  </div>
84
  <?php endif; // Author. ?>
85
  </div>
@@ -88,7 +79,7 @@
88
  $ingredients = $recipe->ingredients();
89
  if ( count( $ingredients ) > 0 ) : ?>
90
  <div class="wprm-recipe-ingredients-container">
91
- <h3 class="wprm-recipe-header"><?php _e( 'Ingredients', 'wp-recipe-maker' ); ?></h3>
92
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
93
  <div class="wprm-recipe-ingredient-group">
94
  <?php if ( $ingredient_group['name'] ) : ?>
@@ -118,7 +109,7 @@
118
  $instructions = $recipe->instructions();
119
  if ( count( $instructions ) > 0 ) : ?>
120
  <div class="wprm-recipe-instructions-container">
121
- <h3 class="wprm-recipe-header"><?php _e( 'Instructions', 'wp-recipe-maker' ); ?></h3>
122
  <?php foreach ( $instructions as $instruction_group ) : ?>
123
  <div class="wprm-recipe-instruction-group">
124
  <?php if ( $instruction_group['name'] ) : ?>
@@ -139,8 +130,9 @@
139
  <?php endif; // Instructions. ?>
140
  <?php if ( $recipe->notes() ) : ?>
141
  <div class="wprm-recipe-notes-container">
142
- <h3 class="wprm-recipe-header"><?php _e( 'Recipe Notes', 'wp-recipe-maker' ); ?></h3>
143
  <?php echo $recipe->notes(); ?>
144
  </div>
145
  <?php endif; // Notes ?>
 
146
  </div>
19
  </div>
20
  <div class="wprm-recipe-details-container wprm-recipe-tags-container">
21
  <?php
22
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
23
+
24
+ foreach ( $taxonomies as $taxonomy => $options ) :
25
+ $key = substr( $taxonomy, 5 );
26
+ $terms = $recipe->tags( $key );
27
+
28
+ if ( count( $terms ) > 0 ) : ?>
29
+ <div class="wprm-recipe-<?php echo $key; ?>-container">
30
+ <span class="wprm-recipe-details-name wprm-recipe-<?php echo $key; ?>-name"><?php echo WPRM_Template_Helper::label( $key . '_tags', $options['singular_name'] ); ?></span>
31
+ <span class="wprm-recipe-<?php echo $key; ?>"<?php echo WPRM_Template_Helper::tags_meta( $key ); ?>>
32
+ <?php foreach ( $terms as $index => $term ) {
33
+ if ( 0 !== $index ) {
34
+ echo ', ';
35
+ }
36
+ echo $term->name;
37
+ } ?>
38
+ </span>
39
+ </div>
40
+ <?php endif; // Count.
41
+ endforeach; // Taxonomies. ?>
 
 
 
 
 
 
 
 
 
42
  </div>
43
  <div class="wprm-recipe-details-container wprm-recipe-times-container">
44
  <?php if ( $recipe->prep_time() ) : ?>
45
  <div class="wprm-recipe-prep-time-container">
46
+ <span class="wprm-recipe-details-name wprm-recipe-prep-time-name"><?php echo WPRM_Template_Helper::label( 'prep_time' ); ?></span> <?php echo $recipe->prep_time_formatted(); ?>
47
  </div>
48
  <?php endif; // Prep time. ?>
49
  <?php if ( $recipe->cook_time() ) : ?>
50
  <div class="wprm-recipe-cook-time-container">
51
+ <span class="wprm-recipe-details-name wprm-recipe-cook-time-name"><?php echo WPRM_Template_Helper::label( 'cook_time' ); ?></span> <?php echo $recipe->cook_time_formatted(); ?>
52
  </div>
53
  <?php endif; // Cook time. ?>
54
  <?php if ( $recipe->total_time() ) : ?>
55
  <div class="wprm-recipe-total-time-container">
56
+ <span class="wprm-recipe-details-name wprm-recipe-total-time-name"><?php echo WPRM_Template_Helper::label( 'total_time' ); ?></span> <?php echo $recipe->total_time_formatted(); ?>
57
  </div>
58
  <?php endif; // Total time. ?>
59
  </div>
60
  <div class="wprm-recipe-details-container">
61
  <?php if ( $recipe->servings() ) : ?>
62
  <div class="wprm-recipe-servings-container">
63
+ <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php echo WPRM_Template_Helper::label( 'servings' ); ?></span> <span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span>
64
  </div>
65
  <?php endif; // Servings. ?>
66
  <?php if ( $recipe->calories() ) : ?>
67
  <div class="wprm-recipe-calories-container">
68
+ <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php echo WPRM_Template_Helper::label( 'calories' ); ?></span> <span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span>
69
  </div>
70
  <?php endif; // Calories. ?>
71
  <?php if ( $recipe->author() ) : ?>
72
  <div class="wprm-recipe-author-container">
73
+ <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php echo WPRM_Template_Helper::label( 'author' ); ?></span> <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
74
  </div>
75
  <?php endif; // Author. ?>
76
  </div>
79
  $ingredients = $recipe->ingredients();
80
  if ( count( $ingredients ) > 0 ) : ?>
81
  <div class="wprm-recipe-ingredients-container">
82
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'ingredients' ); ?></h3>
83
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
84
  <div class="wprm-recipe-ingredient-group">
85
  <?php if ( $ingredient_group['name'] ) : ?>
109
  $instructions = $recipe->instructions();
110
  if ( count( $instructions ) > 0 ) : ?>
111
  <div class="wprm-recipe-instructions-container">
112
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'instructions' ); ?></h3>
113
  <?php foreach ( $instructions as $instruction_group ) : ?>
114
  <div class="wprm-recipe-instruction-group">
115
  <?php if ( $instruction_group['name'] ) : ?>
130
  <?php endif; // Instructions. ?>
131
  <?php if ( $recipe->notes() ) : ?>
132
  <div class="wprm-recipe-notes-container">
133
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'notes' ); ?></h3>
134
  <?php echo $recipe->notes(); ?>
135
  </div>
136
  <?php endif; // Notes ?>
137
+ <?php echo WPRM_Template_Helper::nutrition_label(); ?>
138
  </div>
templates/recipe/clean-print-with-image/clean-print-with-image.scss CHANGED
@@ -57,7 +57,7 @@
57
  }
58
 
59
  .wprm-recipe-ingredient-notes {
60
- color: #999999;
61
  }
62
 
63
  .wprm-recipe-instructions {
57
  }
58
 
59
  .wprm-recipe-ingredient-notes {
60
+ opacity: 0.7;
61
  }
62
 
63
  .wprm-recipe-instructions {
templates/recipe/clean-print/clean-print.min.css CHANGED
@@ -1 +1 @@
1
- .wprm-recipe-clean-print{font-size:.9em}.wprm-recipe-clean-print h2.wprm-recipe-name,.wprm-recipe-clean-print h3.wprm-recipe-header,.wprm-recipe-clean-print h4.wprm-recipe-group-name{font-variant:normal;text-transform:none;letter-spacing:normal;margin:0;padding:0}.wprm-recipe-clean-print h2.wprm-recipe-name{clear:none;font-size:1.8em}.wprm-recipe-clean-print .wprm-recipe-details-container,.wprm-recipe-clean-print .wprm-recipe-summary{margin-bottom:15px}.wprm-recipe-clean-print .wprm-recipe-details-name{display:inline-block;font-weight:700;min-width:130px}.wprm-recipe-clean-print .wprm-recipe-details-unit{font-size:.8em}.wprm-recipe-clean-print h3.wprm-recipe-header{margin-top:10px;font-size:1.2em}.wprm-recipe-clean-print ol,.wprm-recipe-clean-print ul{margin:0 0 8px}.wprm-recipe-clean-print ol li,.wprm-recipe-clean-print ul li{margin:0 0 0 32px}.wprm-recipe-clean-print h4.wprm-recipe-group-name{margin-top:5px!important;font-weight:300;font-size:1em}.wprm-recipe-clean-print .wprm-recipe-ingredient-notes{color:#999}.wprm-recipe-clean-print .wprm-recipe-instructions .wprm-recipe-instruction{margin-bottom:5px}.wprm-recipe-clean-print .wprm-recipe-instruction-text p{margin:0 0 5px}.wprm-recipe-clean-print .wprm-recipe-instruction-text p:last-of-type{margin-bottom:0}.wprm-print .wprm-recipe-clean-print{max-width:750px;margin:0 auto}
1
+ .wprm-recipe-clean-print{font-size:.9em}.wprm-recipe-clean-print h2.wprm-recipe-name,.wprm-recipe-clean-print h3.wprm-recipe-header,.wprm-recipe-clean-print h4.wprm-recipe-group-name{font-variant:normal;text-transform:none;letter-spacing:normal;margin:0;padding:0}.wprm-recipe-clean-print h2.wprm-recipe-name{clear:none;font-size:1.8em}.wprm-recipe-clean-print .wprm-recipe-details-container,.wprm-recipe-clean-print .wprm-recipe-summary{margin-bottom:15px}.wprm-recipe-clean-print .wprm-recipe-details-name{display:inline-block;font-weight:700;min-width:130px}.wprm-recipe-clean-print .wprm-recipe-details-unit{font-size:.8em}.wprm-recipe-clean-print h3.wprm-recipe-header{margin-top:10px;font-size:1.2em}.wprm-recipe-clean-print ol,.wprm-recipe-clean-print ul{margin:0 0 8px}.wprm-recipe-clean-print ol li,.wprm-recipe-clean-print ul li{margin:0 0 0 32px}.wprm-recipe-clean-print h4.wprm-recipe-group-name{margin-top:5px!important;font-weight:300;font-size:1em}.wprm-recipe-clean-print .wprm-recipe-ingredient-notes{opacity:.7}.wprm-recipe-clean-print .wprm-recipe-instructions .wprm-recipe-instruction{margin-bottom:5px}.wprm-recipe-clean-print .wprm-recipe-instruction-text p{margin:0 0 5px}.wprm-recipe-clean-print .wprm-recipe-instruction-text p:last-of-type{margin-bottom:0}.wprm-print .wprm-recipe-clean-print{max-width:750px;margin:0 auto}
templates/recipe/clean-print/clean-print.php CHANGED
@@ -18,67 +18,58 @@
18
  </div>
19
  <div class="wprm-recipe-details-container wprm-recipe-tags-container">
20
  <?php
21
- $courses = $recipe->tags( 'course' );
22
- if ( count( $courses ) > 0 ) : ?>
23
- <div class="wprm-recipe-course-container">
24
- <span class="wprm-recipe-details-name wprm-recipe-course-name"><?php _e( 'Course', 'wp-recipe-maker' ); ?></span>
25
- <span class="wprm-recipe-course">
26
- <?php foreach ( $courses as $index => $course ) {
27
- if ( 0 !== $index ) {
28
- echo ', ';
29
- }
30
- echo $course->name;
31
- } ?>
32
- </span>
33
- </div>
34
- <?php endif; // Course. ?>
35
- <?php
36
- $cuisines = $recipe->tags( 'cuisine' );
37
- if ( count( $recipe->tags( 'cuisine' ) ) > 0 ) : ?>
38
- <div class="wprm-recipe-cuisine-container">
39
- <span class="wprm-recipe-details-name wprm-recipe-cuisine-name"><?php _e( 'Cuisine', 'wp-recipe-maker' ); ?></span>
40
- <span class="wprm-recipe-details wprm-recipe-cuisine">
41
- <?php foreach ( $cuisines as $index => $cuisine ) {
42
- if ( 0 !== $index ) {
43
- echo ', ';
44
- }
45
- echo $cuisine->name;
46
- } ?>
47
- </span>
48
- </div>
49
- <?php endif; // Cuisine. ?>
50
  </div>
51
  <div class="wprm-recipe-details-container wprm-recipe-times-container">
52
  <?php if ( $recipe->prep_time() ) : ?>
53
  <div class="wprm-recipe-prep-time-container">
54
- <span class="wprm-recipe-details-name wprm-recipe-prep-time-name"><?php _e( 'Prep Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->prep_time_formatted(); ?>
55
  </div>
56
  <?php endif; // Prep time. ?>
57
  <?php if ( $recipe->cook_time() ) : ?>
58
  <div class="wprm-recipe-cook-time-container">
59
- <span class="wprm-recipe-details-name wprm-recipe-cook-time-name"><?php _e( 'Cook Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->cook_time_formatted(); ?>
60
  </div>
61
  <?php endif; // Cook time. ?>
62
  <?php if ( $recipe->total_time() ) : ?>
63
  <div class="wprm-recipe-total-time-container">
64
- <span class="wprm-recipe-details-name wprm-recipe-total-time-name"><?php _e( 'Total Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->total_time_formatted(); ?>
65
  </div>
66
  <?php endif; // Total time. ?>
67
  </div>
68
  <div class="wprm-recipe-details-container">
69
  <?php if ( $recipe->servings() ) : ?>
70
  <div class="wprm-recipe-servings-container">
71
- <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php _e( 'Servings', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span>
72
  </div>
73
  <?php endif; // Servings. ?>
74
  <?php if ( $recipe->calories() ) : ?>
75
  <div class="wprm-recipe-calories-container">
76
- <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php _e( 'Calories', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span>
77
  </div>
78
  <?php endif; // Calories. ?>
79
  <?php if ( $recipe->author() ) : ?>
80
  <div class="wprm-recipe-author-container">
81
- <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php _e( 'Author', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
82
  </div>
83
  <?php endif; // Author. ?>
84
  </div>
@@ -87,7 +78,7 @@
87
  $ingredients = $recipe->ingredients();
88
  if ( count( $ingredients ) > 0 ) : ?>
89
  <div class="wprm-recipe-ingredients-container">
90
- <h3 class="wprm-recipe-header"><?php _e( 'Ingredients', 'wp-recipe-maker' ); ?></h3>
91
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
92
  <div class="wprm-recipe-ingredient-group">
93
  <?php if ( $ingredient_group['name'] ) : ?>
@@ -117,7 +108,7 @@
117
  $instructions = $recipe->instructions();
118
  if ( count( $instructions ) > 0 ) : ?>
119
  <div class="wprm-recipe-instructions-container">
120
- <h3 class="wprm-recipe-header"><?php _e( 'Instructions', 'wp-recipe-maker' ); ?></h3>
121
  <?php foreach ( $instructions as $instruction_group ) : ?>
122
  <div class="wprm-recipe-instruction-group">
123
  <?php if ( $instruction_group['name'] ) : ?>
@@ -138,8 +129,9 @@
138
  <?php endif; // Instructions. ?>
139
  <?php if ( $recipe->notes() ) : ?>
140
  <div class="wprm-recipe-notes-container">
141
- <h3 class="wprm-recipe-header"><?php _e( 'Recipe Notes', 'wp-recipe-maker' ); ?></h3>
142
  <?php echo $recipe->notes(); ?>
143
  </div>
144
  <?php endif; // Notes ?>
 
145
  </div>
18
  </div>
19
  <div class="wprm-recipe-details-container wprm-recipe-tags-container">
20
  <?php
21
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
22
+
23
+ foreach ( $taxonomies as $taxonomy => $options ) :
24
+ $key = substr( $taxonomy, 5 );
25
+ $terms = $recipe->tags( $key );
26
+
27
+ if ( count( $terms ) > 0 ) : ?>
28
+ <div class="wprm-recipe-<?php echo $key; ?>-container">
29
+ <span class="wprm-recipe-details-name wprm-recipe-<?php echo $key; ?>-name"><?php echo WPRM_Template_Helper::label( $key . '_tags', $options['singular_name'] ); ?></span>
30
+ <span class="wprm-recipe-<?php echo $key; ?>"<?php echo WPRM_Template_Helper::tags_meta( $key ); ?>>
31
+ <?php foreach ( $terms as $index => $term ) {
32
+ if ( 0 !== $index ) {
33
+ echo ', ';
34
+ }
35
+ echo $term->name;
36
+ } ?>
37
+ </span>
38
+ </div>
39
+ <?php endif; // Count.
40
+ endforeach; // Taxonomies. ?>
 
 
 
 
 
 
 
 
 
41
  </div>
42
  <div class="wprm-recipe-details-container wprm-recipe-times-container">
43
  <?php if ( $recipe->prep_time() ) : ?>
44
  <div class="wprm-recipe-prep-time-container">
45
+ <span class="wprm-recipe-details-name wprm-recipe-prep-time-name"><?php echo WPRM_Template_Helper::label( 'prep_time' ); ?></span> <?php echo $recipe->prep_time_formatted(); ?>
46
  </div>
47
  <?php endif; // Prep time. ?>
48
  <?php if ( $recipe->cook_time() ) : ?>
49
  <div class="wprm-recipe-cook-time-container">
50
+ <span class="wprm-recipe-details-name wprm-recipe-cook-time-name"><?php echo WPRM_Template_Helper::label( 'cook_time' ); ?></span> <?php echo $recipe->cook_time_formatted(); ?>
51
  </div>
52
  <?php endif; // Cook time. ?>
53
  <?php if ( $recipe->total_time() ) : ?>
54
  <div class="wprm-recipe-total-time-container">
55
+ <span class="wprm-recipe-details-name wprm-recipe-total-time-name"><?php echo WPRM_Template_Helper::label( 'total_time' ); ?></span> <?php echo $recipe->total_time_formatted(); ?>
56
  </div>
57
  <?php endif; // Total time. ?>
58
  </div>
59
  <div class="wprm-recipe-details-container">
60
  <?php if ( $recipe->servings() ) : ?>
61
  <div class="wprm-recipe-servings-container">
62
+ <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php echo WPRM_Template_Helper::label( 'servings' ); ?></span> <span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span>
63
  </div>
64
  <?php endif; // Servings. ?>
65
  <?php if ( $recipe->calories() ) : ?>
66
  <div class="wprm-recipe-calories-container">
67
+ <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php echo WPRM_Template_Helper::label( 'calories' ); ?></span> <span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span>
68
  </div>
69
  <?php endif; // Calories. ?>
70
  <?php if ( $recipe->author() ) : ?>
71
  <div class="wprm-recipe-author-container">
72
+ <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php echo WPRM_Template_Helper::label( 'author' ); ?></span> <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
73
  </div>
74
  <?php endif; // Author. ?>
75
  </div>
78
  $ingredients = $recipe->ingredients();
79
  if ( count( $ingredients ) > 0 ) : ?>
80
  <div class="wprm-recipe-ingredients-container">
81
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'ingredients' ); ?></h3>
82
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
83
  <div class="wprm-recipe-ingredient-group">
84
  <?php if ( $ingredient_group['name'] ) : ?>
108
  $instructions = $recipe->instructions();
109
  if ( count( $instructions ) > 0 ) : ?>
110
  <div class="wprm-recipe-instructions-container">
111
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'instructions' ); ?></h3>
112
  <?php foreach ( $instructions as $instruction_group ) : ?>
113
  <div class="wprm-recipe-instruction-group">
114
  <?php if ( $instruction_group['name'] ) : ?>
129
  <?php endif; // Instructions. ?>
130
  <?php if ( $recipe->notes() ) : ?>
131
  <div class="wprm-recipe-notes-container">
132
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'notes' ); ?></h3>
133
  <?php echo $recipe->notes(); ?>
134
  </div>
135
  <?php endif; // Notes ?>
136
+ <?php echo WPRM_Template_Helper::nutrition_label(); ?>
137
  </div>
templates/recipe/clean-print/clean-print.scss CHANGED
@@ -52,7 +52,7 @@
52
  }
53
 
54
  .wprm-recipe-ingredient-notes {
55
- color: #999999;
56
  }
57
 
58
  .wprm-recipe-instructions {
52
  }
53
 
54
  .wprm-recipe-ingredient-notes {
55
+ opacity: 0.7;
56
  }
57
 
58
  .wprm-recipe-instructions {
templates/recipe/simple/simple.min.css CHANGED
@@ -1 +1 @@
1
- .wprm-recipe-simple{border-top:1px solid #aaa;background-color:#fafafa;padding:10px;margin:20px 0;font-size:.9em}.wprm-recipe-simple li,.wprm-recipe-simple p{font-size:1em}.wprm-recipe-simple h2.wprm-recipe-name,.wprm-recipe-simple h3.wprm-recipe-header,.wprm-recipe-simple h4.wprm-recipe-group-name{font-variant:normal;text-transform:none;letter-spacing:normal;margin:0;padding:0}.wprm-recipe-simple .wprm-recipe-image-container{float:right;text-align:center;margin:0 0 10px 10px}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-image{margin:0}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-rating{margin-bottom:5px}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-rating svg{vertical-align:middle;width:16px;height:16px;margin:0}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-rating .wprm-recipe-rating-details{font-size:.8em}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-print{font-size:.9em;cursor:pointer}.wprm-recipe-simple h2.wprm-recipe-name{clear:none;font-size:1.8em}.wprm-recipe-simple .wprm-recipe-details-container,.wprm-recipe-simple .wprm-recipe-summary{margin-bottom:15px}.wprm-recipe-simple .wprm-recipe-details-icon svg{vertical-align:middle;width:16px;height:16px}.wprm-recipe-simple .wprm-recipe-details-name{display:inline-block;font-weight:700;min-width:130px}.wprm-recipe-simple .wprm-recipe-details-unit{font-size:.8em}.wprm-recipe-simple h3.wprm-recipe-header{margin-top:10px;font-size:1.2em}.wprm-recipe-simple ol,.wprm-recipe-simple ul{margin:0 0 8px}.wprm-recipe-simple ol li,.wprm-recipe-simple ul li{margin:0 0 0 32px}.wprm-recipe-simple h4.wprm-recipe-group-name{margin-top:5px!important;font-weight:300;font-size:1em}.wprm-recipe-simple .wprm-recipe-ingredient-notes{color:#999}.wprm-recipe-simple .wprm-recipe-instructions .wprm-recipe-instruction{margin-bottom:5px}.wprm-recipe-simple .wprm-recipe-instruction-text p{margin:0 0 5px}.wprm-recipe-simple .wprm-recipe-instruction-text p:last-of-type{margin-bottom:0}.wprm-recipe-simple .wprm-recipe-instruction-image{margin:5px 0 15px}.wprm-print .wprm-recipe-simple{max-width:750px;margin:0 auto}.wprm-print .wprm-recipe-print{display:none}@media only screen and (max-width:640px){.wprm-recipe-simple .wprm-recipe-image-container{float:none}.wprm-recipe-simple .wprm-recipe-details-name{min-width:0}}
1
+ .wprm-recipe-simple{border-top:1px solid #aaa;background-color:#fafafa;padding:10px;margin:20px 0;font-size:.9em}.wprm-recipe-simple li,.wprm-recipe-simple p{font-size:1em}.wprm-recipe-simple h2.wprm-recipe-name,.wprm-recipe-simple h3.wprm-recipe-header,.wprm-recipe-simple h4.wprm-recipe-group-name{font-variant:normal;text-transform:none;letter-spacing:normal;margin:0;padding:0}.wprm-recipe-simple .wprm-recipe-image-container{float:right;text-align:center;margin:0 0 10px 10px}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-image{margin:0}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-rating{margin-bottom:5px}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-rating svg{vertical-align:middle;width:16px;height:16px;margin:0}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-rating .wprm-recipe-rating-details{font-size:.8em}.wprm-recipe-simple .wprm-recipe-image-container .wprm-recipe-print{font-size:.9em;cursor:pointer}.wprm-recipe-simple h2.wprm-recipe-name{clear:none;font-size:1.8em}.wprm-recipe-simple .wprm-recipe-details-container,.wprm-recipe-simple .wprm-recipe-summary{margin-bottom:15px}.wprm-recipe-simple .wprm-recipe-details-icon svg{vertical-align:middle;width:16px;height:16px}.wprm-recipe-simple .wprm-recipe-details-name{display:inline-block;font-weight:700;min-width:130px}.wprm-recipe-simple .wprm-recipe-details-unit{font-size:.8em}.wprm-recipe-simple h3.wprm-recipe-header{margin-top:10px;font-size:1.2em}.wprm-recipe-simple ol,.wprm-recipe-simple ul{margin:0 0 8px}.wprm-recipe-simple ol li,.wprm-recipe-simple ul li{margin:0 0 0 32px}.wprm-recipe-simple h4.wprm-recipe-group-name{margin-top:5px!important;font-weight:300;font-size:1em}.wprm-recipe-simple .wprm-recipe-ingredient-notes{opacity:.7}.wprm-recipe-simple .wprm-recipe-instructions .wprm-recipe-instruction{margin-bottom:5px}.wprm-recipe-simple .wprm-recipe-instruction-text p{margin:0 0 5px}.wprm-recipe-simple .wprm-recipe-instruction-text p:last-of-type{margin-bottom:0}.wprm-recipe-simple .wprm-recipe-instruction-image{margin:5px 0 15px}.wprm-print .wprm-recipe-simple{max-width:750px;margin:0 auto}.wprm-print .wprm-recipe-print{display:none}@media only screen and (max-width:640px){.wprm-recipe-simple .wprm-recipe-image-container{float:none}.wprm-recipe-simple .wprm-recipe-details-name{min-width:0}}
templates/recipe/simple/simple.php CHANGED
@@ -23,7 +23,7 @@
23
  echo $recipe->rating_stars( true );
24
  }
25
  ?>
26
- <span class="wprm-recipe-print"><span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/printer.svg' ); ?></span> <?php _e( 'Print', 'wp-recipe-maker' ); ?></span>
27
  </div>
28
  </div>
29
  <h2 class="wprm-recipe-name" itemprop="name"><?php echo $recipe->name(); ?></h2>
@@ -32,70 +32,61 @@
32
  </div>
33
  <div class="wprm-recipe-details-container wprm-recipe-tags-container">
34
  <?php
35
- $courses = $recipe->tags( 'course' );
36
- if ( count( $courses ) > 0 ) : ?>
37
- <div class="wprm-recipe-course-container">
38
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/tag.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-course-name"><?php _e( 'Course', 'wp-recipe-maker' ); ?></span>
39
- <span class="wprm-recipe-course" itemprop="recipeCategory">
40
- <?php foreach ( $courses as $index => $course ) {
41
- if ( 0 !== $index ) {
42
- echo ', ';
43
- }
44
- echo $course->name;
45
- } ?>
46
- </span>
47
- </div>
48
- <?php endif; // Course. ?>
49
- <?php
50
- $cuisines = $recipe->tags( 'cuisine' );
51
- if ( count( $recipe->tags( 'cuisine' ) ) > 0 ) : ?>
52
- <div class="wprm-recipe-cuisine-container">
53
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/tag.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-cuisine-name"><?php _e( 'Cuisine', 'wp-recipe-maker' ); ?></span>
54
- <span class="wprm-recipe-details wprm-recipe-cuisine" itemprop="recipeCuisine">
55
- <?php foreach ( $cuisines as $index => $cuisine ) {
56
- if ( 0 !== $index ) {
57
- echo ', ';
58
- }
59
- echo $cuisine->name;
60
- } ?>
61
- </span>
62
- </div>
63
- <?php endif; // Cuisine. ?>
64
  </div>
65
  <div class="wprm-recipe-details-container wprm-recipe-times-container">
66
  <?php if ( $recipe->prep_time() ) : ?>
67
  <div class="wprm-recipe-prep-time-container">
68
  <meta itemprop="prepTime" content="PT<?php echo $recipe->prep_time(); ?>M" />
69
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/knife.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-prep-time-name"><?php _e( 'Prep Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->prep_time_formatted(); ?>
70
  </div>
71
  <?php endif; // Prep time. ?>
72
  <?php if ( $recipe->cook_time() ) : ?>
73
  <div class="wprm-recipe-cook-time-container">
74
  <meta itemprop="cookTime" content="PT<?php echo $recipe->cook_time(); ?>M" />
75
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/pan.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-cook-time-name"><?php _e( 'Cook Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->cook_time_formatted(); ?>
76
  </div>
77
  <?php endif; // Cook time. ?>
78
  <?php if ( $recipe->total_time() ) : ?>
79
  <div class="wprm-recipe-total-time-container">
80
  <meta itemprop="totalTime" content="PT<?php echo $recipe->total_time(); ?>M" />
81
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/clock.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-total-time-name"><?php _e( 'Total Time', 'wp-recipe-maker' ); ?></span> <?php echo $recipe->total_time_formatted(); ?>
82
  </div>
83
  <?php endif; // Total time. ?>
84
  </div>
85
  <div class="wprm-recipe-details-container">
86
  <?php if ( $recipe->servings() ) : ?>
87
  <div class="wprm-recipe-servings-container">
88
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/cutlery.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php _e( 'Servings', 'wp-recipe-maker' ); ?></span> <span itemprop="recipeYield"><span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span></span>
89
  </div>
90
  <?php endif; // Servings. ?>
91
  <?php if ( $recipe->calories() ) : ?>
92
  <div class="wprm-recipe-calories-container" itemprop="nutrition" itemscope itemtype="http://schema.org/NutritionInformation">
93
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/battery.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php _e( 'Calories', 'wp-recipe-maker' ); ?></span> <span itemprop="calories"><span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span></span>
94
  </div>
95
  <?php endif; // Calories. ?>
96
  <?php if ( $recipe->author() ) : ?>
97
  <div class="wprm-recipe-author-container">
98
- <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/chef-hat.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php _e( 'Author', 'wp-recipe-maker' ); ?></span> <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
99
  </div>
100
  <?php endif; // Author. ?>
101
  </div>
@@ -104,7 +95,7 @@
104
  $ingredients = $recipe->ingredients();
105
  if ( count( $ingredients ) > 0 ) : ?>
106
  <div class="wprm-recipe-ingredients-container">
107
- <h3 class="wprm-recipe-header"><?php _e( 'Ingredients', 'wp-recipe-maker' ); ?></h3>
108
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
109
  <div class="wprm-recipe-ingredient-group">
110
  <?php if ( $ingredient_group['name'] ) : ?>
@@ -134,7 +125,7 @@
134
  $instructions = $recipe->instructions();
135
  if ( count( $instructions ) > 0 ) : ?>
136
  <div class="wprm-recipe-instructions-container">
137
- <h3 class="wprm-recipe-header"><?php _e( 'Instructions', 'wp-recipe-maker' ); ?></h3>
138
  <?php foreach ( $instructions as $instruction_group ) : ?>
139
  <div class="wprm-recipe-instruction-group">
140
  <?php if ( $instruction_group['name'] ) : ?>
@@ -158,8 +149,9 @@
158
  <?php endif; // Instructions. ?>
159
  <?php if ( $recipe->notes() ) : ?>
160
  <div class="wprm-recipe-notes-container">
161
- <h3 class="wprm-recipe-header"><?php _e( 'Recipe Notes', 'wp-recipe-maker' ); ?></h3>
162
  <?php echo $recipe->notes(); ?>
163
  </div>
164
  <?php endif; // Notes ?>
 
165
  </div>
23
  echo $recipe->rating_stars( true );
24
  }
25
  ?>
26
+ <span class="wprm-recipe-print"><span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/printer.svg' ); ?></span> <?php echo WPRM_Template_Helper::label( 'print_button' ); ?></span>
27
  </div>
28
  </div>
29
  <h2 class="wprm-recipe-name" itemprop="name"><?php echo $recipe->name(); ?></h2>
32
  </div>
33
  <div class="wprm-recipe-details-container wprm-recipe-tags-container">
34
  <?php
35
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
36
+
37
+ foreach ( $taxonomies as $taxonomy => $options ) :
38
+ $key = substr( $taxonomy, 5 );
39
+ $terms = $recipe->tags( $key );
40
+
41
+ if ( count( $terms ) > 0 ) : ?>
42
+ <div class="wprm-recipe-<?php echo $key; ?>-container">
43
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/tag.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-<?php echo $key; ?>-name"><?php echo WPRM_Template_Helper::label( $key . '_tags', $options['singular_name'] ); ?></span>
44
+ <span class="wprm-recipe-<?php echo $key; ?>"<?php echo WPRM_Template_Helper::tags_meta( $key ); ?>>
45
+ <?php foreach ( $terms as $index => $term ) {
46
+ if ( 0 !== $index ) {
47
+ echo ', ';
48
+ }
49
+ echo $term->name;
50
+ } ?>
51
+ </span>
52
+ </div>
53
+ <?php endif; // Count.
54
+ endforeach; // Taxonomies. ?>
 
 
 
 
 
 
 
 
 
55
  </div>
56
  <div class="wprm-recipe-details-container wprm-recipe-times-container">
57
  <?php if ( $recipe->prep_time() ) : ?>
58
  <div class="wprm-recipe-prep-time-container">
59
  <meta itemprop="prepTime" content="PT<?php echo $recipe->prep_time(); ?>M" />
60
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/knife.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-prep-time-name"><?php echo WPRM_Template_Helper::label( 'prep_time' ); ?></span> <?php echo $recipe->prep_time_formatted(); ?>
61
  </div>
62
  <?php endif; // Prep time. ?>
63
  <?php if ( $recipe->cook_time() ) : ?>
64
  <div class="wprm-recipe-cook-time-container">
65
  <meta itemprop="cookTime" content="PT<?php echo $recipe->cook_time(); ?>M" />
66
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/pan.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-cook-time-name"><?php echo WPRM_Template_Helper::label( 'cook_time' ); ?></span> <?php echo $recipe->cook_time_formatted(); ?>
67
  </div>
68
  <?php endif; // Cook time. ?>
69
  <?php if ( $recipe->total_time() ) : ?>
70
  <div class="wprm-recipe-total-time-container">
71
  <meta itemprop="totalTime" content="PT<?php echo $recipe->total_time(); ?>M" />
72
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/clock.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-total-time-name"><?php echo WPRM_Template_Helper::label( 'total_time' ); ?></span> <?php echo $recipe->total_time_formatted(); ?>
73
  </div>
74
  <?php endif; // Total time. ?>
75
  </div>
76
  <div class="wprm-recipe-details-container">
77
  <?php if ( $recipe->servings() ) : ?>
78
  <div class="wprm-recipe-servings-container">
79
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/cutlery.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php echo WPRM_Template_Helper::label( 'servings' ); ?></span> <span itemprop="recipeYield"><span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span></span>
80
  </div>
81
  <?php endif; // Servings. ?>
82
  <?php if ( $recipe->calories() ) : ?>
83
  <div class="wprm-recipe-calories-container" itemprop="nutrition" itemscope itemtype="http://schema.org/NutritionInformation">
84
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/battery.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php echo WPRM_Template_Helper::label( 'calories' ); ?></span> <span itemprop="calories"><span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span></span>
85
  </div>
86
  <?php endif; // Calories. ?>
87
  <?php if ( $recipe->author() ) : ?>
88
  <div class="wprm-recipe-author-container">
89
+ <span class="wprm-recipe-details-icon"><?php include( WPRM_DIR . 'assets/icons/chef-hat.svg' ); ?></span> <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php echo WPRM_Template_Helper::label( 'author' ); ?></span> <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
90
  </div>
91
  <?php endif; // Author. ?>
92
  </div>
95
  $ingredients = $recipe->ingredients();
96
  if ( count( $ingredients ) > 0 ) : ?>
97
  <div class="wprm-recipe-ingredients-container">
98
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'ingredients' ); ?></h3>
99
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
100
  <div class="wprm-recipe-ingredient-group">
101
  <?php if ( $ingredient_group['name'] ) : ?>
125
  $instructions = $recipe->instructions();
126
  if ( count( $instructions ) > 0 ) : ?>
127
  <div class="wprm-recipe-instructions-container">
128
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'instructions' ); ?></h3>
129
  <?php foreach ( $instructions as $instruction_group ) : ?>
130
  <div class="wprm-recipe-instruction-group">
131
  <?php if ( $instruction_group['name'] ) : ?>
149
  <?php endif; // Instructions. ?>
150
  <?php if ( $recipe->notes() ) : ?>
151
  <div class="wprm-recipe-notes-container">
152
+ <h3 class="wprm-recipe-header"><?php echo WPRM_Template_Helper::label( 'notes' ); ?></h3>
153
  <?php echo $recipe->notes(); ?>
154
  </div>
155
  <?php endif; // Notes ?>
156
+ <?php echo WPRM_Template_Helper::nutrition_label(); ?>
157
  </div>
templates/recipe/simple/simple.scss CHANGED
@@ -98,7 +98,7 @@
98
  }
99
 
100
  .wprm-recipe-ingredient-notes {
101
- color: #999999;
102
  }
103
 
104
  .wprm-recipe-instructions {
98
  }
99
 
100
  .wprm-recipe-ingredient-notes {
101
+ opacity: 0.7;
102
  }
103
 
104
  .wprm-recipe-instructions {
templates/recipe/tastefully-simple/tastefully-simple.min.css CHANGED
@@ -1 +1 @@
1
- .wprm-print .wprm-recipe-tastefully-simple,.wprm-recipe-container .wprm-recipe-tastefully-simple{font:12px Verdana,Arial,Geneva,sans-serif;border:1px dashed #666;color:#666;padding:10px;background:#FFF}.wprm-print .wprm-recipe-tastefully-simple div,.wprm-print .wprm-recipe-tastefully-simple li,.wprm-print .wprm-recipe-tastefully-simple ol,.wprm-print .wprm-recipe-tastefully-simple p,.wprm-print .wprm-recipe-tastefully-simple span,.wprm-print .wprm-recipe-tastefully-simple ul,.wprm-recipe-container .wprm-recipe-tastefully-simple div,.wprm-recipe-container .wprm-recipe-tastefully-simple li,.wprm-recipe-container .wprm-recipe-tastefully-simple ol,.wprm-recipe-container .wprm-recipe-tastefully-simple p,.wprm-recipe-container .wprm-recipe-tastefully-simple span,.wprm-recipe-container .wprm-recipe-tastefully-simple ul{margin:0;padding:0;line-height:inherit}.wprm-print .wprm-recipe-tastefully-simple svg,.wprm-recipe-container .wprm-recipe-tastefully-simple svg{vertical-align:middle;width:16px;height:16px;margin:0}.wprm-print .wprm-recipe-tastefully-simple .wprm-clear-left,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-clear-left{clear:left;line-height:0;height:0}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container{float:right;max-width:40%;text-align:right}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating{margin-bottom:5px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating svg path,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating svg path{fill:#feb600}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating svg polygon,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating svg polygon{stroke:#feb600}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating .wprm-recipe-rating-details,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating .wprm-recipe-rating-details{font:10px "Trebuchet MS",Arial,Helvetica,sans-serif}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons{margin-top:10px;text-align:center}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons .wprm-recipe-print,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons .wprm-recipe-print{color:#fff;background:#666;font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:.4em 1em}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-name,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-name{font:150% Verdana,Geneva,sans-serif;margin-bottom:15px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-times-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-times-container{border-top:1px dotted #666;border-bottom:1px dotted #666;width:60%;padding-top:5px;padding-bottom:5px;margin-bottom:10px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container{width:33%;text-align:center;float:left;font-weight:700;border-left:1px solid #ccc}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container:first-child,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container:first-child{border-left:none}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container .wprm-recipe-time-header,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container .wprm-recipe-time-header{margin-bottom:4px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container .wprm-recipe-time,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-times-container .wprm-recipe-time-container .wprm-recipe-time{font-size:10px;font-weight:400}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-details-container,.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-ingredients-container,.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-summary,.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-summary p,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-details-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-ingredients-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-summary,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-summary p{margin-bottom:10px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-header,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-header{font-size:1.4em;font-weight:700;margin-top:1em;margin-bottom:1em}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-group-name,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-group-name{margin-top:3px;margin-bottom:3px;font-weight:700}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-ingredients li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-ingredients li{list-style:disc inside;margin-left:10px;line-height:inherit;background:0 0}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-instructions li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-instructions li{list-style:decimal;margin-left:30px;line-height:inherit;background:0 0}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ul li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ul li{list-style:disc inside;margin-left:10px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ol li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ol li{list-style:decimal;margin-left:30px}.wprm-print .wprm-recipe-tastefully-simple{max-width:750px;margin:0 auto}.wprm-print .wprm-recipe-print{display:none}@media only screen and (max-width:480px){.wprm-recipe-tastefully-simple .wprm-recipe-image-container{float:none;width:100%;max-width:none}}
1
+ .wprm-print .wprm-recipe-tastefully-simple,.wprm-recipe-container .wprm-recipe-tastefully-simple{font:12px Verdana,Arial,Geneva,sans-serif;border:1px dashed #666;padding:10px}.wprm-print .wprm-recipe-tastefully-simple div,.wprm-print .wprm-recipe-tastefully-simple li,.wprm-print .wprm-recipe-tastefully-simple ol,.wprm-print .wprm-recipe-tastefully-simple p,.wprm-print .wprm-recipe-tastefully-simple span,.wprm-print .wprm-recipe-tastefully-simple ul,.wprm-recipe-container .wprm-recipe-tastefully-simple div,.wprm-recipe-container .wprm-recipe-tastefully-simple li,.wprm-recipe-container .wprm-recipe-tastefully-simple ol,.wprm-recipe-container .wprm-recipe-tastefully-simple p,.wprm-recipe-container .wprm-recipe-tastefully-simple span,.wprm-recipe-container .wprm-recipe-tastefully-simple ul{margin:0;padding:0;line-height:inherit}.wprm-print .wprm-recipe-tastefully-simple svg,.wprm-recipe-container .wprm-recipe-tastefully-simple svg{vertical-align:middle;width:16px;height:16px;margin:0}.wprm-print .wprm-recipe-tastefully-simple .wprm-clear-left,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-clear-left{clear:left;line-height:0;height:0}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container{float:right;max-width:40%;text-align:right}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating{margin-bottom:5px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating .wprm-recipe-rating-details,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-rating .wprm-recipe-rating-details{font:10px "Trebuchet MS",Arial,Helvetica,sans-serif}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons{margin-top:10px;text-align:center}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons .wprm-recipe-print,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-image-container .wprm-recipe-buttons .wprm-recipe-print{font-size:11px;cursor:pointer;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;padding:.4em 1em}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-name,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-name{font:150% Verdana,Geneva,sans-serif;margin-bottom:15px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-times-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-times-container{border-top:1px dotted #666;border-bottom:1px dotted #666;width:60%;padding-top:5px;padding-bottom:5px;margin-bottom:10px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-time-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-time-container{width:33%;text-align:center;float:left;font-weight:700;border-left:1px solid #ccc}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-time-container:first-child,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-time-container:first-child{border-left:none}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-time-container .wprm-recipe-time-header,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-time-container .wprm-recipe-time-header{margin-bottom:4px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-time-container .wprm-recipe-time,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-time-container .wprm-recipe-time{font-size:10px;font-weight:400}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-details-container,.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-ingredients-container,.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-summary,.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-summary p,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-details-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-ingredients-container,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-summary,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-summary p{margin-bottom:10px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-header,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-header{font-size:1.4em;font-weight:700;margin-top:1em;margin-bottom:1em}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-group-name,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-group-name{margin-top:3px;margin-bottom:3px;font-weight:700}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-ingredients li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-ingredients li{list-style:disc inside;margin-left:10px;line-height:inherit;background:0 0}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-instructions li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-instructions li{list-style:decimal;margin-left:30px;line-height:inherit;background:0 0}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ul li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ul li{list-style:disc inside;margin-left:10px}.wprm-print .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ol li,.wprm-recipe-container .wprm-recipe-tastefully-simple .wprm-recipe-notes-container ol li{list-style:decimal;margin-left:30px}.wprm-print .wprm-recipe-tastefully-simple{max-width:750px;margin:0 auto}.wprm-print .wprm-recipe-print{display:none}@media only screen and (max-width:480px){.wprm-recipe-tastefully-simple .wprm-recipe-image-container{float:none;width:100%;max-width:none}}
templates/recipe/tastefully-simple/tastefully-simple.php CHANGED
@@ -23,30 +23,30 @@
23
  ?>
24
  <div class="wprm-recipe-image"><?php echo $recipe->image(); ?></div>
25
  <div class="wprm-recipe-buttons">
26
- <span class="wprm-recipe-print"><?php _e( 'Print', 'wp-recipe-maker' ); ?></span>
27
  </div>
28
  </div>
29
- <div class="wprm-recipe-name" itemprop="name"><?php echo $recipe->name(); ?></div>
30
  <?php if ( $recipe->prep_time() || $recipe->prep_time() || $recipe->prep_time() ) : ?>
31
- <div class="wprm-recipe-times-container">
32
  <?php if ( $recipe->prep_time() ) : ?>
33
- <div class="wprm-recipe-time-container">
34
  <meta itemprop="prepTime" content="PT<?php echo $recipe->prep_time(); ?>M" />
35
- <div class="wprm-recipe-time-header"><?php _e( 'Prep Time', 'wp-recipe-maker' ); ?></div>
36
  <div class="wprm-recipe-time"><?php echo $recipe->prep_time_formatted( true ); ?></div>
37
  </div>
38
  <?php endif; // Prep time. ?>
39
  <?php if ( $recipe->cook_time() ) : ?>
40
- <div class="wprm-recipe-time-container">
41
  <meta itemprop="cookTime" content="PT<?php echo $recipe->cook_time(); ?>M" />
42
- <div class="wprm-recipe-time-header"><?php _e( 'Cook Time', 'wp-recipe-maker' ); ?></div>
43
  <div class="wprm-recipe-time"><?php echo $recipe->cook_time_formatted( true ); ?></div>
44
  </div>
45
  <?php endif; // Cook time. ?>
46
  <?php if ( $recipe->total_time() ) : ?>
47
- <div class="wprm-recipe-time-container">
48
  <meta itemprop="totalTime" content="PT<?php echo $recipe->total_time(); ?>M" />
49
- <div class="wprm-recipe-time-header"><?php _e( 'Total Time', 'wp-recipe-maker' ); ?></div>
50
  <div class="wprm-recipe-time"><?php echo $recipe->total_time_formatted( true ); ?></div>
51
  </div>
52
  <?php endif; // Total time. ?>
@@ -58,48 +58,39 @@
58
  </div>
59
  <div class="wprm-recipe-details-container">
60
  <?php
61
- $courses = $recipe->tags( 'course' );
62
- if ( count( $courses ) > 0 ) : ?>
63
- <div class="wprm-recipe-course-container">
64
- <span class="wprm-recipe-details-name wprm-recipe-course-name"><?php _e( 'Course', 'wp-recipe-maker' ); ?>:</span>
65
- <span class="wprm-recipe-course" itemprop="recipeCategory">
66
- <?php foreach ( $courses as $index => $course ) {
67
- if ( 0 !== $index ) {
68
- echo ', ';
69
- }
70
- echo $course->name;
71
- } ?>
72
- </span>
73
- </div>
74
- <?php endif; // Course. ?>
75
- <?php
76
- $cuisines = $recipe->tags( 'cuisine' );
77
- if ( count( $recipe->tags( 'cuisine' ) ) > 0 ) : ?>
78
- <div class="wprm-recipe-cuisine-container">
79
- <span class="wprm-recipe-details-name wprm-recipe-cuisine-name"><?php _e( 'Cuisine', 'wp-recipe-maker' ); ?>:</span>
80
- <span class="wprm-recipe-details wprm-recipe-cuisine" itemprop="recipeCuisine">
81
- <?php foreach ( $cuisines as $index => $cuisine ) {
82
- if ( 0 !== $index ) {
83
- echo ', ';
84
- }
85
- echo $cuisine->name;
86
- } ?>
87
- </span>
88
- </div>
89
- <?php endif; // Cuisine. ?>
90
  <?php if ( $recipe->servings() ) : ?>
91
  <div class="wprm-recipe-servings-container">
92
- <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php _e( 'Servings', 'wp-recipe-maker' ); ?></span>: <span itemprop="recipeYield"><span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span></span>
93
  </div>
94
  <?php endif; // Servings. ?>
95
  <?php if ( $recipe->calories() ) : ?>
96
  <div class="wprm-recipe-calories-container" itemprop="nutrition" itemscope itemtype="http://schema.org/NutritionInformation">
97
- <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php _e( 'Calories', 'wp-recipe-maker' ); ?></span>: <span itemprop="calories"><span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span></span>
98
  </div>
99
  <?php endif; // Calories. ?>
100
  <?php if ( $recipe->author() ) : ?>
101
  <div class="wprm-recipe-author-container">
102
- <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php _e( 'Author', 'wp-recipe-maker' ); ?></span>: <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
103
  </div>
104
  <?php endif; // Author. ?>
105
  </div>
@@ -108,7 +99,7 @@
108
  $ingredients = $recipe->ingredients();
109
  if ( count( $ingredients ) > 0 ) : ?>
110
  <div class="wprm-recipe-ingredients-container">
111
- <div class="wprm-recipe-header"><?php _e( 'Ingredients', 'wp-recipe-maker' ); ?></div>
112
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
113
  <div class="wprm-recipe-ingredient-group">
114
  <?php if ( $ingredient_group['name'] ) : ?>
@@ -138,7 +129,7 @@
138
  $instructions = $recipe->instructions();
139
  if ( count( $instructions ) > 0 ) : ?>
140
  <div class="wprm-recipe-instructions-container">
141
- <div class="wprm-recipe-header"><?php _e( 'Instructions', 'wp-recipe-maker' ); ?></div>
142
  <?php foreach ( $instructions as $instruction_group ) : ?>
143
  <div class="wprm-recipe-instruction-group">
144
  <?php if ( $instruction_group['name'] ) : ?>
@@ -162,8 +153,9 @@
162
  <?php endif; // Instructions. ?>
163
  <?php if ( $recipe->notes() ) : ?>
164
  <div class="wprm-recipe-notes-container">
165
- <div class="wprm-recipe-header"><?php _e( 'Recipe Notes', 'wp-recipe-maker' ); ?></div>
166
  <?php echo $recipe->notes(); ?>
167
  </div>
168
  <?php endif; // Notes ?>
 
169
  </div>
23
  ?>
24
  <div class="wprm-recipe-image"><?php echo $recipe->image(); ?></div>
25
  <div class="wprm-recipe-buttons">
26
+ <span class="wprm-recipe-print wprm-color-accent"><?php echo WPRM_Template_Helper::label( 'print_button' ); ?></span>
27
  </div>
28
  </div>
29
+ <div class="wprm-recipe-name wprm-color-header" itemprop="name"><?php echo $recipe->name(); ?></div>
30
  <?php if ( $recipe->prep_time() || $recipe->prep_time() || $recipe->prep_time() ) : ?>
31
+ <div class="wprm-recipe-times-container wprm-color-border">
32
  <?php if ( $recipe->prep_time() ) : ?>
33
+ <div class="wprm-recipe-time-container wprm-color-border">
34
  <meta itemprop="prepTime" content="PT<?php echo $recipe->prep_time(); ?>M" />
35
+ <div class="wprm-recipe-time-header"><?php echo WPRM_Template_Helper::label( 'prep_time' ); ?></div>
36
  <div class="wprm-recipe-time"><?php echo $recipe->prep_time_formatted( true ); ?></div>
37
  </div>
38
  <?php endif; // Prep time. ?>
39
  <?php if ( $recipe->cook_time() ) : ?>
40
+ <div class="wprm-recipe-time-container wprm-color-border">
41
  <meta itemprop="cookTime" content="PT<?php echo $recipe->cook_time(); ?>M" />
42
+ <div class="wprm-recipe-time-header"><?php echo WPRM_Template_Helper::label( 'cook_time' ); ?></div>
43
  <div class="wprm-recipe-time"><?php echo $recipe->cook_time_formatted( true ); ?></div>
44
  </div>
45
  <?php endif; // Cook time. ?>
46
  <?php if ( $recipe->total_time() ) : ?>
47
+ <div class="wprm-recipe-time-container wprm-color-border">
48
  <meta itemprop="totalTime" content="PT<?php echo $recipe->total_time(); ?>M" />
49
+ <div class="wprm-recipe-time-header"><?php echo WPRM_Template_Helper::label( 'total_time' ); ?></div>
50
  <div class="wprm-recipe-time"><?php echo $recipe->total_time_formatted( true ); ?></div>
51
  </div>
52
  <?php endif; // Total time. ?>
58
  </div>
59
  <div class="wprm-recipe-details-container">
60
  <?php
61
+ $taxonomies = WPRM_Taxonomies::get_taxonomies();
62
+
63
+ foreach ( $taxonomies as $taxonomy => $options ) :
64
+ $key = substr( $taxonomy, 5 );
65
+ $terms = $recipe->tags( $key );
66
+
67
+ if ( count( $terms ) > 0 ) : ?>
68
+ <div class="wprm-recipe-<?php echo $key; ?>-container">
69
+ <span class="wprm-recipe-details-name wprm-recipe-<?php echo $key; ?>-name"><?php echo WPRM_Template_Helper::label( $key . '_tags', $options['singular_name'] ); ?>:</span>
70
+ <span class="wprm-recipe-<?php echo $key; ?>"<?php echo WPRM_Template_Helper::tags_meta( $key ); ?>>
71
+ <?php foreach ( $terms as $index => $term ) {
72
+ if ( 0 !== $index ) {
73
+ echo ', ';
74
+ }
75
+ echo $term->name;
76
+ } ?>
77
+ </span>
78
+ </div>
79
+ <?php endif; // Count.
80
+ endforeach; // Taxonomies. ?>
 
 
 
 
 
 
 
 
 
81
  <?php if ( $recipe->servings() ) : ?>
82
  <div class="wprm-recipe-servings-container">
83
+ <span class="wprm-recipe-details-name wprm-recipe-servings-name"><?php echo WPRM_Template_Helper::label( 'servings' ); ?></span>: <span itemprop="recipeYield"><span class="wprm-recipe-details wprm-recipe-servings"><?php echo $recipe->servings(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-servings-unit"><?php echo $recipe->servings_unit(); ?></span></span>
84
  </div>
85
  <?php endif; // Servings. ?>
86
  <?php if ( $recipe->calories() ) : ?>
87
  <div class="wprm-recipe-calories-container" itemprop="nutrition" itemscope itemtype="http://schema.org/NutritionInformation">
88
+ <span class="wprm-recipe-details-name wprm-recipe-calories-name"><?php echo WPRM_Template_Helper::label( 'calories' ); ?></span>: <span itemprop="calories"><span class="wprm-recipe-details wprm-recipe-calories"><?php echo $recipe->calories(); ?></span> <span class="wprm-recipe-details-unit wprm-recipe-calories-unit"><?php _e( 'kcal', 'wp-recipe-maker' ); ?></span></span>
89
  </div>
90
  <?php endif; // Calories. ?>
91
  <?php if ( $recipe->author() ) : ?>
92
  <div class="wprm-recipe-author-container">
93
+ <span class="wprm-recipe-details-name wprm-recipe-author-name"><?php echo WPRM_Template_Helper::label( 'author' ); ?></span>: <span class="wprm-recipe-details wprm-recipe-author"><?php echo $recipe->author(); ?></span>
94
  </div>
95
  <?php endif; // Author. ?>
96
  </div>
99
  $ingredients = $recipe->ingredients();
100
  if ( count( $ingredients ) > 0 ) : ?>
101
  <div class="wprm-recipe-ingredients-container">
102
+ <div class="wprm-recipe-header wprm-color-header"><?php echo WPRM_Template_Helper::label( 'ingredients' ); ?></div>
103
  <?php foreach ( $ingredients as $ingredient_group ) : ?>
104
  <div class="wprm-recipe-ingredient-group">
105
  <?php if ( $ingredient_group['name'] ) : ?>
129
  $instructions = $recipe->instructions();
130
  if ( count( $instructions ) > 0 ) : ?>
131
  <div class="wprm-recipe-instructions-container">
132
+ <div class="wprm-recipe-header wprm-color-header"><?php echo WPRM_Template_Helper::label( 'instructions' ); ?></div>
133
  <?php foreach ( $instructions as $instruction_group ) : ?>
134
  <div class="wprm-recipe-instruction-group">
135
  <?php if ( $instruction_group['name'] ) : ?>
153
  <?php endif; // Instructions. ?>
154
  <?php if ( $recipe->notes() ) : ?>
155
  <div class="wprm-recipe-notes-container">
156
+ <div class="wprm-recipe-header wprm-color-header"><?php echo WPRM_Template_Helper::label( 'notes' ); ?></div>
157
  <?php echo $recipe->notes(); ?>
158
  </div>
159
  <?php endif; // Notes ?>
160
+ <?php echo WPRM_Template_Helper::nutrition_label(); ?>
161
  </div>
templates/recipe/tastefully-simple/tastefully-simple.scss CHANGED
@@ -2,9 +2,7 @@
2
  .wprm-print .wprm-recipe-tastefully-simple {
3
  font: 12px Verdana, Arial, Geneva, sans-serif;
4
  border: 1px dashed #666;
5
- color: #666;
6
  padding: 10px;
7
- background: #FFF;
8
 
9
  div,
10
  li,
@@ -38,14 +36,6 @@
38
  .wprm-recipe-rating {
39
  margin-bottom: 5px;
40
 
41
- svg path {
42
- fill: #feb600;
43
- }
44
-
45
- svg polygon {
46
- stroke: #feb600;
47
- }
48
-
49
  .wprm-recipe-rating-details {
50
  font: 10px "Trebuchet MS",Arial,Helvetica,sans-serif;
51
  }
@@ -56,8 +46,6 @@
56
  text-align: center;
57
 
58
  .wprm-recipe-print {
59
- color: #ffffff;
60
- background: #666666;
61
  font-size: 11px;
62
  cursor: pointer;
63
  -webkit-border-radius: 5px 5px 5px 5px;
@@ -80,26 +68,26 @@
80
  padding-top: 5px;
81
  padding-bottom: 5px;
82
  margin-bottom: 10px;
 
83
 
84
- .wprm-recipe-time-container {
85
- width: 33%;
86
- text-align: center;
87
- float: left;
88
- font-weight: bold;
89
- border-left: 1px solid #ccc;
90
 
91
- &:first-child {
92
- border-left: none;
93
- }
94
 
95
- .wprm-recipe-time-header {
96
- margin-bottom: 4px;
97
- }
98
 
99
- .wprm-recipe-time {
100
- font-size: 10px;
101
- font-weight: normal;
102
- }
103
  }
104
  }
105
 
2
  .wprm-print .wprm-recipe-tastefully-simple {
3
  font: 12px Verdana, Arial, Geneva, sans-serif;
4
  border: 1px dashed #666;
 
5
  padding: 10px;
 
6
 
7
  div,
8
  li,
36
  .wprm-recipe-rating {
37
  margin-bottom: 5px;
38
 
 
 
 
 
 
 
 
 
39
  .wprm-recipe-rating-details {
40
  font: 10px "Trebuchet MS",Arial,Helvetica,sans-serif;
41
  }
46
  text-align: center;
47
 
48
  .wprm-recipe-print {
 
 
49
  font-size: 11px;
50
  cursor: pointer;
51
  -webkit-border-radius: 5px 5px 5px 5px;
68
  padding-top: 5px;
69
  padding-bottom: 5px;
70
  margin-bottom: 10px;
71
+ }
72
 
73
+ .wprm-recipe-time-container {
74
+ width: 33%;
75
+ text-align: center;
76
+ float: left;
77
+ font-weight: bold;
78
+ border-left: 1px solid #ccc;
79
 
80
+ &:first-child {
81
+ border-left: none;
82
+ }
83
 
84
+ .wprm-recipe-time-header {
85
+ margin-bottom: 4px;
86
+ }
87
 
88
+ .wprm-recipe-time {
89
+ font-size: 10px;
90
+ font-weight: normal;
 
91
  }
92
  }
93
 
wp-recipe-maker.php CHANGED
@@ -15,7 +15,7 @@
15
  * Plugin Name: WP Recipe Maker
16
  * Plugin URI: http://bootstrapped.ventures/wp-recipe-maker/
17
  * Description: The easy and user-friendly recipe plugin for everyone. Automatic JSON-LD metadata for better SEO will get you more visitors!
18
- * Version: 1.9.1
19
  * Author: Bootstrapped Ventures
20
  * Author URI: http://bootstrapped.ventures/
21
  * License: GPL-2.0+
15
  * Plugin Name: WP Recipe Maker
16
  * Plugin URI: http://bootstrapped.ventures/wp-recipe-maker/
17
  * Description: The easy and user-friendly recipe plugin for everyone. Automatic JSON-LD metadata for better SEO will get you more visitors!
18
+ * Version: 1.10.0
19
  * Author: Bootstrapped Ventures
20
  * Author URI: http://bootstrapped.ventures/
21
  * License: GPL-2.0+