Last active
June 16, 2021 18:13
-
-
Save BrechtVds/58bcf9c5b747e0ad13cca51232038589 to your computer and use it in GitHub Desktop.
Example importer for WP Recipe Maker
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?php | |
/** | |
* Example importer. | |
* The importer will automatically be loaded when placed in the /wp-recipe-maker/includes/admin/import/ folder. | |
* | |
* @link http://bootstrapped.ventures | |
* @since 1.20.0 | |
* | |
* @package WP_Recipe_Maker | |
* @subpackage WP_Recipe_Maker/includes/admin/import | |
*/ | |
/** | |
* Example importer. | |
* The importer will automatically be loaded when placed in the /wp-recipe-maker/includes/admin/import/ folder. | |
* | |
* @since 1.20.0 | |
* @package WP_Recipe_Maker | |
* @subpackage WP_Recipe_Maker/includes/admin/import | |
* @author Brecht Vandersmissen <brecht@bootstrapped.ventures> | |
*/ | |
// Make sure the class name matches the file name. | |
class WPRM_Import_Example extends WPRM_Import { | |
/** | |
* Get the UID of this import source. | |
* | |
* @since 1.20.0 | |
*/ | |
public function get_uid() { | |
// This should return a uid (no spaces) representing the import source. | |
// For example "wp-ultimate-recipe", "easyrecipe", ... | |
return 'example'; | |
} | |
/** | |
* Wether or not this importer requires a manual search for recipes. | |
* | |
* @since 1.20.0 | |
*/ | |
public function requires_search() { | |
// Set to true when you need to search through the post content (or somewhere else) to actually find recipes. | |
// When set to true the "search_recipes" function is required. | |
// Usually false is fine as you can find recipes as a custom post type or in a custom table. | |
return false; | |
} | |
/** | |
* Get the name of this import source. | |
* | |
* @since 1.20.0 | |
*/ | |
public function get_name() { | |
// Display name for this importer. | |
return 'Example Recipe Plugin'; | |
} | |
/** | |
* Get HTML for the import settings. | |
* | |
* @since 1.20.0 | |
*/ | |
public function get_settings_html() { | |
// Any HTML can be added here if input is required for doing the import. | |
// Take a look at the WP Ultimate Recipe importer for an example. | |
// Most importers will just need ''. | |
return ''; | |
} | |
/** | |
* Get the total number of recipes to import. | |
* | |
* @since 1.20.0 | |
*/ | |
public function get_recipe_count() { | |
// Return a count for the number of recipes left to import. | |
// Don't include recipes that have already been imported. | |
return 0; | |
} | |
/** | |
* Search for recipes to import. | |
* | |
* @since 1.20.0 | |
* @param int $page Page of recipes to import. | |
*/ | |
public function search_recipes( $page = 0 ) { | |
// Only needed if "search_required" returns true. | |
// Function will be called with increased $page number until finished is set to true. | |
// Will need a custom way of storing the recipes. | |
// Take a look at the Easy Recipe importer for an example. | |
return array( | |
'finished' => true, | |
'recipes' => 0, | |
); | |
} | |
/** | |
* Get a list of recipes that are available to import. | |
* | |
* @since 1.20.0 | |
* @param int $page Page of recipes to get. | |
*/ | |
public function get_recipes( $page = 0 ) { | |
// Return an array of recipes to be imported with name and edit URL. | |
// If not the same number of recipes as in "get_recipe_count" are returned pagination will be used. | |
$recipes = array(); | |
// $recipes[ $post_id ] = array( | |
// 'name' => $post_title, | |
// 'url' => get_edit_post_link( $post_id ), | |
// ); | |
// } | |
return $recipes; | |
} | |
/** | |
* Get recipe with the specified ID in the import format. | |
* | |
* @since 1.20.0 | |
* @param mixed $id ID of the recipe we want to import. | |
* @param array $post_data POST data passed along when submitting the form. | |
*/ | |
public function get_recipe( $id, $post_data ) { | |
// Get the recipe data in WPRM format for a specific ID, corresponding to the ID in the "get_recipes" array. | |
// $post_data will contain any input fields set in the "get_settings_html" function. | |
// Include any fields to backup in "import_backup". | |
$recipe = array( | |
'import_id' => 0, // Important! If set to 0 will create the WPRM recipe as a new post. If set to an ID it will update to post with that ID to become a WPRM post type. | |
'import_backup' => array( | |
'example_recipe_id' => $id, | |
), | |
); | |
// Get and set all the WPRM recipe fields. | |
$recipe['name'] = ''; | |
$recipe['summary'] = ''; | |
$recipe['author_name'] = ''; | |
$recipe['servings_unit'] = ''; | |
$recipe['notes'] = ''; | |
$recipe['image_id'] = 0; | |
$recipe['servings'] = 0; | |
$recipe['prep_time'] = 0; | |
$recipe['cook_time'] = 0; | |
$recipe['total_time'] = 0; | |
// Set recipe options. | |
$recipe['author_display'] = 'default'; // default, disabled, post_author, custom. | |
$recipe['ingredient_links_type'] = 'global'; // global, custom. | |
// Optionally update the GLOBAL ingredient links (Premium only). | |
// Warning, this changes the link for ALL recipes using that ingredient. | |
$recipe['global_ingredient_links'] = array( | |
1 => array( // Term ID or name of the ingredient to update. | |
'url' => '', | |
'nofollow' => 'default', // default, follow, nofollow. | |
), | |
); | |
// Set any recipe tags (custom ones need to be created on the WP Recipe Maker > Manage page first). | |
$recipe['tags'] = array( | |
'course' => array( 1, 2 ), // Use ID of existing terms | |
'cuisine' => array( 'Italian' ), // ...or name of new terms. | |
); | |
// Ingredients have to follow this array structure consisting of groups first. | |
$recipe['ingredients'] = array( | |
array( | |
'name' => '', // Group names can be empty. | |
'ingredients' => array( | |
array( | |
'amount' => '1-2', | |
'unit' => '', | |
'name' => 'apples', // The name field is required. | |
'notes' => '', | |
), | |
array( | |
'raw' => '1 cl olive oil (extra virgin)', // Alternatively pass all ingredient data as raw to have it parsed automatically. | |
), | |
), | |
), | |
array( | |
'name' => 'Another ingredient group', | |
'ingredients' => array( | |
array( | |
'amount' => '', | |
'unit' => '', | |
'name' => 'sage', | |
'notes' => '', | |
'link' => array( // Possible to set a custom ingredient link to be used in this recipe only. | |
'url' => '', | |
'nofollow' => 'default', | |
), | |
), | |
), | |
), | |
); | |
// Instructions have to follow this array structure consisting of groups first. | |
$recipe['instructions'] = array( | |
array( | |
'name' => '', // Group names can be empty. | |
'instructions' => array( | |
array( | |
'text' => 'My first instruction', | |
), | |
array( | |
'text' => '', | |
'image' => 1, // Use the attachment ID of an image. | |
), | |
), | |
), | |
array( | |
'name' => 'Another instruction group', | |
'instructions' => array( | |
array( | |
'text' => 'Another instruction', | |
), | |
), | |
), | |
); | |
// Nutrition Facts. | |
$recipe['nutrition'] = array( | |
'serving_size' => '', | |
'calories' => '', | |
'carbohydrates' => '', | |
'protein' => '', | |
'fat' => '', | |
'saturated_fat' => '', | |
'polyunsaturated_fat' => '', | |
'monounsaturated_fat' => '', | |
'trans_fat' => '', | |
'cholesterol' => '', | |
'sodium' => '', | |
'potassium' => '', | |
'fiber' => '', | |
'sugar' => '', | |
'vitamin_a' => '', | |
'vitamin_c' => '', | |
'calcium' => '', | |
'iron' => '', | |
); | |
return $recipe; | |
} | |
/** | |
* Replace the original recipe with the newly imported WPRM one. | |
* | |
* @since 1.20.0 | |
* @param mixed $id ID of the recipe we want replace. | |
* @param mixed $wprm_id ID of the WPRM recipe to replace with. | |
* @param array $post_data POST data passed along when submitting the form. | |
*/ | |
public function replace_recipe( $id, $wprm_id, $post_data ) { | |
// The recipe with ID $id has been imported and we now have a WPRM recipe with ID $wprm_id (can be the same ID). | |
// $post_data will contain any input fields set in the "get_settings_html" function. | |
// Use this function to do anything after the import, like replacing shortcodes. | |
} | |
} |
@boethius Technically they could be created programmatically but I don't have an example or documentation on how to do that. Have not tried or looked into that before. If you have any further questions, send an email to support@bootstrapped.ventures
Thanks. Excellent plugin. Most examples I found import from local file or from local database. Base on this, I wrote one that import remotely (elastic search server in example) - https://gist.github.com/noogen/8cede8b5cb190dcf0d2bca844f8e96ec
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
@BrechtVds thank you for this template. Is it possible to also import and create Recipe Collections programmatically? I imagine this could be done given the appropriate WPQuery? Thanks!