WP Recipe Maker - Version 1.12.0

Version Description

  • Feature: Print Credit message
  • Feature: Add existing recipe through modal
  • Feature: Import Yummly recipes
  • Feature: Import Yumprint Recipe Card recipes
  • Fix: Issue with shortcode preview displaying on the front-end
  • Fix: Prevent importing empty lines
  • Fix: Prevent datatable from outputting errors as alerts
  • Fix: Empty ingredient groups in text import
  • Fix: Text import unit issue in some languages
Download this release

Release Info

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

Code changes from version 1.11.0 to 1.12.0

assets/css/admin/faq.min.css CHANGED
@@ -1 +1 @@
1
- .wprm-faq p{max-width:650px}.wprm-faq ul{list-style-type:square}.wprm-faq .wprm-drip-form{margin:20px 0}.wprm-faq .wprm-drip-form input{width:100%;max-width:400px;margin:10px 0}.wprm-faq .wprm-drip-form input[type=submit]{max-width:250px;margin-bottom:0}.wprm-faq .wprm-drip-form .wprm-disclaimer{font-size:.8em}.wprm-badge{background:url(../../images/icon-128x128.png) center 20px no-repeat #fff;-webkit-background-size:128px 128px;background-size:128px 128px;color:#333;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:155px;height:25px;display:inline-block;width:150px;text-rendering:optimizeLegibility;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap .wprm-badge{position:absolute;top:0;right:0}@media only screen and (max-width:500px){.about-wrap .wprm-badge{position:relative;margin-bottom:1.5em;width:100%}}
1
+ .wprm-faq p{max-width:650px}.wprm-faq ul{list-style-type:square}.wprm-faq .wprm-drip-form{margin:20px 0}.wprm-faq .wprm-drip-form input{width:100%;max-width:400px;margin:10px 0}.wprm-faq .wprm-drip-form input[type=submit]{max-width:350px;margin-bottom:0}.wprm-faq .wprm-drip-form .wprm-disclaimer{font-size:.8em}.wprm-badge{background:url(../../images/icon-128x128.png) center 20px no-repeat #fff;-webkit-background-size:128px 128px;background-size:128px 128px;color:#333;font-size:14px;text-align:center;font-weight:600;margin:5px 0 0;padding-top:155px;height:25px;display:inline-block;width:150px;text-rendering:optimizeLegibility;-webkit-box-shadow:0 1px 3px rgba(0,0,0,.2);box-shadow:0 1px 3px rgba(0,0,0,.2)}.about-wrap .wprm-badge{position:absolute;top:0;right:0}@media only screen and (max-width:500px){.about-wrap .wprm-badge{position:relative;margin-bottom:1.5em;width:100%}}
assets/css/admin/faq.scss CHANGED
@@ -15,7 +15,7 @@
15
  margin: 10px 0;
16
 
17
  &[type=submit] {
18
- max-width: 250px;
19
  margin-bottom: 0;
20
  }
21
  }
15
  margin: 10px 0;
16
 
17
  &[type=submit] {
18
+ max-width: 350px;
19
  margin-bottom: 0;
20
  }
21
  }
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-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}
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;min-height:70px;font-size:14px}.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
@@ -23,6 +23,8 @@
23
  .wprm-manage-custom-taxonomies-actions-tooltip {
24
  text-align: right;
25
  min-width: 250px;
 
 
26
 
27
  .tooltip-header {
28
  margin-bottom: 5px;
23
  .wprm-manage-custom-taxonomies-actions-tooltip {
24
  text-align: right;
25
  min-width: 250px;
26
+ min-height: 70px;
27
+ font-size: 14px;
28
 
29
  .tooltip-header {
30
  margin-bottom: 5px;
assets/js/admin/manage.js CHANGED
@@ -46,6 +46,8 @@ jQuery(document).ready(function($) {
46
  });
47
 
48
  // Init datatable
 
 
49
  var wprm_datatable = jQuery('.wprm-manage-datatable').DataTable( {
50
  pageLength: 10,
51
  order: [ 0, 'desc' ],
46
  });
47
 
48
  // Init datatable
49
+ $.fn.dataTable.ext.errMode = 'throw';
50
+
51
  var wprm_datatable = jQuery('.wprm-manage-datatable').DataTable( {
52
  pageLength: 10,
53
  order: [ 0, 'desc' ],
assets/js/admin/recipe-form.js CHANGED
@@ -63,6 +63,16 @@ wprm_admin.edit_recipe = function() {
63
  }
64
  };
65
 
 
 
 
 
 
 
 
 
 
 
66
  wprm_admin.clear_recipe_fields = function() {
67
  // Recipe Details
68
  wprm_admin.remove_media_image(jQuery('.wprm-recipe-image-container'));
63
  }
64
  };
65
 
66
+ wprm_admin.insert_recipe = function() {
67
+ var id = parseInt(jQuery('#wprm-insert-recipe-id').val());
68
+ if(id != 0) {
69
+ var shortcode = '[wprm-recipe id="' + id + '"]';
70
+
71
+ wprm_admin.add_text_to_editor(shortcode);
72
+ wprm_admin.close_modal();
73
+ }
74
+ };
75
+
76
  wprm_admin.clear_recipe_fields = function() {
77
  // Recipe Details
78
  wprm_admin.remove_media_image(jQuery('.wprm-recipe-image-container'));
assets/js/admin/shortcode-tinymce.js CHANGED
@@ -35,7 +35,7 @@
35
  content = content.replace(/<p><span class="wprm-(?=(.*?span>))\1\s*<\/p>/g, '');
36
  content = content.replace(/<span class="wprm-.*?span>/g, '');
37
 
38
- return content.replace(/(?:<p(?: [^>]+)?>)*(<div [^>]+>.*?<\/div>)(?:<\/p>)*/g, function(match, div) {
39
  var data = getAttr(div, 'data-wprm-shortcode');
40
 
41
  if (data) {
35
  content = content.replace(/<p><span class="wprm-(?=(.*?span>))\1\s*<\/p>/g, '');
36
  content = content.replace(/<span class="wprm-.*?span>/g, '');
37
 
38
+ return content.replace(/(?:<p(?: [^>]+)?>)*(<div [^>]+>[\s\S]*?<\/div>)(?:<\/p>)*/g, function(match, div) {
39
  var data = getAttr(div, 'data-wprm-shortcode');
40
 
41
  if (data) {
includes/admin/class-wprm-recipe-parser.php CHANGED
@@ -42,12 +42,15 @@ class WPRM_Recipe_Parser {
42
  foreach ( $ingredients as $ingredient_or_group ) {
43
  if ( isset( $ingredient_or_group['raw'] ) ) {
44
  $parsed_ingredients[] = self::parse_ingredient( $ingredient_or_group['raw'] );
45
- } elseif ( isset( $ingredient_or_group['ingredients'] ) ) {
46
  $parsed_group_ingredients = array();
47
 
48
- foreach ( $ingredient_or_group['ingredients'] as $ingredient ) {
49
- $parsed_group_ingredients[] = self::parse_ingredient( $ingredient['raw'] );
 
 
50
  }
 
51
  $parsed_ingredients[] = array(
52
  'name' => $ingredient_or_group['name'],
53
  'ingredients' => $parsed_group_ingredients,
@@ -97,7 +100,12 @@ class WPRM_Recipe_Parser {
97
  $unit = '';
98
 
99
  $possible_units = self::parse_ingredient_units();
100
- $possible_units = array_map( 'preg_quote', $possible_units );
 
 
 
 
 
101
  $pattern = '/\b' . implode( '\b|\b', $possible_units ) . '\b/i';
102
  preg_match( $pattern, $raw, $match );
103
  if ( isset( $match[0] ) ) {
42
  foreach ( $ingredients as $ingredient_or_group ) {
43
  if ( isset( $ingredient_or_group['raw'] ) ) {
44
  $parsed_ingredients[] = self::parse_ingredient( $ingredient_or_group['raw'] );
45
+ } elseif ( isset( $ingredient_or_group['name'] ) ) {
46
  $parsed_group_ingredients = array();
47
 
48
+ if ( isset( $ingredient_or_group['ingredients'] ) ) {
49
+ foreach ( $ingredient_or_group['ingredients'] as $ingredient ) {
50
+ $parsed_group_ingredients[] = self::parse_ingredient( $ingredient['raw'] );
51
+ }
52
  }
53
+
54
  $parsed_ingredients[] = array(
55
  'name' => $ingredient_or_group['name'],
56
  'ingredients' => $parsed_group_ingredients,
100
  $unit = '';
101
 
102
  $possible_units = self::parse_ingredient_units();
103
+
104
+ // Can't use array_map because of parameter.
105
+ foreach ( $possible_units as $index => $value ) {
106
+ $possible_units[ $index ] = preg_quote( $value, '/' );
107
+ }
108
+
109
  $pattern = '/\b' . implode( '\b|\b', $possible_units ) . '\b/i';
110
  preg_match( $pattern, $raw, $match );
111
  if ( isset( $match[0] ) ) {
includes/admin/import/class-wprm-import-bigoven.php CHANGED
@@ -160,7 +160,7 @@ class WPRM_Import_Bigoven extends WPRM_Import {
160
  $bo_ingredients = preg_split( '/$\R?^/m', $bo_recipe['ingredients'] );
161
 
162
  foreach ( $bo_ingredients as $bo_ingredient ) {
163
- $bo_ingredient = $this->derichify( $bo_ingredient );
164
 
165
  if ( '!' === substr( $bo_ingredient, 0, 1 ) ) {
166
  $ingredients[] = $group;
@@ -195,7 +195,7 @@ class WPRM_Import_Bigoven extends WPRM_Import {
195
  );
196
  } else {
197
  $group['instructions'][] = array(
198
- 'text' => $this->richify( $bo_instruction ),
199
  );
200
  }
201
  }
160
  $bo_ingredients = preg_split( '/$\R?^/m', $bo_recipe['ingredients'] );
161
 
162
  foreach ( $bo_ingredients as $bo_ingredient ) {
163
+ $bo_ingredient = trim( $this->derichify( $bo_ingredient ) );
164
 
165
  if ( '!' === substr( $bo_ingredient, 0, 1 ) ) {
166
  $ingredients[] = $group;
195
  );
196
  } else {
197
  $group['instructions'][] = array(
198
+ 'text' => trim( $this->richify( $bo_instruction ) ),
199
  );
200
  }
201
  }
includes/admin/import/class-wprm-import-mealplannerpro.php CHANGED
@@ -171,7 +171,7 @@ class WPRM_Import_Mealplannerpro extends WPRM_Import {
171
  $mpp_ingredients = preg_split( '/$\R?^/m', $mpp_recipe->ingredients );
172
 
173
  foreach ( $mpp_ingredients as $mpp_ingredient ) {
174
- $mpp_ingredient = $this->derichify( $mpp_ingredient );
175
 
176
  if ( '!' === substr( $mpp_ingredient, 0, 1 ) ) {
177
  $ingredients[] = $group;
@@ -206,7 +206,7 @@ class WPRM_Import_Mealplannerpro extends WPRM_Import {
206
  );
207
  } else {
208
  $group['instructions'][] = array(
209
- 'text' => $this->richify( $mpp_instruction ),
210
  );
211
  }
212
  }
171
  $mpp_ingredients = preg_split( '/$\R?^/m', $mpp_recipe->ingredients );
172
 
173
  foreach ( $mpp_ingredients as $mpp_ingredient ) {
174
+ $mpp_ingredient = trim( $this->derichify( $mpp_ingredient ) );
175
 
176
  if ( '!' === substr( $mpp_ingredient, 0, 1 ) ) {
177
  $ingredients[] = $group;
206
  );
207
  } else {
208
  $group['instructions'][] = array(
209
+ 'text' => trim( $this->richify( $mpp_instruction ) ),
210
  );
211
  }
212
  }
includes/admin/import/class-wprm-import-recipecard.php ADDED
@@ -0,0 +1,300 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Responsible for importing Recipe Card recipes.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.12.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/includes/admin/import
10
+ */
11
+
12
+ /**
13
+ * Responsible for importing Recipe Card recipes.
14
+ *
15
+ * @since 1.12.0
16
+ * @package WP_Recipe_Maker
17
+ * @subpackage WP_Recipe_Maker/includes/admin/import
18
+ * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19
+ */
20
+ class WPRM_Import_Recipecard extends WPRM_Import {
21
+ /**
22
+ * Get the UID of this import source.
23
+ *
24
+ * @since 1.12.0
25
+ */
26
+ public function get_uid() {
27
+ return 'recipecard';
28
+ }
29
+
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.12.0
34
+ */
35
+ public function requires_search() {
36
+ return false;
37
+ }
38
+
39
+ /**
40
+ * Get the name of this import source.
41
+ *
42
+ * @since 1.12.0
43
+ */
44
+ public function get_name() {
45
+ return 'Recipe Card';
46
+ }
47
+
48
+ /**
49
+ * Get HTML for the import settings.
50
+ *
51
+ * @since 1.12.0
52
+ */
53
+ public function get_settings_html() {
54
+ return '';
55
+ }
56
+
57
+ /**
58
+ * Get the total number of recipes to import.
59
+ *
60
+ * @since 1.12.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.12.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;
76
+ $rc_recipes = $wpdb->get_results( 'SELECT id, recipe, post_id FROM ' . $wpdb->prefix . 'yumprint_recipe_recipe' );
77
+
78
+ foreach ( $rc_recipes as $rc_recipe ) {
79
+ if ( WPRM_POST_TYPE !== get_post_type( $rc_recipe->post_id ) ) {
80
+ $recipe = json_decode( $rc_recipe->recipe );
81
+
82
+ $recipes[ $rc_recipe->id ] = array(
83
+ 'name' => $recipe->title,
84
+ 'url' => get_edit_post_link( $rc_recipe->post_id ),
85
+ );
86
+ }
87
+ }
88
+
89
+ return $recipes;
90
+ }
91
+
92
+ /**
93
+ * Get recipe with the specified ID in the import format.
94
+ *
95
+ * @since 1.12.0
96
+ * @param mixed $id ID of the recipe we want to import.
97
+ * @param array $post_data POST data passed along when submitting the form.
98
+ */
99
+ public function get_recipe( $id, $post_data ) {
100
+ global $wpdb;
101
+ $rc_raw_recipe = $wpdb->get_row( 'SELECT id, recipe, nutrition, post_id FROM ' . $wpdb->prefix . 'yumprint_recipe_recipe WHERE id=' . $id );
102
+ $post_id = $rc_raw_recipe->post_id;
103
+
104
+ $rc_recipe = json_decode( $rc_raw_recipe->recipe );
105
+
106
+ $recipe = array(
107
+ 'import_id' => 0, // Set to 0 because we need to create a new recipe post.
108
+ 'import_backup' => array(
109
+ 'rc_recipe_id' => $id,
110
+ 'rc_post_id' => $post_id,
111
+ ),
112
+ );
113
+
114
+ // Featured Image.
115
+ if ( $rc_recipe->image ) {
116
+ $image_id = $this->get_or_upload_attachment( $post_id, $rc_recipe->image );
117
+
118
+ if ( $image_id ) {
119
+ $recipe['image_id'] = $image_id;
120
+ }
121
+ }
122
+
123
+ // Simple Matching.
124
+ $recipe['name'] = $rc_recipe->title;
125
+ $recipe['summary'] = $rc_recipe->summary;
126
+ $recipe['prep_time'] = $rc_recipe->prepTime;
127
+ $recipe['cook_time'] = $rc_recipe->cookTime;
128
+ $recipe['total_time'] = $rc_recipe->totalTime;
129
+ $recipe['servings'] = $rc_recipe->servings;
130
+ $recipe['servings_unit'] = '';
131
+
132
+ // Recipe Author.
133
+ $recipe['author_name'] = $rc_recipe->author;
134
+
135
+ if ( '' !== trim( $recipe['author_name'] ) ) {
136
+ $recipe['author_display'] = 'custom';
137
+ }
138
+
139
+ // Ingredients.
140
+ $ingredients = array();
141
+
142
+ if ( isset( $rc_recipe->ingredients ) && is_array( $rc_recipe->ingredients ) ) {
143
+ foreach ( $rc_recipe->ingredients as $rc_ingredient_group ) {
144
+ $group = array(
145
+ 'ingredients' => array(),
146
+ 'name' => $rc_ingredient_group->title,
147
+ );
148
+
149
+ foreach ( $rc_ingredient_group->lines as $rc_ingredient ) {
150
+ $group['ingredients'][] = array(
151
+ 'raw' => $rc_ingredient,
152
+ );
153
+ }
154
+ $ingredients[] = $group;
155
+ }
156
+ }
157
+
158
+ $recipe['ingredients'] = $ingredients;
159
+
160
+ // Instructions.
161
+ $instructions = array();
162
+
163
+ if ( isset( $rc_recipe->directions ) && is_array( $rc_recipe->directions ) ) {
164
+ foreach ( $rc_recipe->directions as $rc_instruction_group ) {
165
+ $group = array(
166
+ 'instructions' => array(),
167
+ 'name' => $rc_instruction_group->title,
168
+ );
169
+
170
+ foreach ( $rc_instruction_group->lines as $rc_instruction ) {
171
+ $group['instructions'][] = array(
172
+ 'raw' => $rc_instruction,
173
+ );
174
+ }
175
+ $instructions[] = $group;
176
+ }
177
+ }
178
+
179
+ $recipe['instructions'] = $instructions;
180
+
181
+ // Recipe Notes.
182
+ $notes = '';
183
+
184
+ if ( isset( $rc_recipe->notes ) && is_array( $rc_recipe->notes ) ) {
185
+ foreach ( $rc_recipe->notes as $rc_note_group ) {
186
+ if ( $rc_note_group->title ) {
187
+ if ( $notes ) {
188
+ $notes .= '<br/>';
189
+ }
190
+ $notes .= $rc_note_group->title . ':<br/>';
191
+ }
192
+
193
+ foreach ( $rc_note_group->lines as $rc_note ) {
194
+ $notes .= $rc_note . '<br/>';
195
+ }
196
+ }
197
+ }
198
+
199
+ $recipe['notes'] = $notes;
200
+
201
+ return $recipe;
202
+ }
203
+
204
+ /**
205
+ * Replace the original recipe with the newly imported WPRM one.
206
+ *
207
+ * @since 1.12.0
208
+ * @param mixed $id ID of the recipe we want replace.
209
+ * @param mixed $wprm_id ID of the WPRM recipe to replace with.
210
+ * @param array $post_data POST data passed along when submitting the form.
211
+ */
212
+ public function replace_recipe( $id, $wprm_id, $post_data ) {
213
+ global $wpdb;
214
+ $rc_recipe = $wpdb->get_row( 'SELECT post_id FROM ' . $wpdb->prefix . 'yumprint_recipe_recipe WHERE id=' . $id );
215
+ $post_id = $rc_recipe->post_id;
216
+
217
+ // Update post_id field to show that this recipe has been imported.
218
+ $wpdb->update( $wpdb->prefix . 'yumprint_recipe_recipe', array( 'post_id' => $wprm_id ), array( 'id' => $id ), array( '%d' ), array( '%d' ) );
219
+
220
+ $post = get_post( $post_id );
221
+ $content = $post->post_content;
222
+
223
+ $content = preg_replace( "/\[yumprint-recipe\s.*?id='?\"?" . $id . '.*?]/im', '[wprm-recipe id="' . $wprm_id . '"]', $content );
224
+
225
+ $update_content = array(
226
+ 'ID' => $post_id,
227
+ 'post_content' => $content,
228
+ );
229
+ wp_update_post( $update_content );
230
+ }
231
+
232
+ /**
233
+ * Get image attachment ID from a given URL or sideload the image if not on the website.
234
+ *
235
+ * @since 1.12.0
236
+ * @param int $post_id Post to associate the image with.
237
+ * @param mixed $url Image URL.
238
+ */
239
+ private function get_or_upload_attachment( $post_id, $url ) {
240
+ $url = str_replace( array( "\n", "\t", "\r" ), '', $url );
241
+ $image_id = $this->get_attachment_id_from_url( $url );
242
+
243
+ if ( $image_id ) {
244
+ return $image_id;
245
+ } else {
246
+ $media = media_sideload_image( $url, $post_id );
247
+
248
+ $attachments = get_posts( array(
249
+ 'numberposts' => '1',
250
+ 'post_parent' => $post_id,
251
+ 'post_type' => 'attachment',
252
+ 'post_mime_type' => 'image',
253
+ 'orderby' => 'post_date',
254
+ 'order' => 'DESC',
255
+ )
256
+ );
257
+
258
+ if ( count( $attachments ) > 0 ) {
259
+ return $attachments[0]->ID;
260
+ }
261
+ }
262
+
263
+ return false;
264
+ }
265
+
266
+ /**
267
+ * Get image attachment ID from a given URL.
268
+ * Source: https://philipnewcomer.net/2012/11/get-the-attachment-id-from-an-image-url-in-wordpress/
269
+ *
270
+ * @since 1.12.0
271
+ * @param mixed $attachment_url Image URL.
272
+ */
273
+ private function get_attachment_id_from_url( $attachment_url = '' ) {
274
+ global $wpdb;
275
+ $attachment_id = false;
276
+
277
+ // If there is no url, return.
278
+ if ( '' === $attachment_url ) {
279
+ return;
280
+ }
281
+
282
+ // Get the upload directory paths.
283
+ $upload_dir_paths = wp_upload_dir();
284
+
285
+ // Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image.
286
+ if ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {
287
+
288
+ // If this is the URL of an auto-generated thumbnail, get the URL of the original image.
289
+ $attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );
290
+
291
+ // Remove the upload path base directory from the attachment URL.
292
+ $attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );
293
+
294
+ // Finally, run a custom database query to get the attachment ID from the modified attachment URL.
295
+ $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) ); // @codingStandardsIgnoreLine
296
+ }
297
+
298
+ return $attachment_id;
299
+ }
300
+ }
includes/admin/import/class-wprm-import-yummly.php ADDED
@@ -0,0 +1,426 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Responsible for importing Yummly recipes.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.12.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/includes/admin/import
10
+ */
11
+
12
+ /**
13
+ * Responsible for importing Yummly recipes.
14
+ *
15
+ * @since 1.12.0
16
+ * @package WP_Recipe_Maker
17
+ * @subpackage WP_Recipe_Maker/includes/admin/import
18
+ * @author Brecht Vandersmissen <brecht@bootstrapped.ventures>
19
+ */
20
+ class WPRM_Import_Yummly extends WPRM_Import {
21
+ /**
22
+ * Get the UID of this import source.
23
+ *
24
+ * @since 1.12.0
25
+ */
26
+ public function get_uid() {
27
+ return 'yummly';
28
+ }
29
+
30
+ /**
31
+ * Wether or not this importer requires a manual search for recipes.
32
+ *
33
+ * @since 1.12.0
34
+ */
35
+ public function requires_search() {
36
+ return false;
37
+ }
38
+
39
+ /**
40
+ * Get the name of this import source.
41
+ *
42
+ * @since 1.12.0
43
+ */
44
+ public function get_name() {
45
+ return 'Yummly';
46
+ }
47
+
48
+ /**
49
+ * Get HTML for the import settings.
50
+ *
51
+ * @since 1.12.0
52
+ */
53
+ public function get_settings_html() {
54
+ return '';
55
+ }
56
+
57
+ /**
58
+ * Get the total number of recipes to import.
59
+ *
60
+ * @since 1.12.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.12.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;
76
+ $yum_recipes = $wpdb->get_results( 'SELECT recipe_id, post_id, recipe_title FROM ' . $wpdb->prefix . 'amd_yrecipe_recipes' );
77
+
78
+ foreach ( $yum_recipes as $yum_recipe ) {
79
+ if ( WPRM_POST_TYPE !== get_post_type( $yum_recipe->post_id ) ) {
80
+ $recipes[ $yum_recipe->recipe_id ] = array(
81
+ 'name' => $yum_recipe->recipe_title,
82
+ 'url' => get_edit_post_link( $yum_recipe->post_id ),
83
+ );
84
+ }
85
+ }
86
+
87
+ return $recipes;
88
+ }
89
+
90
+ /**
91
+ * Get recipe with the specified ID in the import format.
92
+ *
93
+ * @since 1.12.0
94
+ * @param mixed $id ID of the recipe we want to import.
95
+ * @param array $post_data POST data passed along when submitting the form.
96
+ */
97
+ public function get_recipe( $id, $post_data ) {
98
+ global $wpdb;
99
+ $yum_recipe = $wpdb->get_row( 'SELECT * FROM ' . $wpdb->prefix . 'amd_yrecipe_recipes WHERE recipe_id=' . $id );
100
+ $post_id = $yum_recipe->post_id;
101
+
102
+ $recipe = array(
103
+ 'import_id' => 0, // Set to 0 because we need to create a new recipe post.
104
+ 'import_backup' => array(
105
+ 'yum_recipe_id' => $id,
106
+ 'yum_post_id' => $post_id,
107
+ ),
108
+ );
109
+
110
+ // Featured Image.
111
+ if ( $yum_recipe->recipe_image ) {
112
+ $image_id = $this->get_or_upload_attachment( $post_id, $yum_recipe->recipe_image );
113
+
114
+ if ( $image_id ) {
115
+ $recipe['image_id'] = $image_id;
116
+ }
117
+ }
118
+
119
+ // Simple Matching.
120
+ $recipe['name'] = $yum_recipe->recipe_title;
121
+ $recipe['summary'] = $this->richify( $yum_recipe->summary );
122
+ $recipe['notes'] = $this->richify( $yum_recipe->notes );
123
+
124
+ // Servings.
125
+ $match = preg_match( '/^\s*\d+/', $yum_recipe->yield, $servings_array );
126
+ if ( 1 === $match ) {
127
+ $servings = str_replace( ' ','', $servings_array[0] );
128
+ } else {
129
+ $servings = '';
130
+ }
131
+
132
+ $servings_unit = preg_replace( '/^\s*\d+\s*/', '', $yum_recipe->yield );
133
+
134
+ $recipe['servings'] = $servings;
135
+ $recipe['servings_unit'] = $servings_unit;
136
+
137
+ // Recipe Times.
138
+ $recipe['prep_time'] = $yum_recipe->prep_time ? $this->time_to_minutes( $yum_recipe->prep_time ) : 0;
139
+ $recipe['cook_time'] = $yum_recipe->cook_time ? $this->time_to_minutes( $yum_recipe->cook_time ) : 0;
140
+ $recipe['total_time'] = $yum_recipe->total_time ? $this->time_to_minutes( $yum_recipe->total_time ) : 0;
141
+
142
+ // Ingredients.
143
+ $ingredients = array();
144
+ $group = array(
145
+ 'ingredients' => array(),
146
+ 'name' => '',
147
+ );
148
+
149
+ $yum_ingredients = preg_split( '/$\R?^/m', $yum_recipe->ingredients );
150
+
151
+ foreach ( $yum_ingredients as $yum_ingredient ) {
152
+ $yum_ingredient = trim( $this->derichify( $yum_ingredient ) );
153
+
154
+ if ( '!' === substr( $yum_ingredient, 0, 1 ) ) {
155
+ $ingredients[] = $group;
156
+ $group = array(
157
+ 'ingredients' => array(),
158
+ 'name' => substr( $yum_ingredient, 1 ),
159
+ );
160
+ } elseif ( '%' !== substr( $yum_ingredient, 0, 1 ) ) {
161
+ $group['ingredients'][] = array(
162
+ 'raw' => $yum_ingredient,
163
+ );
164
+ }
165
+ }
166
+ $ingredients[] = $group;
167
+ $recipe['ingredients'] = $ingredients;
168
+
169
+ // Instructions.
170
+ $instructions = array();
171
+ $group = array(
172
+ 'instructions' => array(),
173
+ 'name' => '',
174
+ );
175
+
176
+ $yum_instructions = preg_split( '/$\R?^/m', $yum_recipe->instructions );
177
+
178
+ foreach ( $yum_instructions as $yum_instruction ) {
179
+ $yum_instruction = trim( str_replace( array( "\n", "\t", "\r" ), '', $yum_instruction ) );
180
+
181
+ if ( '!' === substr( $yum_instruction, 0, 1 ) ) {
182
+ $instructions[] = $group;
183
+ $group = array(
184
+ 'instructions' => array(),
185
+ 'name' => $this->derichify( substr( $yum_instruction, 1 ) ),
186
+ );
187
+ } elseif ( '%' === substr( $yum_instruction, 0, 1 ) ) {
188
+ $image_id = $this->get_or_upload_attachment( $post_id, substr( $yum_instruction, 1 ) );
189
+
190
+ if ( $image_id ) {
191
+ $last_instruction = array_pop( $group['instructions'] );
192
+
193
+ if ( ! $last_instruction ) {
194
+ $group['instructions'][] = array(
195
+ 'image' => $image_id,
196
+ );
197
+ } elseif ( isset( $last_instruction['image'] ) && $last_instruction['image'] ) {
198
+ $group['instructions'][] = $last_instruction;
199
+ $group['instructions'][] = array(
200
+ 'image' => $image_id,
201
+ );
202
+ } else {
203
+ $group['instructions'][] = array(
204
+ 'text' => $last_instruction['text'],
205
+ 'image' => $image_id,
206
+ );
207
+ }
208
+ }
209
+ } else {
210
+ $group['instructions'][] = array(
211
+ 'text' => $this->richify( $yum_instruction ),
212
+ );
213
+ }
214
+ }
215
+ $instructions[] = $group;
216
+ $recipe['instructions'] = $instructions;
217
+
218
+ // Nutrition Facts.
219
+ $recipe['nutrition'] = array();
220
+
221
+ $nutrition_mapping = array(
222
+ 'serving_size' => 'serving_size',
223
+ 'calories' => 'calories',
224
+ 'fat' => 'fat',
225
+ );
226
+
227
+ foreach ( $nutrition_mapping as $yum_field => $wprm_field ) {
228
+ if ( $yum_recipe->$yum_field ) {
229
+ $recipe['nutrition'][ $wprm_field ] = trim( $yum_recipe->$yum_field );
230
+ }
231
+ }
232
+
233
+ return $recipe;
234
+ }
235
+
236
+ /**
237
+ * Replace the original recipe with the newly imported WPRM one.
238
+ *
239
+ * @since 1.12.0
240
+ * @param mixed $id ID of the recipe we want replace.
241
+ * @param mixed $wprm_id ID of the WPRM recipe to replace with.
242
+ * @param array $post_data POST data passed along when submitting the form.
243
+ */
244
+ public function replace_recipe( $id, $wprm_id, $post_data ) {
245
+ global $wpdb;
246
+ $yum_recipe = $wpdb->get_row( 'SELECT post_id FROM ' . $wpdb->prefix . 'amd_yrecipe_recipes WHERE recipe_id=' . $id );
247
+ $post_id = $yum_recipe->post_id;
248
+
249
+ // Update post_id field to show that this recipe has been imported.
250
+ $wpdb->update( $wpdb->prefix . 'amd_yrecipe_recipes', array( 'post_id' => $wprm_id ), array( 'recipe_id' => $id ), array( '%d' ), array( '%d' ) );
251
+
252
+ $post = get_post( $post_id );
253
+ $content = $post->post_content;
254
+
255
+ $content = $this->replace_shortcode( $content, '[wprm-recipe id="' . $wprm_id . '"]' );
256
+
257
+ $update_content = array(
258
+ 'ID' => $post_id,
259
+ 'post_content' => $content,
260
+ );
261
+ wp_update_post( $update_content );
262
+ }
263
+
264
+ /**
265
+ * Helper function to replace the Yummly shortcode.
266
+ *
267
+ * @since 1.12.0
268
+ * @param mixed $post_text Text to find the shortcode in.
269
+ * @param mixed $replacement Text to replace the shortcode with.
270
+ */
271
+ private function replace_shortcode( $post_text, $replacement ) {
272
+ $output = $post_text;
273
+
274
+ $needle_old = 'id="amd-yrecipe-recipe-';
275
+ $preg_needle_old = '/(id)=("(amd-yrecipe-recipe-)[0-9^"]*")/i';
276
+ $needle = '[amd-yrecipe-recipe:';
277
+ $preg_needle = '/\[amd-yrecipe-recipe:([0-9]+)\]/i';
278
+
279
+ if ( strpos( $post_text, $needle_old ) !== false ) {
280
+ preg_match_all( $preg_needle_old, $post_text, $matches );
281
+ foreach ( $matches[0] as $match ) {
282
+ $recipe_id = str_replace( 'id="amd-yrecipe-recipe-', '', $match );
283
+ $recipe_id = str_replace( '"', '', $recipe_id );
284
+ $output = preg_replace( "/<img id=\"amd-yrecipe-recipe-" . $recipe_id . "\" class=\"amd-yrecipe-recipe\" src=\"[^\"]*\" alt=\"\" \/>/", $replacement, $output );
285
+ }
286
+ }
287
+
288
+ if ( strpos( $post_text, $needle ) !== false ) {
289
+ preg_match_all( $preg_needle, $post_text, $matches );
290
+ foreach ( $matches[0] as $match ) {
291
+ $recipe_id = str_replace( '[amd-yrecipe-recipe:', '', $match );
292
+ $recipe_id = str_replace( ']', '', $recipe_id );
293
+ $output = str_replace( '[amd-yrecipe-recipe:' . $recipe_id . ']', $replacement, $output );
294
+ }
295
+ }
296
+
297
+ return $output;
298
+ }
299
+
300
+ /**
301
+ * Richify text by adding links and styling.
302
+ * Source: Yummly.
303
+ *
304
+ * @since 1.12.0
305
+ * @param mixed $text Text to richify.
306
+ */
307
+ private function richify( $text ) {
308
+ $text = preg_replace( '/(^|\s)\*([^\s\*][^\*]*[^\s\*]|[^\s\*])\*(\W|$)/', '\\1<strong>\\2</strong>\\3', $text );
309
+ $text = preg_replace( '/(^|\s)_([^\s_][^_]*[^\s_]|[^\s_])_(\W|$)/', '\\1<em>\\2</em>\\3', $text );
310
+ $text = preg_replace( '/\[([^\]\|\[]*)\|([^\]\|\[]*)\]/', '<a href="\\2" target="_blank">\\1</a>', $text );
311
+
312
+ return $text;
313
+ }
314
+
315
+ /**
316
+ * Derichify text by removing links and styling.
317
+ *
318
+ * @since 1.12.0
319
+ * @param mixed $text Text to derichify.
320
+ */
321
+ private function derichify( $text ) {
322
+ $text = preg_replace( '/(^|\s)\*([^\s\*][^\*]*[^\s\*]|[^\s\*])\*(\W|$)/', '\\1\\2\\3', $text );
323
+ $text = preg_replace( '/(^|\s)_([^\s_][^_]*[^\s_]|[^\s_])_(\W|$)/', '\\1\\2\\3', $text );
324
+ $text = preg_replace( '/\[([^\]\|\[]*)\|([^\]\|\[]*)\]/', '\\1', $text );
325
+
326
+ return $text;
327
+ }
328
+
329
+ /**
330
+ * Convert time metadata to minutes.
331
+ *
332
+ * @since 1.12.0
333
+ * @param mixed $duration Time to convert.
334
+ */
335
+ private function time_to_minutes( $duration = 'PT' ) {
336
+ $date_abbr = array(
337
+ 'd' => 60 * 24,
338
+ 'h' => 60,
339
+ 'i' => 1,
340
+ );
341
+ $result = 0;
342
+
343
+ $arr = explode( 'T', $duration );
344
+ if ( isset( $arr[1] ) ) {
345
+ $arr[1] = str_replace( 'M', 'I', $arr[1] );
346
+ }
347
+ $duration = implode( 'T', $arr );
348
+
349
+ foreach ( $date_abbr as $abbr => $time ) {
350
+ if ( preg_match( '/(\d+)' . $abbr . '/i', $duration, $val ) ) {
351
+ $result += intval( $val[1] ) * $time;
352
+ }
353
+ }
354
+
355
+ return $result;
356
+ }
357
+
358
+ /**
359
+ * Get image attachment ID from a given URL or sideload the image if not on the website.
360
+ *
361
+ * @since 1.12.0
362
+ * @param int $post_id Post to associate the image with.
363
+ * @param mixed $url Image URL.
364
+ */
365
+ private function get_or_upload_attachment( $post_id, $url ) {
366
+ $url = str_replace( array( "\n", "\t", "\r" ), '', $url );
367
+ $image_id = $this->get_attachment_id_from_url( $url );
368
+
369
+ if ( $image_id ) {
370
+ return $image_id;
371
+ } else {
372
+ $media = media_sideload_image( $url, $post_id );
373
+
374
+ $attachments = get_posts( array(
375
+ 'numberposts' => '1',
376
+ 'post_parent' => $post_id,
377
+ 'post_type' => 'attachment',
378
+ 'post_mime_type' => 'image',
379
+ 'orderby' => 'post_date',
380
+ 'order' => 'DESC',
381
+ )
382
+ );
383
+
384
+ if ( count( $attachments ) > 0 ) {
385
+ return $attachments[0]->ID;
386
+ }
387
+ }
388
+
389
+ return false;
390
+ }
391
+
392
+ /**
393
+ * Get image attachment ID from a given URL.
394
+ * Source: https://philipnewcomer.net/2012/11/get-the-attachment-id-from-an-image-url-in-wordpress/
395
+ *
396
+ * @since 1.12.0
397
+ * @param mixed $attachment_url Image URL.
398
+ */
399
+ private function get_attachment_id_from_url( $attachment_url = '' ) {
400
+ global $wpdb;
401
+ $attachment_id = false;
402
+
403
+ // If there is no url, return.
404
+ if ( '' === $attachment_url ) {
405
+ return;
406
+ }
407
+
408
+ // Get the upload directory paths.
409
+ $upload_dir_paths = wp_upload_dir();
410
+
411
+ // Make sure the upload path base directory exists in the attachment URL, to verify that we're working with a media library image.
412
+ if ( false !== strpos( $attachment_url, $upload_dir_paths['baseurl'] ) ) {
413
+
414
+ // If this is the URL of an auto-generated thumbnail, get the URL of the original image.
415
+ $attachment_url = preg_replace( '/-\d+x\d+(?=\.(jpg|jpeg|png|gif)$)/i', '', $attachment_url );
416
+
417
+ // Remove the upload path base directory from the attachment URL.
418
+ $attachment_url = str_replace( $upload_dir_paths['baseurl'] . '/', '', $attachment_url );
419
+
420
+ // Finally, run a custom database query to get the attachment ID from the modified attachment URL.
421
+ $attachment_id = $wpdb->get_var( $wpdb->prepare( "SELECT wposts.ID FROM $wpdb->posts wposts, $wpdb->postmeta wpostmeta WHERE wposts.ID = wpostmeta.post_id AND wpostmeta.meta_key = '_wp_attached_file' AND wpostmeta.meta_value = '%s' AND wposts.post_type = 'attachment'", $attachment_url ) ); // @codingStandardsIgnoreLine
422
+ }
423
+
424
+ return $attachment_id;
425
+ }
426
+ }
includes/admin/import/class-wprm-import-ziplist.php CHANGED
@@ -149,7 +149,7 @@ class WPRM_Import_Ziplist extends WPRM_Import {
149
  $zl_ingredients = preg_split( '/$\R?^/m', $zl_recipe->ingredients );
150
 
151
  foreach ( $zl_ingredients as $zl_ingredient ) {
152
- $zl_ingredient = $this->derichify( $zl_ingredient );
153
 
154
  if ( '!' === substr( $zl_ingredient, 0, 1 ) ) {
155
  $ingredients[] = $group;
@@ -176,7 +176,7 @@ class WPRM_Import_Ziplist extends WPRM_Import {
176
  $zl_instructions = preg_split( '/$\R?^/m', $zl_recipe->instructions );
177
 
178
  foreach ( $zl_instructions as $zl_instruction ) {
179
- $zl_instructionurl = str_replace( array( "\n", "\t", "\r" ), '', $zl_instructionurl );
180
 
181
  if ( '!' === substr( $zl_instruction, 0, 1 ) ) {
182
  $instructions[] = $group;
149
  $zl_ingredients = preg_split( '/$\R?^/m', $zl_recipe->ingredients );
150
 
151
  foreach ( $zl_ingredients as $zl_ingredient ) {
152
+ $zl_ingredient = trim( $this->derichify( $zl_ingredient ) );
153
 
154
  if ( '!' === substr( $zl_ingredient, 0, 1 ) ) {
155
  $ingredients[] = $group;
176
  $zl_instructions = preg_split( '/$\R?^/m', $zl_recipe->instructions );
177
 
178
  foreach ( $zl_instructions as $zl_instruction ) {
179
+ $zl_instruction = trim( str_replace( array( "\n", "\t", "\r" ), '', $zl_instruction ) );
180
 
181
  if ( '!' === substr( $zl_instruction, 0, 1 ) ) {
182
  $instructions[] = $group;
includes/admin/modal/class-wprm-modal.php CHANGED
@@ -162,6 +162,20 @@ class WPRM_Modal {
162
  ),
163
  'default_tab' => 'edit-recipe-select',
164
  ),
 
 
 
 
 
 
 
 
 
 
 
 
 
 
165
  'recipe-snippets' => array(
166
  'order' => 200,
167
  'label' => __( 'Recipe Snippets', 'wp-recipe-maker' ),
162
  ),
163
  'default_tab' => 'edit-recipe-select',
164
  ),
165
+ 'insert-recipe' => array(
166
+ 'order' => 120,
167
+ 'label' => __( 'Insert Recipe', 'wp-recipe-maker' ),
168
+ 'tabs' => array(
169
+ 'insert-recipe-select' => array(
170
+ 'order' => 100,
171
+ 'label' => __( 'Insert Recipe', 'wp-recipe-maker' ),
172
+ 'template' => WPRM_DIR . 'templates/admin/modal/tabs/insert-recipe.php',
173
+ 'callback' => 'insert_recipe',
174
+ 'button' => __( 'Insert', 'wp-recipe-maker' ),
175
+ ),
176
+ ),
177
+ 'default_tab' => 'insert-recipe-select',
178
+ ),
179
  'recipe-snippets' => array(
180
  'order' => 200,
181
  'label' => __( 'Recipe Snippets', 'wp-recipe-maker' ),
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.11.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__ ) ) );
31
  * @since 1.0.0
32
  */
33
  private function define_constants() {
34
+ define( 'WPRM_VERSION', '1.12.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__ ) ) );
includes/public/class-wprm-print.php CHANGED
@@ -30,6 +30,8 @@ class WPRM_Print {
30
  add_action( 'wp_ajax_nopriv_wprm_print_recipe', array( __CLASS__, 'ajax_print_recipe' ) );
31
 
32
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
 
 
33
  }
34
 
35
  /**
@@ -59,6 +61,7 @@ class WPRM_Print {
59
  $recipe = WPRM_Recipe_Manager::get_recipe( $recipe_id );
60
 
61
  $styles = WPRM_Template_Manager::get_template_styles( $recipe, 'print' );
 
62
  if ( WPRM_Addons::is_active( 'premium' ) ) {
63
  $styles .= '<link rel="stylesheet" type="text/css" href="' . WPRMP_URL . 'assets/css/public/public.min.css"/>';
64
  }
@@ -98,6 +101,7 @@ class WPRM_Print {
98
  $recipe = WPRM_Recipe_Manager::get_recipe( $recipe_id );
99
 
100
  $styles = WPRM_Template_Manager::get_template_styles( $recipe, 'print' );
 
101
 
102
  $print_html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . $styles . '</head><body class="wprm-print">';
103
  $print_html .= WPRM_Template_Manager::get_template( $recipe, 'print' );
@@ -111,6 +115,26 @@ class WPRM_Print {
111
 
112
  wp_die();
113
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
114
  }
115
 
116
  WPRM_Print::init();
30
  add_action( 'wp_ajax_nopriv_wprm_print_recipe', array( __CLASS__, 'ajax_print_recipe' ) );
31
 
32
  add_action( 'wp_enqueue_scripts', array( __CLASS__, 'enqueue' ) );
33
+
34
+ add_filter( 'wprm_get_template', array( __CLASS__, 'print_credit' ), 10, 3 );
35
  }
36
 
37
  /**
61
  $recipe = WPRM_Recipe_Manager::get_recipe( $recipe_id );
62
 
63
  $styles = WPRM_Template_Manager::get_template_styles( $recipe, 'print' );
64
+ $styles .= '<style>body { position: relative; padding-bottom: 30px; } #wprm-print-footer { position: absolute; bottom: 0; left: 0; right: 0; text-align: center; font-size: 0.8em; }</style>';
65
  if ( WPRM_Addons::is_active( 'premium' ) ) {
66
  $styles .= '<link rel="stylesheet" type="text/css" href="' . WPRMP_URL . 'assets/css/public/public.min.css"/>';
67
  }
101
  $recipe = WPRM_Recipe_Manager::get_recipe( $recipe_id );
102
 
103
  $styles = WPRM_Template_Manager::get_template_styles( $recipe, 'print' );
104
+ $styles .= '<style>body { position: relative; padding-bottom: 30px; } #wprm-print-footer { position: absolute; bottom: 0; left: 0; right: 0; text-align: center; font-size: 0.8em; }</style>';
105
 
106
  $print_html = '<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />' . $styles . '</head><body class="wprm-print">';
107
  $print_html .= WPRM_Template_Manager::get_template( $recipe, 'print' );
115
 
116
  wp_die();
117
  }
118
+
119
+ /**
120
+ * Add credit to the print page.
121
+ *
122
+ * @since 1.12.0
123
+ * @param mixed $template Template we're filtering.
124
+ * @param mixed $recipe Recipe being printed.
125
+ * @param mixed $type Type of the template.
126
+ */
127
+ public static function print_credit( $template, $recipe, $type ) {
128
+ if ( 'print' === $type ) {
129
+ $credit = WPRM_Settings::get( 'print_credit' );
130
+
131
+ if ( $credit ) {
132
+ $template .= '<div id="wprm-print-footer">' . $credit . '</div>';
133
+ }
134
+ }
135
+
136
+ return $template;
137
+ }
138
  }
139
 
140
  WPRM_Print::init();
includes/public/class-wprm-settings.php CHANGED
@@ -51,6 +51,7 @@ class WPRM_Settings {
51
  'template_color_accent2_text' => '#ffffff',
52
  'default_recipe_template' => 'simple',
53
  'default_print_template' => 'clean-print',
 
54
  // Features.
55
  'features_comment_ratings' => true,
56
  // Features Premium.
@@ -222,6 +223,7 @@ class WPRM_Settings {
222
 
223
  $default_recipe_template = isset( $_POST['default_recipe_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_recipe_template'] ) ) : ''; // Input var okay.
224
  $default_print_template = isset( $_POST['default_print_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_print_template'] ) ) : ''; // Input var okay.
 
225
 
226
  $settings = array();
227
 
@@ -245,6 +247,7 @@ class WPRM_Settings {
245
 
246
  if ( $default_recipe_template ) { $settings['default_recipe_template'] = $default_recipe_template; }
247
  if ( $default_print_template ) { $settings['default_print_template'] = $default_print_template; }
 
248
 
249
  self::update_settings( $settings );
250
  }
51
  'template_color_accent2_text' => '#ffffff',
52
  'default_recipe_template' => 'simple',
53
  'default_print_template' => 'clean-print',
54
+ 'print_credit' => '',
55
  // Features.
56
  'features_comment_ratings' => true,
57
  // Features Premium.
223
 
224
  $default_recipe_template = isset( $_POST['default_recipe_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_recipe_template'] ) ) : ''; // Input var okay.
225
  $default_print_template = isset( $_POST['default_print_template'] ) ? sanitize_text_field( wp_unslash( $_POST['default_print_template'] ) ) : ''; // Input var okay.
226
+ $print_credit = isset( $_POST['print_credit'] ) ? wp_kses( wp_unslash( $_POST['print_credit'] ) ) : ''; // Input var okay.
227
 
228
  $settings = array();
229
 
247
 
248
  if ( $default_recipe_template ) { $settings['default_recipe_template'] = $default_recipe_template; }
249
  if ( $default_print_template ) { $settings['default_print_template'] = $default_print_template; }
250
+ $settings['print_credit'] = $print_credit;
251
 
252
  self::update_settings( $settings );
253
  }
includes/public/class-wprm-template-manager.php CHANGED
@@ -136,7 +136,9 @@ class WPRM_Template_Manager {
136
  }
137
  }
138
 
139
- return do_shortcode( $template );
 
 
140
  }
141
 
142
  /**
136
  }
137
  }
138
 
139
+ $template = do_shortcode( $template );
140
+
141
+ return apply_filters( 'wprm_get_template', $template, $recipe, $type, $slug );
142
  }
143
 
144
  /**
languages/wp-recipe-maker-es_ES.mo ADDED
Binary file
languages/wp-recipe-maker-es_ES.po ADDED
@@ -0,0 +1,1378 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ msgid ""
2
+ msgstr ""
3
+ "Project-Id-Version: WP Recipe Maker v1.11.0\n"
4
+ "Report-Msgid-Bugs-To: \n"
5
+ "POT-Creation-Date: 2017-01-14 13:51+0000\n"
6
+ "PO-Revision-Date: 2017-01-14 13:52+0000\n"
7
+ "Last-Translator: Navarro (http://navarradas.com)\n"
8
+ "Language-Team: Spanish (Spain)\n"
9
+ "MIME-Version: 1.0\n"
10
+ "Content-Type: text/plain; charset=UTF-8\n"
11
+ "Content-Transfer-Encoding: 8bit\n"
12
+ "Plural-Forms: nplurals=2; plural=n != 1\n"
13
+ "X-Poedit-Language: Spanish\n"
14
+ "X-Poedit-Country: SPAIN\n"
15
+ "X-Poedit-SourceCharset: utf-8\n"
16
+ "X-Poedit-KeywordsList: __;_e;__ngettext:1,2;_n:1,2;__ngettext_noop:1,2;"
17
+ "_n_noop:1,2;_c,_nc:4c,1,2;_x:1,2c;_ex:1,2c;_nx:4c,1,2;_nx_noop:4c,1,2;\n"
18
+ "X-Poedit-Basepath: ../\n"
19
+ "X-Poedit-Bookmarks: \n"
20
+ "X-Poedit-SearchPath-0: .\n"
21
+ "X-Textdomain-Support: yes\n"
22
+ "Language: es-ES\n"
23
+ "X-Generator: Loco - https://localise.biz/"
24
+
25
+ #: includes/admin/class-wprm-import-manager.php:50
26
+ #: includes/admin/class-wprm-import-manager.php:51
27
+ #: templates/admin/menu/import/import-overview.php:15
28
+ msgid "Import Recipes"
29
+ msgstr "Importar Recetas"
30
+
31
+ #: includes/admin/class-wprm-import-manager.php:52
32
+ msgid "Search Recipes"
33
+ msgstr "Buscar Recetas"
34
+
35
+ #: includes/admin/class-wprm-recipe-parser.php:148
36
+ msgid "kilograms"
37
+ msgstr "kilogramos"
38
+
39
+ #: includes/admin/class-wprm-recipe-parser.php:149
40
+ msgid "kilogram"
41
+ msgstr "kilogramo"
42
+
43
+ #: includes/admin/class-wprm-recipe-parser.php:150
44
+ msgid "kg"
45
+ msgstr "kg"
46
+
47
+ #: includes/admin/class-wprm-recipe-parser.php:151
48
+ msgid "grams"
49
+ msgstr "gramos"
50
+
51
+ #: includes/admin/class-wprm-recipe-parser.php:152
52
+ msgid "gram"
53
+ msgstr "gramo"
54
+
55
+ #: includes/admin/class-wprm-recipe-parser.php:153
56
+ msgid "gr"
57
+ msgstr "gr"
58
+
59
+ #: includes/admin/class-wprm-recipe-parser.php:154
60
+ #: includes/public/class-wprm-metadata.php:164
61
+ msgid "g"
62
+ msgstr "g"
63
+
64
+ #: includes/admin/class-wprm-recipe-parser.php:155
65
+ msgid "milligrams"
66
+ msgstr "miligramos"
67
+
68
+ #: includes/admin/class-wprm-recipe-parser.php:156
69
+ msgid "milligram"
70
+ msgstr "miligramo"
71
+
72
+ #: includes/admin/class-wprm-recipe-parser.php:157
73
+ #: includes/public/class-wprm-metadata.php:169
74
+ msgid "mg"
75
+ msgstr "mg"
76
+
77
+ #: includes/admin/class-wprm-recipe-parser.php:158
78
+ msgid "pounds"
79
+ msgstr "libras"
80
+
81
+ #: includes/admin/class-wprm-recipe-parser.php:159
82
+ msgid "pound"
83
+ msgstr "libra"
84
+
85
+ #: includes/admin/class-wprm-recipe-parser.php:160
86
+ msgid "lbs"
87
+ msgstr "lbs"
88
+
89
+ #: includes/admin/class-wprm-recipe-parser.php:161
90
+ msgid "lb"
91
+ msgstr "lb"
92
+
93
+ #: includes/admin/class-wprm-recipe-parser.php:162
94
+ msgid "ounces"
95
+ msgstr "onzas"
96
+
97
+ #: includes/admin/class-wprm-recipe-parser.php:163
98
+ msgid "ounce"
99
+ msgstr "onza"
100
+
101
+ #: includes/admin/class-wprm-recipe-parser.php:164
102
+ msgid "oz"
103
+ msgstr "oz"
104
+
105
+ #: includes/admin/class-wprm-recipe-parser.php:166
106
+ msgid "liters"
107
+ msgstr "litros"
108
+
109
+ #: includes/admin/class-wprm-recipe-parser.php:167
110
+ msgid "liter"
111
+ msgstr "litro"
112
+
113
+ #: includes/admin/class-wprm-recipe-parser.php:168
114
+ msgid "l"
115
+ msgstr "l"
116
+
117
+ #: includes/admin/class-wprm-recipe-parser.php:169
118
+ msgid "deciliters"
119
+ msgstr "decilitros"
120
+
121
+ #: includes/admin/class-wprm-recipe-parser.php:170
122
+ msgid "deciliter"
123
+ msgstr "decilitro"
124
+
125
+ #: includes/admin/class-wprm-recipe-parser.php:171
126
+ msgid "dl"
127
+ msgstr "dl"
128
+
129
+ #: includes/admin/class-wprm-recipe-parser.php:172
130
+ msgid "centiliters"
131
+ msgstr "centilitros"
132
+
133
+ #: includes/admin/class-wprm-recipe-parser.php:173
134
+ msgid "centiliter"
135
+ msgstr "centilitro"
136
+
137
+ #: includes/admin/class-wprm-recipe-parser.php:174
138
+ msgid "cl"
139
+ msgstr "cl"
140
+
141
+ #: includes/admin/class-wprm-recipe-parser.php:175
142
+ msgid "milliliters"
143
+ msgstr "mililitros"
144
+
145
+ #: includes/admin/class-wprm-recipe-parser.php:176
146
+ msgid "milliliter"
147
+ msgstr "mililitro"
148
+
149
+ #: includes/admin/class-wprm-recipe-parser.php:177
150
+ msgid "ml"
151
+ msgstr "ml"
152
+
153
+ #: includes/admin/class-wprm-recipe-parser.php:178
154
+ msgid "gallons"
155
+ msgstr "galones"
156
+
157
+ #: includes/admin/class-wprm-recipe-parser.php:179
158
+ msgid "gallon"
159
+ msgstr "galón"
160
+
161
+ #: includes/admin/class-wprm-recipe-parser.php:180
162
+ msgid "gal"
163
+ msgstr "gal"
164
+
165
+ #: includes/admin/class-wprm-recipe-parser.php:181
166
+ msgid "quarts"
167
+ msgstr "cuartos de galón"
168
+
169
+ #: includes/admin/class-wprm-recipe-parser.php:182
170
+ msgid "quart"
171
+ msgstr "cuarto de galón"
172
+
173
+ #: includes/admin/class-wprm-recipe-parser.php:183
174
+ msgid "qt"
175
+ msgstr "qt"
176
+
177
+ #: includes/admin/class-wprm-recipe-parser.php:184
178
+ msgid "pints"
179
+ msgstr "pintas"
180
+
181
+ #: includes/admin/class-wprm-recipe-parser.php:185
182
+ msgid "pint"
183
+ msgstr "pinta"
184
+
185
+ #: includes/admin/class-wprm-recipe-parser.php:186
186
+ msgid "pt"
187
+ msgstr "pt"
188
+
189
+ #: includes/admin/class-wprm-recipe-parser.php:187
190
+ msgid "cups"
191
+ msgstr "tazas"
192
+
193
+ #: includes/admin/class-wprm-recipe-parser.php:188
194
+ msgid "cup"
195
+ msgstr "taza"
196
+
197
+ #: includes/admin/class-wprm-recipe-parser.php:189
198
+ msgid "cu"
199
+ msgstr "tza"
200
+
201
+ #: includes/admin/class-wprm-recipe-parser.php:190
202
+ msgid "c"
203
+ msgstr "tza"
204
+
205
+ #: includes/admin/class-wprm-recipe-parser.php:191
206
+ msgid "fluid ounces"
207
+ msgstr "onzas líquidas"
208
+
209
+ #: includes/admin/class-wprm-recipe-parser.php:192
210
+ msgid "fluid ounce"
211
+ msgstr "onza líquida"
212
+
213
+ #: includes/admin/class-wprm-recipe-parser.php:193
214
+ msgid "fl ounces"
215
+ msgstr "oz líquidas"
216
+
217
+ #: includes/admin/class-wprm-recipe-parser.php:194
218
+ msgid "fl ounce"
219
+ msgstr "oz líquida"
220
+
221
+ #: includes/admin/class-wprm-recipe-parser.php:195
222
+ msgid "floz"
223
+ msgstr "oz líquidas"
224
+
225
+ #: includes/admin/class-wprm-recipe-parser.php:196
226
+ msgid "tablespoons"
227
+ msgstr "cucharadas"
228
+
229
+ #: includes/admin/class-wprm-recipe-parser.php:197
230
+ msgid "tablespoon"
231
+ msgstr "cucharada"
232
+
233
+ #: includes/admin/class-wprm-recipe-parser.php:198
234
+ msgid "tbsps"
235
+ msgstr "cdas"
236
+
237
+ #: includes/admin/class-wprm-recipe-parser.php:199
238
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:34
239
+ msgid "tbsp"
240
+ msgstr "cda"
241
+
242
+ #: includes/admin/class-wprm-recipe-parser.php:200
243
+ msgid "tbls"
244
+ msgstr "cdas"
245
+
246
+ #: includes/admin/class-wprm-recipe-parser.php:201
247
+ msgid "tbs"
248
+ msgstr "cda"
249
+
250
+ #: includes/admin/class-wprm-recipe-parser.php:202
251
+ msgid "tb"
252
+ msgstr "cs"
253
+
254
+ #: includes/admin/class-wprm-recipe-parser.php:203
255
+ msgid "T"
256
+ msgstr "Cda"
257
+
258
+ #: includes/admin/class-wprm-recipe-parser.php:204
259
+ msgid "teaspoons"
260
+ msgstr "cucharaditas"
261
+
262
+ #: includes/admin/class-wprm-recipe-parser.php:205
263
+ msgid "teaspoon"
264
+ msgstr "cucharadita"
265
+
266
+ #: includes/admin/class-wprm-recipe-parser.php:206
267
+ msgid "tsps"
268
+ msgstr "cdtas"
269
+
270
+ #: includes/admin/class-wprm-recipe-parser.php:207
271
+ msgid "tsp"
272
+ msgstr "cdta"
273
+
274
+ #: includes/admin/class-wprm-recipe-parser.php:208
275
+ msgid "ts"
276
+ msgstr "cc"
277
+
278
+ #: includes/admin/class-wprm-recipe-parser.php:209
279
+ msgid "t"
280
+ msgstr "cc"
281
+
282
+ #: includes/admin/class-wprm-recipe-parser.php:211
283
+ msgid "meters"
284
+ msgstr "metros"
285
+
286
+ #: includes/admin/class-wprm-recipe-parser.php:212
287
+ msgid "meter"
288
+ msgstr "metro"
289
+
290
+ #: includes/admin/class-wprm-recipe-parser.php:213
291
+ msgid "m"
292
+ msgstr "m"
293
+
294
+ #: includes/admin/class-wprm-recipe-parser.php:214
295
+ msgid "centimeters"
296
+ msgstr "centímetros"
297
+
298
+ #: includes/admin/class-wprm-recipe-parser.php:215
299
+ msgid "centimeter"
300
+ msgstr "centímetro"
301
+
302
+ #: includes/admin/class-wprm-recipe-parser.php:216
303
+ msgid "cm"
304
+ msgstr "cm"
305
+
306
+ #: includes/admin/class-wprm-recipe-parser.php:217
307
+ msgid "millimeters"
308
+ msgstr "milímetros"
309
+
310
+ #: includes/admin/class-wprm-recipe-parser.php:218
311
+ msgid "millimeter"
312
+ msgstr "milímetro"
313
+
314
+ #: includes/admin/class-wprm-recipe-parser.php:219
315
+ msgid "mm"
316
+ msgstr "mm"
317
+
318
+ #: includes/admin/class-wprm-recipe-parser.php:220
319
+ msgid "yards"
320
+ msgstr "yardas"
321
+
322
+ #: includes/admin/class-wprm-recipe-parser.php:221
323
+ msgid "yard"
324
+ msgstr "yarda"
325
+
326
+ #: includes/admin/class-wprm-recipe-parser.php:222
327
+ msgid "yd"
328
+ msgstr "yd"
329
+
330
+ #: includes/admin/class-wprm-recipe-parser.php:223
331
+ msgid "feet"
332
+ msgstr "pies"
333
+
334
+ #: includes/admin/class-wprm-recipe-parser.php:224
335
+ msgid "foot"
336
+ msgstr "pie"
337
+
338
+ #: includes/admin/class-wprm-recipe-parser.php:225
339
+ msgid "ft"
340
+ msgstr "ft"
341
+
342
+ #: includes/admin/class-wprm-recipe-parser.php:226
343
+ msgid "inches"
344
+ msgstr "pulgadas"
345
+
346
+ #: includes/admin/class-wprm-recipe-parser.php:227
347
+ msgid "inch"
348
+ msgstr "pulgada"
349
+
350
+ #: includes/admin/class-wprm-recipe-parser.php:228
351
+ msgid "in"
352
+ msgstr "in"
353
+
354
+ #: includes/admin/class-wprm-recipe-parser.php:230
355
+ msgid "cloves"
356
+ msgstr "dientes"
357
+
358
+ #: includes/admin/class-wprm-recipe-parser.php:231
359
+ msgid "clove"
360
+ msgstr "diente"
361
+
362
+ #: includes/admin/class-wprm-recipe-parser.php:232
363
+ msgid "leaves"
364
+ msgstr "hojas"
365
+
366
+ #: includes/admin/class-wprm-recipe-parser.php:233
367
+ msgid "leave"
368
+ msgstr "hoja"
369
+
370
+ #: includes/admin/class-wprm-recipe-parser.php:234
371
+ msgid "slices"
372
+ msgstr "rebanadas"
373
+
374
+ #: includes/admin/class-wprm-recipe-parser.php:235
375
+ msgid "slice"
376
+ msgstr "rebanada"
377
+
378
+ #: includes/admin/class-wprm-recipe-parser.php:236
379
+ msgid "pieces"
380
+ msgstr "trozos"
381
+
382
+ #: includes/admin/class-wprm-recipe-parser.php:237
383
+ msgid "piece"
384
+ msgstr "trozo"
385
+
386
+ #: includes/admin/class-wprm-recipe-parser.php:238
387
+ msgid "pinches"
388
+ msgstr "pizcas"
389
+
390
+ #: includes/admin/class-wprm-recipe-parser.php:239
391
+ msgid "pinche"
392
+ msgstr "pizca"
393
+
394
+ #: includes/admin/import/class-wprm-import-easyrecipe.php:105
395
+ msgid "Unknown"
396
+ msgstr "Desconocido"
397
+
398
+ #: includes/admin/import/class-wprm-import-wpultimaterecipe.php:354
399
+ #: includes/public/class-wprm-template-helper.php:171
400
+ msgid "hour"
401
+ msgstr "hora"
402
+
403
+ #: includes/admin/import/class-wprm-import-wpultimaterecipe.php:355
404
+ #: includes/public/class-wprm-template-helper.php:171
405
+ msgid "hours"
406
+ msgstr "horas"
407
+
408
+ #: includes/admin/manage/class-wprm-manage-ingredients.php:57
409
+ #: includes/public/class-wprm-template-helper.php:83
410
+ #: templates/admin/manage.php:17 templates/admin/modal/tabs/import-text.php:40
411
+ msgid "Ingredients"
412
+ msgstr "Ingredientes"
413
+
414
+ #: includes/admin/manage/class-wprm-manage.php:250
415
+ #: templates/admin/manage.php:26
416
+ msgid "Manage"
417
+ msgstr "Administrar"
418
+
419
+ #: includes/admin/manage/class-wprm-manage.php:290
420
+ #: templates/admin/settings/features.php:43
421
+ msgid "These features are only available in"
422
+ msgstr "Estas funcionalidades solo están disponibles para"
423
+
424
+ #: includes/admin/manage/class-wprm-manage.php:293
425
+ msgid "Ingredient Links"
426
+ msgstr "Enlaces de Ingredientes"
427
+
428
+ #: includes/admin/menu/class-wprm-admin-menu-addons.php:47
429
+ #: templates/admin/menu/addons.php:15
430
+ msgid "Add-Ons"
431
+ msgstr "Extras"
432
+
433
+ #: includes/admin/menu/class-wprm-admin-menu-faq.php:76
434
+ msgid "FAQ & Support"
435
+ msgstr "FAQ y Soporte"
436
+
437
+ #: includes/admin/modal/class-wprm-modal.php:60
438
+ msgid "Are you sure? You will lose any unsaved changes."
439
+ msgstr "¿Estás seguro? Perderás todos los cambios que no se hayan guardado."
440
+
441
+ #: includes/admin/modal/class-wprm-modal.php:61
442
+ #: templates/admin/modal/modal.php:61 templates/admin/modal/modal.php:97
443
+ msgid "Insert"
444
+ msgstr "Insertar"
445
+
446
+ #: includes/admin/modal/class-wprm-modal.php:62
447
+ msgid "Update"
448
+ msgstr "Actualizar"
449
+
450
+ #: includes/admin/modal/class-wprm-modal.php:63
451
+ msgid "Select or Upload Image"
452
+ msgstr "Seleccionar o subir imagen"
453
+
454
+ #: includes/admin/modal/class-wprm-modal.php:64
455
+ msgid "Use Image"
456
+ msgstr "Usar imagen"
457
+
458
+ #: includes/admin/modal/class-wprm-modal.php:65
459
+ msgid "Are you sure you want to remove this recipe?"
460
+ msgstr "¿Estás seguro de que quieres eliminar esta receta?"
461
+
462
+ #: includes/admin/modal/class-wprm-modal.php:66
463
+ msgid "Are you sure you want to start over with importing from text?"
464
+ msgstr ""
465
+ "¿Estás seguro de que quieras empezar de nuevo con la importación desde texto?"
466
+
467
+ #: includes/admin/modal/class-wprm-modal.php:67
468
+ #: includes/admin/modal/class-wprm-modal.php:153
469
+ #: includes/admin/modal/class-wprm-modal.php:157
470
+ msgid "Edit Recipe"
471
+ msgstr "Editar Receta"
472
+
473
+ #: includes/admin/modal/class-wprm-modal.php:68
474
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:35
475
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:35
476
+ msgid "First recipe on page"
477
+ msgstr "Primera receta de la página"
478
+
479
+ #: includes/admin/modal/class-wprm-modal.php:69
480
+ msgid "Type here (select text for advanced styling options)"
481
+ msgstr "Escribe aquí (selecciona \"texto\" para opciones avanzadas de estilo)"
482
+
483
+ #: includes/admin/modal/class-wprm-modal.php:121
484
+ msgid "New Recipe"
485
+ msgstr "Nueva Receta"
486
+
487
+ #: includes/admin/modal/class-wprm-modal.php:125
488
+ msgid "Import from Text"
489
+ msgstr "Importar desde texto"
490
+
491
+ #: includes/admin/modal/class-wprm-modal.php:131
492
+ msgid "Recipe Details"
493
+ msgstr "Detalles de la Receta"
494
+
495
+ #: includes/admin/modal/class-wprm-modal.php:138
496
+ msgid "Ingredients & Instructions"
497
+ msgstr "Ingredientes e Instrucciones"
498
+
499
+ #: includes/admin/modal/class-wprm-modal.php:144
500
+ #: includes/public/class-wprm-template-helper.php:85
501
+ msgid "Recipe Notes"
502
+ msgstr "Notas de la Receta"
503
+
504
+ #: includes/admin/modal/class-wprm-modal.php:160
505
+ msgid "Edit"
506
+ msgstr "Editar"
507
+
508
+ #: includes/admin/modal/class-wprm-modal.php:167
509
+ msgid "Recipe Snippets"
510
+ msgstr "Fragmentos de la receta"
511
+
512
+ #: includes/admin/modal/class-wprm-modal.php:171
513
+ #: includes/public/class-wprm-shortcode.php:158
514
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:40
515
+ msgid "Jump to Recipe"
516
+ msgstr "Ir a la Receta"
517
+
518
+ #: includes/admin/modal/class-wprm-modal.php:178
519
+ #: includes/public/class-wprm-shortcode.php:190
520
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:40
521
+ msgid "Print Recipe"
522
+ msgstr "Imprimir Receta"
523
+
524
+ #: includes/admin/modal/class-wprm-shortcode-preview.php:46
525
+ msgid "remove"
526
+ msgstr "eliminar"
527
+
528
+ #: includes/class-wp-recipe-maker.php:123
529
+ msgid "Please update to at least the following plugin versions:"
530
+ msgstr ""
531
+ "Por favor, actualiza al menos hasta las siguientes versiones del plugin:"
532
+
533
+ #: includes/public/class-wprm-comment-rating.php:114
534
+ #: templates/public/comment-rating-form.php:14
535
+ msgid "Recipe Rating"
536
+ msgstr "Calificación de la Receta"
537
+
538
+ #: includes/public/class-wprm-metadata.php:167
539
+ #: templates/admin/modal/tabs/recipe-details.php:59
540
+ #: templates/recipe/clean-print/clean-print.php:67
541
+ #: templates/recipe/clean-print-with-image/clean-print-with-image.php:68
542
+ #: templates/recipe/simple/simple.php:84
543
+ #: templates/recipe/tastefully-simple/tastefully-simple.php:88
544
+ msgid "kcal"
545
+ msgstr "kcal"
546
+
547
+ #: includes/public/class-wprm-metadata.php:178
548
+ msgid "1 serving"
549
+ msgstr "1 ración"
550
+
551
+ #: includes/public/class-wprm-post-type.php:39
552
+ msgctxt "post type general name"
553
+ msgid "Recipes"
554
+ msgstr "Recetas"
555
+
556
+ #: includes/public/class-wprm-post-type.php:40
557
+ msgctxt "post type singular name"
558
+ msgid "Recipe"
559
+ msgstr "Receta"
560
+
561
+ #: includes/public/class-wprm-settings.php:92
562
+ msgid "WPRM Settings"
563
+ msgstr "Ajustes de WPRM"
564
+
565
+ #: includes/public/class-wprm-settings.php:92
566
+ msgid "Settings"
567
+ msgstr "Ajustes"
568
+
569
+ #: includes/public/class-wprm-taxonomies.php:62
570
+ msgctxt "taxonomy general name"
571
+ msgid "Courses"
572
+ msgstr "Platos"
573
+
574
+ #: includes/public/class-wprm-taxonomies.php:63
575
+ msgctxt "taxonomy singular name"
576
+ msgid "Course"
577
+ msgstr "Plato"
578
+
579
+ #: includes/public/class-wprm-taxonomies.php:66
580
+ msgctxt "taxonomy general name"
581
+ msgid "Cuisines"
582
+ msgstr "Cocinas"
583
+
584
+ #: includes/public/class-wprm-taxonomies.php:67
585
+ msgctxt "taxonomy singular name"
586
+ msgid "Cuisine"
587
+ msgstr "Cocina"
588
+
589
+ #: includes/public/class-wprm-taxonomies.php:70
590
+ msgctxt "taxonomy general name"
591
+ msgid "Ingredients"
592
+ msgstr "Ingredientes"
593
+
594
+ #: includes/public/class-wprm-taxonomies.php:71
595
+ msgctxt "taxonomy singular name"
596
+ msgid "Ingredient"
597
+ msgstr "Ingrediente"
598
+
599
+ #: includes/public/class-wprm-taxonomies.php:97
600
+ msgid "Breakfast"
601
+ msgstr "Desayuno"
602
+
603
+ #: includes/public/class-wprm-taxonomies.php:98
604
+ msgid "Appetizer"
605
+ msgstr "Aperitivo"
606
+
607
+ #: includes/public/class-wprm-taxonomies.php:99
608
+ msgid "Soup"
609
+ msgstr "Sopa"
610
+
611
+ #: includes/public/class-wprm-taxonomies.php:100
612
+ msgid "Main Course"
613
+ msgstr "Plato principal"
614
+
615
+ #: includes/public/class-wprm-taxonomies.php:101
616
+ msgid "Side Dish"
617
+ msgstr "Acompañamiento"
618
+
619
+ #: includes/public/class-wprm-taxonomies.php:102
620
+ msgid "Salad"
621
+ msgstr "Ensalada"
622
+
623
+ #: includes/public/class-wprm-taxonomies.php:103
624
+ msgid "Dessert"
625
+ msgstr "Postre"
626
+
627
+ #: includes/public/class-wprm-taxonomies.php:104
628
+ msgid "Snack"
629
+ msgstr "Tentempié"
630
+
631
+ #: includes/public/class-wprm-taxonomies.php:105
632
+ msgid "Drinks"
633
+ msgstr "Bebidas"
634
+
635
+ #: includes/public/class-wprm-taxonomies.php:109
636
+ msgid "French"
637
+ msgstr "Francesa"
638
+
639
+ #: includes/public/class-wprm-taxonomies.php:110
640
+ msgid "Italian"
641
+ msgstr "Italiana"
642
+
643
+ #: includes/public/class-wprm-taxonomies.php:111
644
+ msgid "Mediterranean"
645
+ msgstr "Mediterránea"
646
+
647
+ #: includes/public/class-wprm-taxonomies.php:112
648
+ msgid "Indian"
649
+ msgstr "India"
650
+
651
+ #: includes/public/class-wprm-taxonomies.php:113
652
+ msgid "Chinese"
653
+ msgstr "China"
654
+
655
+ #: includes/public/class-wprm-taxonomies.php:114
656
+ msgid "Japanese"
657
+ msgstr "Japonesa"
658
+
659
+ #: includes/public/class-wprm-taxonomies.php:115
660
+ msgid "American"
661
+ msgstr "Americana"
662
+
663
+ #: includes/public/class-wprm-taxonomies.php:116
664
+ msgid "Mexican"
665
+ msgstr "Mexicana"
666
+
667
+ #: includes/public/class-wprm-template-helper.php:74
668
+ msgid "Print"
669
+ msgstr "Imprimir"
670
+
671
+ #: includes/public/class-wprm-template-helper.php:75
672
+ msgid "Course"
673
+ msgstr "Plato"
674
+
675
+ #: includes/public/class-wprm-template-helper.php:76
676
+ msgid "Cuisine"
677
+ msgstr "Cocina"
678
+
679
+ #: includes/public/class-wprm-template-helper.php:77
680
+ #: templates/admin/modal/tabs/recipe-details.php:63
681
+ msgid "Prep Time"
682
+ msgstr "Tiempo de preparación"
683
+
684
+ #: includes/public/class-wprm-template-helper.php:78
685
+ #: templates/admin/modal/tabs/recipe-details.php:66
686
+ msgid "Cook Time"
687
+ msgstr "Tiempo de cocción"
688
+
689
+ #: includes/public/class-wprm-template-helper.php:79
690
+ #: templates/admin/modal/tabs/recipe-details.php:69
691
+ msgid "Total Time"
692
+ msgstr "Tiempo total"
693
+
694
+ #: includes/public/class-wprm-template-helper.php:80
695
+ #: templates/admin/modal/tabs/recipe-details.php:53
696
+ msgid "Servings"
697
+ msgstr "Raciones"
698
+
699
+ #: includes/public/class-wprm-template-helper.php:81
700
+ #: templates/admin/modal/tabs/recipe-details.php:58
701
+ msgid "Calories"
702
+ msgstr "Calorías"
703
+
704
+ #: includes/public/class-wprm-template-helper.php:82
705
+ #: templates/admin/modal/tabs/recipe-details.php:42
706
+ msgid "Author"
707
+ msgstr "Autor"
708
+
709
+ #: includes/public/class-wprm-template-helper.php:84
710
+ #: templates/admin/modal/tabs/import-text.php:52
711
+ msgid "Instructions"
712
+ msgstr "Instrucciones"
713
+
714
+ #: includes/public/class-wprm-template-helper.php:152
715
+ msgid "d"
716
+ msgstr "d"
717
+
718
+ #: includes/public/class-wprm-template-helper.php:154
719
+ msgid "days"
720
+ msgstr "días"
721
+
722
+ #: includes/public/class-wprm-template-helper.php:154
723
+ msgid "day"
724
+ msgstr "día"
725
+
726
+ #: includes/public/class-wprm-template-helper.php:169
727
+ msgid "hr"
728
+ msgstr "h"
729
+
730
+ #: includes/public/class-wprm-template-helper.php:169
731
+ msgid "hrs"
732
+ msgstr "h"
733
+
734
+ #: includes/public/class-wprm-template-helper.php:186
735
+ msgid "mins"
736
+ msgstr "min"
737
+
738
+ #: includes/public/class-wprm-template-helper.php:186
739
+ msgid "min"
740
+ msgstr "min"
741
+
742
+ #: includes/public/class-wprm-template-helper.php:188
743
+ #: templates/admin/modal/tabs/recipe-details.php:64
744
+ #: templates/admin/modal/tabs/recipe-details.php:67
745
+ #: templates/admin/modal/tabs/recipe-details.php:70
746
+ msgid "minutes"
747
+ msgstr "minutos"
748
+
749
+ #: includes/public/class-wprm-template-helper.php:188
750
+ msgid "minute"
751
+ msgstr "minuto"
752
+
753
+ #: includes/public/class-wprm-template-helper.php:225
754
+ msgid "from"
755
+ msgstr "de"
756
+
757
+ #: includes/public/class-wprm-template-helper.php:225
758
+ msgid "vote"
759
+ msgid_plural "votes"
760
+ msgstr[0] "voto"
761
+ msgstr[1] "votos"
762
+
763
+ #: templates/admin/manage.php:16
764
+ msgid "Recipes"
765
+ msgstr "Recetas"
766
+
767
+ #: templates/admin/menu/import/import-overview.php:16
768
+ msgid "Considerations Before Importing"
769
+ msgstr "Consideraciones antes de importar"
770
+
771
+ #: templates/admin/menu/import/import-overview.php:18
772
+ msgid ""
773
+ "Importing recipes will convert them to our format and they won't be "
774
+ "available in the old plugin anymore. We recommend backing up before starting "
775
+ "the process and trying to import 1 single recipe first to make sure "
776
+ "everything converts properly."
777
+ msgstr ""
778
+ "Al importar recetas estas se convertirán a nuestro formato y no volverán a "
779
+ "estar disponibles en el plugin antiguo. Recomendamos hacer una copia de "
780
+ "seguridad antes de empezar el proceso e intentar importar primero una sola "
781
+ "receta para asegurarse de que todo se convierte adecuadamente."
782
+
783
+ #: templates/admin/menu/import/import-overview.php:21
784
+ msgid ""
785
+ "If your current plugin uses custom post types and has different permalinks "
786
+ "than regular posts you might want to use a redirection plugin to set up 301 "
787
+ "redirects. Contact us if you need help!"
788
+ msgstr ""
789
+ "Si tu plugin actual usa tipos de entrada personalizados y tiene enlaces "
790
+ "permanentes diferentes de las entradas normales podrías necesitar usar algún "
791
+ "plugin para establecer redirecciones 301. ¡Contáctanos si necesitas ayuda!"
792
+
793
+ #: templates/admin/menu/import/import-overview.php:24
794
+ msgid ""
795
+ "Importing lots of recipes at once can cause a PHP timeout error. All recipes "
796
+ "that were handled up until the error will have been imported correctly."
797
+ msgstr ""
798
+ "Importar muchas recetas de una vez podría causar un error de máximo tiempo "
799
+ "de espera de PHP. Todas las recetas que se hayan procesado hasta el momento "
800
+ "del error habrán sido importadas correctamente."
801
+
802
+ #: templates/admin/menu/import/import-overview.php:27
803
+ #: templates/admin/menu/import/import-recipes.php:45
804
+ msgid "Recipes to Import"
805
+ msgstr "Recetas a importar"
806
+
807
+ #: templates/admin/menu/import/import-overview.php:43
808
+ #: templates/admin/menu/import/import-overview.php:79
809
+ msgid "No recipes found."
810
+ msgstr "No se han encontrado recetas."
811
+
812
+ #: templates/admin/menu/import/import-overview.php:49
813
+ msgid "Search for recipes"
814
+ msgstr "Buscar recetas"
815
+
816
+ #: templates/admin/menu/import/import-overview.php:54
817
+ #: templates/admin/menu/import/import-search.php:29
818
+ #: templates/admin/menu/import/import-search.php:37
819
+ msgid "%d recipe found"
820
+ msgid_plural "%d recipes found"
821
+ msgstr[0] "Se ha encontrado %d receta"
822
+ msgstr[1] "Se han encontrado %d recetas"
823
+
824
+ #: templates/admin/menu/import/import-overview.php:56
825
+ msgid " recipes found"
826
+ msgstr "recetas encontradas"
827
+
828
+ #: templates/admin/menu/import/import-overview.php:59
829
+ #: templates/admin/menu/import/import-search.php:32
830
+ msgid "Explore import options"
831
+ msgstr "Ver opciones de importación"
832
+
833
+ #: templates/admin/menu/import/import-overview.php:64
834
+ msgid "Imported Recipes to Check"
835
+ msgstr "Recetas importadas para revisar"
836
+
837
+ #: templates/admin/menu/import/import-overview.php:83
838
+ msgid ""
839
+ "We recommend going through all of these recipes to make sure the import "
840
+ "process was successful. Pay attention to the different ingredient parts to "
841
+ "be able to make use of all of our features."
842
+ msgstr ""
843
+ "Recomendamos revisar todas estas recetas para asegurarse de que el proceso "
844
+ "de importación ha sido satisfactorio. Fíjate en las diferentes partes de los "
845
+ "ingredientes para poder hacer uso de todas nuestras funcionalidades."
846
+
847
+ #: templates/admin/menu/import/import-overview.php:86
848
+ msgid ""
849
+ "After doing so you can mark a recipe as checked to keep track of the recipes "
850
+ "you still have to go through."
851
+ msgstr ""
852
+ "Una vez hecho esto puedes marcar la receta como revisada para mantener un "
853
+ "seguimiento de las recetas que todavía tienes que comprobar."
854
+
855
+ #: templates/admin/menu/import/import-overview.php:106
856
+ #: templates/admin/menu/import/import-recipes.php:62
857
+ msgid "no parent post found"
858
+ msgstr "no se encontró entrada padre"
859
+
860
+ #: templates/admin/menu/import/import-overview.php:113
861
+ msgid "Mark Selected Recipes as Checked"
862
+ msgstr "Marcar las recetas seleccionadas como revisadas"
863
+
864
+ #: templates/admin/menu/import/import-recipes.php:21
865
+ #: templates/admin/menu/import/import-search.php:22
866
+ msgid "Something went wrong."
867
+ msgstr "Algo fue mal."
868
+
869
+ #: templates/admin/menu/import/import-recipes.php:28
870
+ msgid "Import from %s"
871
+ msgstr "Importar desde %s"
872
+
873
+ #: templates/admin/menu/import/import-recipes.php:42
874
+ msgid "Import Settings"
875
+ msgstr "Importar Ajustes"
876
+
877
+ #: templates/admin/menu/import/import-recipes.php:46
878
+ msgid "Use SHIFT-click to (un)check multiple recipes at once."
879
+ msgstr "Usa MAYUS-clic para (des)marcar varias recetas al mismo tiempo."
880
+
881
+ #: templates/admin/menu/import/import-recipes.php:47
882
+ msgid "Select"
883
+ msgstr "Seleccionar"
884
+
885
+ #: templates/admin/menu/import/import-recipes.php:47
886
+ msgid "all"
887
+ msgstr "todas"
888
+
889
+ #: templates/admin/menu/import/import-recipes.php:47
890
+ msgid "none"
891
+ msgstr "ninguna"
892
+
893
+ #: templates/admin/menu/import/import-recipes.php:73
894
+ msgid "%d more recipe"
895
+ msgid_plural "%d more recipes"
896
+ msgstr[0] "%d receta más"
897
+ msgstr[1] "%d recetas más"
898
+
899
+ #: templates/admin/menu/import/import-recipes.php:77
900
+ msgid "Try changing the \"p\" variable in the URL to find the other recipes."
901
+ msgstr ""
902
+ "Intenta cambiar la variable \"p\" en la URL para encontrar las demás recetas."
903
+
904
+ #: templates/admin/menu/import/import-recipes.php:82
905
+ msgid "Import Selected Recipes"
906
+ msgstr "Importar recetas seleccionadas"
907
+
908
+ #: templates/admin/menu/import/import-search.php:15
909
+ msgid "Search Results"
910
+ msgstr "Buscar resultados"
911
+
912
+ #: templates/admin/menu/import/import-search.php:27
913
+ msgid "Search finished."
914
+ msgstr "Búsqueda terminada."
915
+
916
+ #: templates/admin/menu/import/import-search.php:35
917
+ msgid "Still searching, keep this page open."
918
+ msgstr "Todavía buscando, mantén esta página abierta."
919
+
920
+ #: templates/admin/modal/modal.php:16
921
+ msgid "Close Modal"
922
+ msgstr "Cerrar el diálogo modal"
923
+
924
+ #: templates/admin/modal/modal.php:38
925
+ msgid "You're currently editing a recipe."
926
+ msgstr "Ahora mismo estás editando una receta."
927
+
928
+ #: templates/admin/modal/modal.php:38
929
+ msgid "Use the \"WP Recipe Maker\" button to access other features."
930
+ msgstr "Usa el botón \"WP Recipe Maker\" para acceder a otras funcionalidades."
931
+
932
+ #: templates/admin/modal/tabs/edit-recipe.php:15
933
+ msgid "Select the recipe you would like to edit and click the \"Edit\" button."
934
+ msgstr ""
935
+ "Selecciona la receta que te gustaría editar y haz clic en el botón "
936
+ "\"Editar\"."
937
+
938
+ #: templates/admin/modal/tabs/edit-recipe.php:19
939
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:33
940
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:33
941
+ msgid "Recipe"
942
+ msgstr "Receta"
943
+
944
+ #: templates/admin/modal/tabs/edit-recipe.php:21
945
+ msgid "Select a recipe"
946
+ msgstr "Seleccionar una receta"
947
+
948
+ #: templates/admin/modal/tabs/import-text.php:16
949
+ msgid "Start Over"
950
+ msgstr "Empezar de nuevo"
951
+
952
+ #: templates/admin/modal/tabs/import-text.php:17
953
+ msgid "Clear"
954
+ msgstr "Limpiar"
955
+
956
+ #: templates/admin/modal/tabs/import-text.php:18
957
+ msgid "Next"
958
+ msgstr "Siguiente"
959
+
960
+ #: templates/admin/modal/tabs/import-text.php:22
961
+ msgid ""
962
+ "Paste the recipe you want to import in the textarea below to get started."
963
+ msgstr ""
964
+ "Para empezar pega la receta que quieres importar en el área de texto que hay "
965
+ "debajo."
966
+
967
+ #: templates/admin/modal/tabs/import-text.php:30
968
+ #: templates/admin/modal/tabs/import-text.php:35
969
+ #: templates/admin/modal/tabs/import-text.php:40
970
+ #: templates/admin/modal/tabs/import-text.php:52
971
+ #: templates/admin/modal/tabs/import-text.php:64
972
+ msgid "Highlight this part of the recipe:"
973
+ msgstr "Resalta esta parte de la receta:"
974
+
975
+ #: templates/admin/modal/tabs/import-text.php:30
976
+ #: templates/admin/modal/tabs/recipe-details.php:30
977
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:21
978
+ msgid "Name"
979
+ msgstr "Nombre"
980
+
981
+ #: templates/admin/modal/tabs/import-text.php:35
982
+ #: templates/admin/modal/tabs/recipe-details.php:34
983
+ msgid "Summary"
984
+ msgstr "Resumen"
985
+
986
+ #: templates/admin/modal/tabs/import-text.php:45
987
+ msgid "Check any ingredient groups in this list:"
988
+ msgstr "Échale un ojo a los ingredientes grupales de esta lista:"
989
+
990
+ #: templates/admin/modal/tabs/import-text.php:57
991
+ msgid "Check any instruction groups in this list:"
992
+ msgstr "Échale un ojo a las instrucciones grupales de esta lista:"
993
+
994
+ #: templates/admin/modal/tabs/import-text.php:64
995
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:22
996
+ #: templates/admin/modal/tabs/recipe-notes.php:16
997
+ msgid "Notes"
998
+ msgstr "Notas"
999
+
1000
+ #: templates/admin/modal/tabs/import-text.php:69
1001
+ msgid "Finished the text import."
1002
+ msgstr "Terminada la importación de texto."
1003
+
1004
+ #: templates/admin/modal/tabs/recipe-details.php:23
1005
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:54
1006
+ msgid "Image"
1007
+ msgstr "Imagen"
1008
+
1009
+ #: templates/admin/modal/tabs/recipe-details.php:24
1010
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:70
1011
+ msgid "Add Image"
1012
+ msgstr "Añadir imagen"
1013
+
1014
+ #: templates/admin/modal/tabs/recipe-details.php:25
1015
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:71
1016
+ msgid "Remove Image"
1017
+ msgstr "Eliminar imagen"
1018
+
1019
+ #: templates/admin/modal/tabs/recipe-details.php:31
1020
+ msgid "Recipe Name"
1021
+ msgstr "Nombre de la receta"
1022
+
1023
+ #: templates/admin/modal/tabs/recipe-details.php:38
1024
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:87
1025
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:91
1026
+ msgid "Hint"
1027
+ msgstr "Pista"
1028
+
1029
+ #: templates/admin/modal/tabs/recipe-details.php:39
1030
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:92
1031
+ msgid "Select text to add styling or links."
1032
+ msgstr "Selecciona el texto para añadir estilos o enlaces."
1033
+
1034
+ #: templates/admin/modal/tabs/recipe-details.php:44
1035
+ msgid "Don't show"
1036
+ msgstr "No mostrar"
1037
+
1038
+ #: templates/admin/modal/tabs/recipe-details.php:45
1039
+ msgid "Name of post author"
1040
+ msgstr "Nombre del autor de la entrada"
1041
+
1042
+ #: templates/admin/modal/tabs/recipe-details.php:46
1043
+ msgid "Custom author name"
1044
+ msgstr "Nombre del autor personalizado"
1045
+
1046
+ #: templates/admin/modal/tabs/recipe-details.php:49
1047
+ msgid "Custom Author Name"
1048
+ msgstr "Nombre del autor personalizado"
1049
+
1050
+ #: templates/admin/modal/tabs/recipe-details.php:50
1051
+ msgid "Author Name"
1052
+ msgstr "Nombre del autor"
1053
+
1054
+ #: templates/admin/modal/tabs/recipe-details.php:54
1055
+ msgid "people"
1056
+ msgstr "personas"
1057
+
1058
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:19
1059
+ msgid "Amount"
1060
+ msgstr "Cantidad"
1061
+
1062
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:20
1063
+ msgid "Unit"
1064
+ msgstr "Unidad"
1065
+
1066
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:28
1067
+ msgid "Ingredient Group"
1068
+ msgstr "Ingrediente grupal"
1069
+
1070
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:35
1071
+ msgid "olive oil"
1072
+ msgstr "aceite de oliva"
1073
+
1074
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:36
1075
+ msgid "extra virgin"
1076
+ msgstr "virgen extra"
1077
+
1078
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:44
1079
+ msgid "Add Ingredient"
1080
+ msgstr "Añadir ingrediente"
1081
+
1082
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:45
1083
+ msgid "Add Ingredient Group"
1084
+ msgstr "Añadir ingrediente grupal"
1085
+
1086
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:53
1087
+ msgid "Instruction"
1088
+ msgstr "Intrucción"
1089
+
1090
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:60
1091
+ msgid "Instruction Group"
1092
+ msgstr "Instrucción grupal"
1093
+
1094
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:81
1095
+ msgid "Add Instruction"
1096
+ msgstr "Añadir instrucción"
1097
+
1098
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:82
1099
+ msgid "Add Instruction Group"
1100
+ msgstr "Añadir instrucción grupal"
1101
+
1102
+ #: templates/admin/modal/tabs/recipe-ingredients-instructions.php:88
1103
+ msgid ""
1104
+ "Use the TAB key to easily move from field to field and add "
1105
+ "ingredients/instructions without having to click the button."
1106
+ msgstr ""
1107
+ "Usa la tecla TAB para mover fácilmente de campo a capo y para añadir "
1108
+ "ingredientes/instrucciones sin tener que hacer clic en el botón."
1109
+
1110
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:15
1111
+ msgid ""
1112
+ "The %s shortcode can be used to add a link that jumps your visitors to a "
1113
+ "recipe on the page."
1114
+ msgstr ""
1115
+ "El atajo %s puede usarse para añadir un enlace que lleve a tus visitantes a "
1116
+ "la receta que está en la página."
1117
+
1118
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:17
1119
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:17
1120
+ msgid "Shortcode Examples"
1121
+ msgstr "Exjemplos de atajos"
1122
+
1123
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:20
1124
+ msgid ""
1125
+ "Add a link that jumps to the first recipe found on the page with \"Jump to "
1126
+ "Recipe\" as the link text."
1127
+ msgstr ""
1128
+ "Añadir un enlace que lleve a la primera receta que se encuentre en la página "
1129
+ "con \"Ir a la Receta\" como texto para el enlace."
1130
+
1131
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:24
1132
+ msgid ""
1133
+ "Add a link that jumps to the recipe with ID 123 with \"Jump to Recipe\" as "
1134
+ "the link text."
1135
+ msgstr ""
1136
+ "Añadir un enlace que lleve a la receta con el ID 123 con \"Ir a la Receta\" "
1137
+ "como texto para el enlace."
1138
+
1139
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:28
1140
+ msgid ""
1141
+ "Add a link that jumps to the recipe with ID 123 with \"View Recipe\" as the "
1142
+ "link text."
1143
+ msgstr ""
1144
+ "Añadir un enlace que lleve a la receta con el ID 123 con \"Ver Receta\" como "
1145
+ "texto para el enlace."
1146
+
1147
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:30
1148
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:30
1149
+ msgid "Shortcode Builder"
1150
+ msgstr "Constructor de atajos"
1151
+
1152
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:39
1153
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:39
1154
+ msgid "Text"
1155
+ msgstr "Texto"
1156
+
1157
+ #: templates/admin/modal/tabs/recipe-snippets-jump.php:41
1158
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:41
1159
+ msgid "Leave blank to use default"
1160
+ msgstr "Dejar en blanco para usar el predeterminado"
1161
+
1162
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:15
1163
+ msgid "The %s shortcode can be used to add a link for printing a recipe."
1164
+ msgstr "El atajo %s puede usarse para añadir un enlace que imprima una receta."
1165
+
1166
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:20
1167
+ msgid ""
1168
+ "Add a link that prints the first recipe found on the page with \"Print "
1169
+ "Recipe\" as the link text."
1170
+ msgstr ""
1171
+ "Añadir un enlace que imprima la primera receta encontrada en la página con "
1172
+ "\"Imprimir Receta\" como texto para el enlace."
1173
+
1174
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:24
1175
+ msgid ""
1176
+ "Add a link that prints the recipe with ID 123 with \"Print Recipe\" as the "
1177
+ "link text."
1178
+ msgstr ""
1179
+ "Añadir un enlace que imprima la receta con el ID 123 con \"Imprimir Receta\" "
1180
+ "como texto para el enlace."
1181
+
1182
+ #: templates/admin/modal/tabs/recipe-snippets-print.php:28
1183
+ msgid ""
1184
+ "Add a link that prints the recipe with ID 123 with \"Print my new Recipe\" "
1185
+ "as the link text."
1186
+ msgstr ""
1187
+ "Añadir un enlace que imprima la receta con el ID 123 con \"Imprimir mi nueva "
1188
+ "Receta\" como texto para el enlace."
1189
+
1190
+ #: templates/admin/settings/appearance.php:17
1191
+ msgid "Recipe Fields"
1192
+ msgstr "Campos de Receta"
1193
+
1194
+ #: templates/admin/settings/appearance.php:22
1195
+ msgid "Recipe Image"
1196
+ msgstr "Imagen de Receta"
1197
+
1198
+ #: templates/admin/settings/appearance.php:28
1199
+ msgid "Use featured image of parent post if no recipe image is set"
1200
+ msgstr ""
1201
+ "Usar la imagen destacada de la entrada padre si no se ha establecido una "
1202
+ "imagen para la receta"
1203
+
1204
+ #: templates/admin/settings/appearance.php:34
1205
+ msgid "Nutrition Label"
1206
+ msgstr "Etiqueta de nutrición"
1207
+
1208
+ #: templates/admin/settings/appearance.php:40
1209
+ msgid "Display in recipe template"
1210
+ msgstr "Mostrar en la plantilla de receta"
1211
+
1212
+ #: templates/admin/settings/appearance.php:44
1213
+ msgid "Only available in"
1214
+ msgstr "Solo disponible para"
1215
+
1216
+ #: templates/admin/settings/appearance.php:46
1217
+ msgid ""
1218
+ "Display the nutrition label at its default location in the recipe template."
1219
+ msgstr ""
1220
+ "Mostrar la etiqueta de nutrición en su posición predeterminada en la "
1221
+ "plantilla de receta."
1222
+
1223
+ #: templates/admin/settings/appearance.php:53
1224
+ msgid "Recipe Template Options"
1225
+ msgstr "Opciones de Plantilla de Receta"
1226
+
1227
+ #: templates/admin/settings/appearance.php:55
1228
+ msgid "Note: not all options will affect every recipe template."
1229
+ msgstr ""
1230
+ "Nota: no todas las opciones afectarán a todas las plantillas de receta."
1231
+
1232
+ #: templates/admin/settings/appearance.php:61
1233
+ msgid "Background Color"
1234
+ msgstr "Color de fondo"
1235
+
1236
+ #: templates/admin/settings/appearance.php:69
1237
+ msgid "Border Color"
1238
+ msgstr "Color del borde"
1239
+
1240
+ #: templates/admin/settings/appearance.php:77
1241
+ msgid "Text Color"
1242
+ msgstr "Color del texto"
1243
+
1244
+ #: templates/admin/settings/appearance.php:85
1245
+ msgid "Link Color"
1246
+ msgstr "Color de enlaces"
1247
+
1248
+ #: templates/admin/settings/appearance.php:93
1249
+ msgid "Header Color"
1250
+ msgstr "Color de la cabecera"
1251
+
1252
+ #: templates/admin/settings/appearance.php:101
1253
+ msgid "Icon Color"
1254
+ msgstr "Color de iconos"
1255
+
1256
+ #: templates/admin/settings/appearance.php:109
1257
+ msgid "Accent Color"
1258
+ msgstr "Color de énfasis"
1259
+
1260
+ #: templates/admin/settings/appearance.php:117
1261
+ msgid "Accent Text Color"
1262
+ msgstr "Color del texto resaltado"
1263
+
1264
+ #: templates/admin/settings/appearance.php:125
1265
+ msgid "Accent 2 Color"
1266
+ msgstr "Color de énfasis 2"
1267
+
1268
+ #: templates/admin/settings/appearance.php:133
1269
+ msgid "Accent 2 Text Color"
1270
+ msgstr "Color del texto resaltado 2"
1271
+
1272
+ #: templates/admin/settings/appearance.php:141
1273
+ msgid "Recipe Template"
1274
+ msgstr "Plantilla de Receta"
1275
+
1276
+ #: templates/admin/settings/appearance.php:143
1277
+ msgid "Change the look of recipes on your website."
1278
+ msgstr "Cambiar el aspecto de las recetas en tu página web."
1279
+
1280
+ #: templates/admin/settings/appearance.php:152
1281
+ msgid "Default Recipe Template"
1282
+ msgstr "Plantilla predeterminada de Receta"
1283
+
1284
+ #: templates/admin/settings/appearance.php:165
1285
+ msgid "The default template to use for recipes on your website."
1286
+ msgstr "La plantilla predeterminada a usar para las recetas de tu página web."
1287
+
1288
+ #: templates/admin/settings/appearance.php:171
1289
+ msgid "Default Print Template"
1290
+ msgstr "Plantilla predeterminada para Imprimir"
1291
+
1292
+ #: templates/admin/settings/appearance.php:184
1293
+ msgid "The default template to use when printing a recipe."
1294
+ msgstr "La plantilla predeterminada a usar cuando se imprima una receta."
1295
+
1296
+ #: templates/admin/settings/appearance.php:210
1297
+ msgid "No Screenshot"
1298
+ msgstr "No hay captura de pantalla"
1299
+
1300
+ #: templates/admin/settings/appearance.php:219
1301
+ #: templates/admin/settings/features.php:67
1302
+ #: templates/admin/settings/labels.php:42
1303
+ msgid "Save Changes"
1304
+ msgstr "Guardar cambios"
1305
+
1306
+ #: templates/admin/settings/features.php:17 templates/admin/settings.php:18
1307
+ msgid "Features"
1308
+ msgstr "Funcionalidades"
1309
+
1310
+ #: templates/admin/settings/features.php:19
1311
+ #: templates/admin/settings/labels.php:19
1312
+ msgid "Choose the features you want to use on your website."
1313
+ msgstr "Elige las funcionalidades que quieras usar en tu página web."
1314
+
1315
+ #: templates/admin/settings/features.php:25
1316
+ msgid "Comment Ratings"
1317
+ msgstr "Comentar valoraciones"
1318
+
1319
+ #: templates/admin/settings/features.php:31
1320
+ msgid "Allow visitors to vote on your recipes when commenting"
1321
+ msgstr "Permitir a los visitantes votar tus recetas cuando comenten."
1322
+
1323
+ #: templates/admin/settings/features.php:34
1324
+ #: templates/admin/settings/features.php:61
1325
+ msgid "Learn more"
1326
+ msgstr "Saber más"
1327
+
1328
+ #: templates/admin/settings/features.php:40
1329
+ msgid "Premium Features"
1330
+ msgstr "Funcionalidades Premium"
1331
+
1332
+ #: templates/admin/settings/features.php:45
1333
+ msgid "Choose the Premium features you want to use on your website."
1334
+ msgstr "Elige las funcionalidades Premium que quieras usar en tu página web."
1335
+
1336
+ #: templates/admin/settings/features.php:52
1337
+ msgid "Adjustable Servings"
1338
+ msgstr "Raciones ajustables"
1339
+
1340
+ #: templates/admin/settings/features.php:58
1341
+ msgid "Visitors can adjust the serving size of your recipes"
1342
+ msgstr "Los visitantes pueden ajustar la cantidad de raciones de tus recetas."
1343
+
1344
+ #: templates/admin/settings/labels.php:17 templates/admin/settings.php:17
1345
+ msgid "Labels"
1346
+ msgstr "Etiquetas"
1347
+
1348
+ #: templates/admin/settings.php:16
1349
+ msgid "Appearance"
1350
+ msgstr "Apariencia"
1351
+
1352
+ #: templates/admin/settings.php:27
1353
+ msgid "WP Recipe Maker Settings"
1354
+ msgstr "Ajustes de WP Recipe Maker"
1355
+
1356
+ #. Plugin Name of the plugin/theme
1357
+ msgid "WP Recipe Maker"
1358
+ msgstr "WP Recipe Maker"
1359
+
1360
+ #. Plugin URI of the plugin/theme
1361
+ msgid "http://bootstrapped.ventures/wp-recipe-maker/"
1362
+ msgstr "http://bootstrapped.ventures/wp-recipe-maker/"
1363
+
1364
+ #. Description of the plugin/theme
1365
+ msgid ""
1366
+ "The easy and user-friendly recipe plugin for everyone. Automatic JSON-LD "
1367
+ "metadata for better SEO will get you more visitors!"
1368
+ msgstr ""
1369
+ "Un plugin sencillo y fácil de usar para todo el mundo. ¡Metadatos JSON-LD "
1370
+ "automáticos para un mejor SEO que te conseguirá más visitantes!"
1371
+
1372
+ #. Author of the plugin/theme
1373
+ msgid "Bootstrapped Ventures"
1374
+ msgstr "Bootstrapped Ventures"
1375
+
1376
+ #. Author URI of the plugin/theme
1377
+ msgid "http://bootstrapped.ventures/"
1378
+ 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.7
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
@@ -14,13 +14,17 @@ The easy and user-friendly recipe plugin for everyone. Automatic JSON-LD metadat
14
 
15
  [WP Recipe Maker](http://bootstrapped.ventures/wp-recipe-maker/) is the easy recipe plugin that everyone can use. An easy workflow allows you to add recipes to any post or page with automatic JSON-LD metadata for your recipes. This recipe metadata will improve your SEO and get you more visitors!
16
 
 
 
 
 
17
  An overview of WP Recipe Maker features:
18
 
19
  * **Easy workflow** to add recipes to any post or page
20
  * Uses schema.org/Recipe JSON-LD metadata optimised for **Google Recipe search**
21
  * A combination of JSON-LD and inline metadata to ensure compatibility with **Pinterest Rich Pins**
22
  * **Recipe ratings** in the user comments
23
- * Clean **print recipe** version for your visitors
24
  * **Fallback recipe** shows up when the plugin is disabled
25
  * Add **photos** to any step of the recipe
26
  * Print recipe and **jump to recipe** shortcodes
@@ -30,6 +34,8 @@ An overview of WP Recipe Maker features:
30
  * **Full text search** for your recipes
31
  * Access your recipes through the WordPress **REST API**
32
 
 
 
33
  Currently using another recipe plugin? No problem! You can easily migrate all your existing recipes to WP Recipe Maker if you're using any of the following plugins:
34
 
35
  * EasyRecipe
@@ -37,8 +43,12 @@ Currently using another recipe plugin? No problem! You can easily migrate all yo
37
  * Meal Planner Pro
38
  * BigOven
39
  * ZipList and Zip Recipes
 
 
40
  * (More coming soon!)
41
 
 
 
42
  Looking for some more advanced functionality? We also have the [WP Recipe Maker Premium](http://bootstrapped.ventures/wp-recipe-maker/) add-on available with the following features:
43
 
44
  * Use **ingredient links** for linking to products or other recipes
@@ -82,6 +92,17 @@ Yes! We pride ourselves on offering awesome support and almost always answer sup
82
 
83
  == Changelog ==
84
 
 
 
 
 
 
 
 
 
 
 
 
85
  = 1.11.0 =
86
  * Improvement: Set default value for Author Display field
87
  * Improvement: Noindex the print page
@@ -196,7 +217,10 @@ Yes! We pride ourselves on offering awesome support and almost always answer sup
196
  * Feature: Clean printing of recipes
197
  * Feature: Fallback recipe when the plugin is disabled
198
 
199
- == Upgrade notice =
 
 
 
200
 
201
  = 1.11.0 =
202
  Some improvements to the recipe template
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.1
7
  Stable tag: trunk
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
14
 
15
  [WP Recipe Maker](http://bootstrapped.ventures/wp-recipe-maker/) is the easy recipe plugin that everyone can use. An easy workflow allows you to add recipes to any post or page with automatic JSON-LD metadata for your recipes. This recipe metadata will improve your SEO and get you more visitors!
16
 
17
+ > <strong>Get the most out of WP Recipe Maker!</strong><br>
18
+ > Join our [self-paced email course](https://www.getdrip.com/forms/86388969/submissions/new) and we'll help you get started and learn all the tips and trick for using this plugin.
19
+
20
+ = Features =
21
  An overview of WP Recipe Maker features:
22
 
23
  * **Easy workflow** to add recipes to any post or page
24
  * Uses schema.org/Recipe JSON-LD metadata optimised for **Google Recipe search**
25
  * A combination of JSON-LD and inline metadata to ensure compatibility with **Pinterest Rich Pins**
26
  * **Recipe ratings** in the user comments
27
+ * Clean **print recipe** version for your visitors with optional credit to your website
28
  * **Fallback recipe** shows up when the plugin is disabled
29
  * Add **photos** to any step of the recipe
30
  * Print recipe and **jump to recipe** shortcodes
34
  * **Full text search** for your recipes
35
  * Access your recipes through the WordPress **REST API**
36
 
37
+ = Import Options =
38
+
39
  Currently using another recipe plugin? No problem! You can easily migrate all your existing recipes to WP Recipe Maker if you're using any of the following plugins:
40
 
41
  * EasyRecipe
43
  * Meal Planner Pro
44
  * BigOven
45
  * ZipList and Zip Recipes
46
+ * Yummly
47
+ * Yumprint Recipe Card
48
  * (More coming soon!)
49
 
50
+ = WP Recipe Maker Premium =
51
+
52
  Looking for some more advanced functionality? We also have the [WP Recipe Maker Premium](http://bootstrapped.ventures/wp-recipe-maker/) add-on available with the following features:
53
 
54
  * Use **ingredient links** for linking to products or other recipes
92
 
93
  == Changelog ==
94
 
95
+ = 1.12.0 =
96
+ * Feature: Print Credit message
97
+ * Feature: Add existing recipe through modal
98
+ * Feature: Import Yummly recipes
99
+ * Feature: Import Yumprint Recipe Card recipes
100
+ * Fix: Issue with shortcode preview displaying on the front-end
101
+ * Fix: Prevent importing empty lines
102
+ * Fix: Prevent datatable from outputting errors as alerts
103
+ * Fix: Empty ingredient groups in text import
104
+ * Fix: Text import unit issue in some languages
105
+
106
  = 1.11.0 =
107
  * Improvement: Set default value for Author Display field
108
  * Improvement: Noindex the print page
217
  * Feature: Clean printing of recipes
218
  * Feature: Fallback recipe when the plugin is disabled
219
 
220
+ == Upgrade notice ==
221
+
222
+ = 1.12.0 =
223
+ New import and other features + some bug fixes
224
 
225
  = 1.11.0 =
226
  Some improvements to the recipe template
templates/admin/menu/faq/welcome.php CHANGED
@@ -11,31 +11,25 @@
11
 
12
  ?>
13
 
14
- <h3>Do you want us to promote your website for free?</h3>
15
  <p>
16
- We're happy that you choose WP Recipe Maker for your blog and would love to spread the word and get you even <strong>more visitors</strong>.
17
  </p>
18
  <p>
19
- How? By following your blog and <strong>sharing the best recipes you publish</strong> on our social media accounts!
20
- </p>
21
- <p>
22
- To be able to follow your blog we need to know about your website. Fill in the form below and we'll <strong>promote your recipes for free</strong>!
23
  </p>
24
  <?php
25
  $current_user = wp_get_current_user();
26
  $email = $current_user->user_email;
27
  $website = get_site_url();
28
  ?>
29
- <form action="https://www.getdrip.com/forms/24755599/submissions" method="post" class="wprm-drip-form" data-drip-embedded-form="24755599" target="_blank">
30
- <div>
31
- <label for="fields[email]">Email Address</label><br />
32
- <input type="email" id="fields[email]" name="fields[email]" value="<?php echo esc_attr( $email ); ?>" />
33
- </div>
34
- <div>
35
- <label for="fields[website]">Website</label><br />
36
- <input type="text" id="fields[website]" name="fields[website]" value="<?php echo esc_attr( $website ); ?>" />
37
- </div>
38
  <div>
39
- <input type="submit" name="submit" value="I want you to promote my website!" class="button button-primary" data-drip-attribute="sign-up-button" />
40
  </div>
41
  </form>
11
 
12
  ?>
13
 
14
+ <h3>Get the most out of WP Recipe Maker!</h3>
15
  <p>
16
+ Join our self-paced email course to <strong>help you get started</strong> and learn about all the <strong>tips and tricks</strong> to get the most out of WP Recipe Maker.
17
  </p>
18
  <p>
19
+ Go through the entire course and we'll even <strong>promote your recipes for free</strong>!
 
 
 
20
  </p>
21
  <?php
22
  $current_user = wp_get_current_user();
23
  $email = $current_user->user_email;
24
  $website = get_site_url();
25
  ?>
26
+ <form action="https://www.getdrip.com/forms/86388969/submissions" method="post" class="wprm-drip-form" data-drip-embedded-form="86388969" target="_blank">
27
+ <div>
28
+ <label for="fields[email]">Email Address</label><br />
29
+ <input type="email" id="fields[email]" name="fields[email]" value="<?php echo esc_attr( $email ); ?>" />
30
+ <input type="hidden" name="tags[]" value="wprm-getting-started-welcome" />
31
+ </div>
 
 
 
32
  <div>
33
+ <input type="submit" name="submit" value="Help me get the most out of WP Recipe Maker!" class="button button-primary" data-drip-attribute="sign-up-button" />
34
  </div>
35
  </form>
templates/admin/menu/faq/whats_new.php CHANGED
@@ -11,6 +11,19 @@
11
 
12
  ?>
13
 
 
 
 
 
 
 
 
 
 
 
 
 
 
14
  <h3>2017-01-05 | WP Recipe Maker 1.11.0</h3>
15
  <ul>
16
  <li>Improvement: Set default value for Author Display field</li>
11
 
12
  ?>
13
 
14
+ <h3>2017-01-25 | WP Recipe Maker 1.12.0</h3>
15
+ <ul>
16
+ <li>Feature: Print Credit message</li>
17
+ <li>Feature: Add existing recipe through modal</li>
18
+ <li>Feature: Import Yummly recipes</li>
19
+ <li>Feature: Import Yumprint Recipe Card recipes</li>
20
+ <li>Fix: Issue with shortcode preview displaying on the front-end</li>
21
+ <li>Fix: Prevent importing empty lines</li>
22
+ <li>Fix: Prevent datatable from outputting errors as alerts</li>
23
+ <li>Fix: Empty ingredient groups in text import</li>
24
+ <li>Fix: Text import unit issue in some languages</li>
25
+ </ul>
26
+
27
  <h3>2017-01-05 | WP Recipe Maker 1.11.0</h3>
28
  <ul>
29
  <li>Improvement: Set default value for Author Display field</li>
templates/admin/modal/tabs/insert-recipe.php ADDED
@@ -0,0 +1,24 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ /**
3
+ * Template for the Insert Recipe tab in the modal.
4
+ *
5
+ * @link http://bootstrapped.ventures
6
+ * @since 1.12.0
7
+ *
8
+ * @package WP_Recipe_Maker
9
+ * @subpackage WP_Recipe_Maker/templates/admin/modal/tabs
10
+ */
11
+
12
+ ?>
13
+
14
+ <p>
15
+ <?php esc_html_e( 'Select the existing recipe you would like to insert.', 'wp-recipe-maker' ); ?>
16
+ </p>
17
+ <div class="wprm-shortcode-builder">
18
+ <div class="wprm-shortcode-builder-container">
19
+ <label for="wprm-insert-recipe-id"><?php esc_html_e( 'Recipe', 'wp-recipe-maker' ); ?></label>
20
+ <select id="wprm-insert-recipe-id" class="wprm-recipes-dropdown">
21
+ <option value="0"><?php esc_html_e( 'Select a recipe', 'wp-recipe-maker' ); ?></option>
22
+ </select>
23
+ </div>
24
+ </div>
templates/admin/modal/tabs/recipe-details.php CHANGED
@@ -101,4 +101,8 @@
101
  ?>
102
  </select>
103
  </div><?php endforeach; // Taxonomies. ?>
 
 
 
 
104
  </div>
101
  ?>
102
  </select>
103
  </div><?php endforeach; // Taxonomies. ?>
104
+ <div class='wprm-modal-hint'>
105
+ <span class="wprm-modal-hint-header"><?php esc_html_e( 'Hint', 'wp-recipe-maker' ); ?></span>
106
+ <span class="wprm-modal-hint-text"><?php esc_html_e( 'You can type in any term you want and press ENTER.', 'wp-recipe-maker' ); ?></span>
107
+ </div>
108
  </div>
templates/admin/settings/appearance.php CHANGED
@@ -207,6 +207,17 @@
207
  </p>
208
  </td>
209
  </tr>
 
 
 
 
 
 
 
 
 
 
 
210
  <?php if ( ! WPRM_Addons::is_active( 'premium' ) ) : ?>
211
  <tr>
212
  <th scope="row">
207
  </p>
208
  </td>
209
  </tr>
210
+ <tr>
211
+ <th scope="row">
212
+ <label for="print_credit"><?php esc_html_e( 'Print Credit', 'wp-recipe-maker' ); ?></label>
213
+ </th>
214
+ <td>
215
+ <textarea name="print_credit" rows="2" cols="50" id="print_credit" class="large-text code"><?php echo esc_html( WPRM_Settings::get( 'print_credit' ) ); ?></textarea>
216
+ <p class="description" id="tagline-print_credit">
217
+ <?php esc_html_e( 'Optional text to show at the bottom of the print page.', 'wp-recipe-maker' ); ?>
218
+ </p>
219
+ </td>
220
+ </tr>
221
  <?php if ( ! WPRM_Addons::is_active( 'premium' ) ) : ?>
222
  <tr>
223
  <th scope="row">
templates/admin/settings/features.php CHANGED
@@ -33,6 +33,11 @@
33
  <p class="description">
34
  <a href="http://bootstrapped.ventures/wp-recipe-maker/comment-ratings/" target="_blank"><?php esc_html_e( 'Learn more', 'wp-recipe-maker' ); ?></a>
35
  </p>
 
 
 
 
 
36
  </td>
37
  </tr>
38
  </tbody>
33
  <p class="description">
34
  <a href="http://bootstrapped.ventures/wp-recipe-maker/comment-ratings/" target="_blank"><?php esc_html_e( 'Learn more', 'wp-recipe-maker' ); ?></a>
35
  </p>
36
+ <?php if ( class_exists( 'Jetpack' ) && in_array( 'comments', Jetpack::get_active_modules(), true ) ) : ?>
37
+ <p class="description">
38
+ <?php esc_html_e( 'Warning: comment ratings cannot work with the Jetpack Comments feature you have activated.', 'wp-recipe-maker' ); ?>
39
+ </p>
40
+ <?php endif; ?>
41
  </td>
42
  </tr>
43
  </tbody>
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.11.0
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.12.0
19
  * Author: Bootstrapped Ventures
20
  * Author URI: http://bootstrapped.ventures/
21
  * License: GPL-2.0+