{"id":377397,"date":"2026-10-07T11:54:48","date_gmt":"2026-10-07T11:54:48","guid":{"rendered":"https:\/\/wordpress.org\/plugins\/cook-app\/"},"modified":"2026-10-07T11:54:21","modified_gmt":"2026-10-07T11:54:21","slug":"cook-app","status":"publish","type":"plugin","link":"https:\/\/de-ch.wordpress.org\/plugins\/cook-app\/","author":68342,"comment_status":"closed","ping_status":"closed","template":"","meta":{"version":"1.0.0","stable_tag":"1.0.0","tested":"7.1.3","requires":"6.0","requires_php":"7.4","requires_plugins":null,"header_name":"Cook App","header_author":"Alex Kirk","header_description":"A personal cookbook for WordPress: store, import, categorize, scale, plan and shop from your own recipes.","assets_banners_color":"c59b41","last_updated":"2026-10-07 11:54:21","external_support_url":"","external_repository_url":"","donate_link":"","header_plugin_uri":"https:\/\/wpapps.kirk.at\/apps\/cook-app\/","header_author_uri":"https:\/\/alex.kirk.at\/","rating":0,"author_block_rating":0,"active_installs":0,"downloads":127,"num_ratings":0,"support_threads":0,"support_threads_resolved":0,"author_block_count":0,"sections":["description","installation","faq","changelog"],"tags":{"1.0.0":{"tag":"1.0.0","author":"akirk","date":"2026-10-07 11:54:21","revision":3732509}},"upgrade_notice":[],"ratings":[],"assets_icons":{"icon-128x128.png":{"filename":"icon-128x128.png","revision":3732508,"resolution":"128x128","location":"assets","locale":"","width":128,"height":128},"icon-256x256.png":{"filename":"icon-256x256.png","revision":3732508,"resolution":"256x256","location":"assets","locale":"","width":256,"height":256}},"assets_banners":{"banner-1544x500.png":{"filename":"banner-1544x500.png","revision":3732819,"resolution":"1544x500","location":"assets","locale":"","width":1544,"height":500},"banner-772x250.png":{"filename":"banner-772x250.png","revision":3732819,"resolution":"772x250","location":"assets","locale":"","width":772,"height":250}},"assets_blueprints":{"blueprint.json":{"filename":"blueprint.json","revision":3732838,"resolution":false,"location":"assets","locale":"","contents":"{\"$schema\":\"https:\\\/\\\/playground.wordpress.net\\\/blueprint-schema.json\",\"landingPage\":\"\\\/cook-app\\\/\",\"login\":true,\"steps\":[{\"step\":\"installPlugin\",\"pluginData\":{\"resource\":\"wordpress.org\\\/plugins\",\"slug\":\"cook-app\"},\"options\":{\"activate\":true}},{\"step\":\"activatePlugin\",\"pluginPath\":\"cook-app\\\/cook-app.php\"},{\"step\":\"runPHP\",\"code\":\"<?php\\nrequire_once '\\\/wordpress\\\/wp-load.php';\\n\\nif ( ! post_type_exists( 'cb-recipes' ) || ! class_exists( '\\\\\\\\CookApp\\\\\\\\Importer' ) || ! class_exists( '\\\\\\\\CookApp\\\\\\\\ServiceContainer' ) ) {\\n\\treturn;\\n}\\n\\n$owner = get_user_by( 'login', 'admin' );\\n$owner_id = $owner ? $owner->ID : 1;\\n$recipe_service = \\\\CookApp\\\\ServiceContainer::default()->recipes();\\n\\n$urls = [\\n\\t9001 => 'https:\\\/\\\/www.gutekueche.at\\\/marillenknoedel-mit-topfenteig-rezept-784',\\n\\t9002 => 'https:\\\/\\\/www.gutekueche.at\\\/cremige-schinkenfleckerln-rezept-23978',\\n];\\n\\nforeach ( $urls as $import_id => $url ) {\\n\\t$parsed = \\\\CookApp\\\\Importer::from_url( $url );\\n\\tif ( ! $parsed ) {\\n\\t\\tcontinue;\\n\\t}\\n\\n\\t$post_id = wp_insert_post( [\\n\\t\\t'import_id'    => $import_id,\\n\\t\\t'post_type'    => 'cb-recipes',\\n\\t\\t'post_status'  => 'publish',\\n\\t\\t'post_title'   => $parsed['title'] ?: __( 'Imported recipe', 'cook-app' ),\\n\\t\\t'post_content' => $parsed['description'] ?? '',\\n\\t\\t'post_author'  => $owner_id,\\n\\t], true );\\n\\n\\tif ( is_wp_error( $post_id ) ) {\\n\\t\\tcontinue;\\n\\t}\\n\\n\\t$recipe_service->apply_parsed_payload( (int) $post_id, $parsed, $url, false );\\n}\\n\"}]}"}},"all_blocks":[],"tagged_versions":["1.0.0"],"block_files":[],"assets_screenshots":{"screenshot-1.jpg":{"filename":"screenshot-1.jpg","revision":3732819,"resolution":"1","location":"assets","locale":"","width":1920,"height":1080},"screenshot-2.jpg":{"filename":"screenshot-2.jpg","revision":3732819,"resolution":"2","location":"assets","locale":"","width":780,"height":1688}},"screenshots":{"1":"A recipe page in Cook App, with its photo and the app navigation for recipes, shopping list, planner, cooking history and ingredients.","2":"The same recipe on a phone, where the navigation wraps and the photo, times and servings stack."}},"plugin_section":[],"plugin_tags":[9610,42481,9608,30481,284845],"plugin_category":[],"plugin_contributors":[77497],"plugin_business_model":[],"class_list":["post-377397","plugin","type-plugin","status-publish","hentry","plugin_tags-cooking","plugin_tags-meal-planner","plugin_tags-recipes","plugin_tags-shopping-list","plugin_tags-wp-app","plugin_contributors-akirk","plugin_committers-akirk"],"banners":{"banner":"https:\/\/ps.w.org\/cook-app\/assets\/banner-772x250.png?rev=3732819","banner_2x":"https:\/\/ps.w.org\/cook-app\/assets\/banner-1544x500.png?rev=3732819","banner_rtl":false,"banner_2x_rtl":false},"icons":{"svg":false,"icon":"https:\/\/ps.w.org\/cook-app\/assets\/icon-128x128.png?rev=3732508","icon_2x":"https:\/\/ps.w.org\/cook-app\/assets\/icon-256x256.png?rev=3732508","generated":false},"screenshots":[{"src":"https:\/\/ps.w.org\/cook-app\/assets\/screenshot-1.jpg?rev=3732819","caption":"A recipe page in Cook App, with its photo and the app navigation for recipes, shopping list, planner, cooking history and ingredients."},{"src":"https:\/\/ps.w.org\/cook-app\/assets\/screenshot-2.jpg?rev=3732819","caption":"The same recipe on a phone, where the navigation wraps and the photo, times and servings stack."}],"raw_content":"<!--section=description-->\n<p><a href=\"https:\/\/playground.wordpress.net\/?blueprint-url=https:\/\/raw.githubusercontent.com\/akirk\/cook-app\/main\/blueprint.json\">Try Cook App in WordPress Playground<\/a> \u00b7 <a href=\"https:\/\/playground.wordpress.net\/?blueprint-url=https:\/\/raw.githubusercontent.com\/akirk\/cook-app\/main\/demo.json\">Try it with demo data<\/a> \u00b7 <a href=\"https:\/\/playground.wordpress.net\/?blueprint-url=https:\/\/raw.githubusercontent.com\/akirk\/cook-app\/main\/blueprint-openstation.json\">Try it in OpenStation<\/a>, the same app opened in desktop mode with the <a href=\"https:\/\/github.com\/WordPress\/openstation\">OpenStation<\/a> plugin.<\/p>\n\n<p>Cook App gives your WordPress site a private recipe app at <code>\/cook-app\/<\/code>. Recipes are stored as WordPress content, with structured ingredients, instructions, categories, cuisines, tags, photos, serving sizes, prep and cook times, source URLs, and notes.<\/p>\n\n<p>It is built for day-to-day cooking rather than public recipe blogging: save recipes from the web, scale portions while you cook, convert between metric and imperial units, track what you have cooked, plan meals for the week, and build a shopping list from the recipes you choose.<\/p>\n\n<h3>Recipe storage<\/h3>\n\n<p>Each recipe is stored as a <code>cb-recipes<\/code> custom post type with recipe taxonomies for category, cuisine, tag, and ingredient. Shopping lists, week plans, and cooking history are stored as user-authored WordPress content so they remain tied to the signed-in user.<\/p>\n\n<h3>Import recipes from the web<\/h3>\n\n<p>Paste a recipe URL and Cook App looks for machine-readable schema.org <code>Recipe<\/code> data expressed as JSON-LD, Microdata, or RDFa. It supports recipe sections, ingredient groups, instruction sections, and recipe images where the structured data exposes them. If automatic parsing is not enough, paste recipe text and preview the detected title, ingredients, and instructions before saving.<\/p>\n\n<p>Recipe parsers are extensible through the <code>cook_app_load_recipe_parsers<\/code> action. Optional parser plugins can add support for other source formats without changing Cook App.<\/p>\n\n<p>Photos can be sideloaded into the WordPress media library and used as the recipe's featured image.<\/p>\n\n<h3>Cook with scaled ingredients<\/h3>\n\n<p>Recipe pages include live portion scaling. Enter the number of servings you want and Cook App rescales parsed ingredient amounts immediately. Unit display can be switched between metric and imperial globally in settings or per recipe while viewing it.<\/p>\n\n<h3>Cooking mode and history<\/h3>\n\n<p>Cooking mode gives you a focused view with a large active step, step navigation, ingredient and instruction checkoffs, browser-saved progress, and screen wake lock where supported. When you finish, Cook App can save that you cooked the recipe. You can also add dated \"cooked this\" entries from recipe pages.<\/p>\n\n<h3>Meal planning and shopping<\/h3>\n\n<p>Use the week planner to place recipes into breakfast, lunch, and dinner slots. Add a recipe's scaled ingredients, or a full week's planned recipes, to your personal shopping list. The shopping list combines compatible duplicate items and includes a focused shop mode with large tap targets, undo, and quick add.<\/p>\n\n<h3>Ingredients and variations<\/h3>\n\n<p>Cook App can help you find recipes by ingredients you have on hand, allowing a configurable number of missing ingredients. Ingredient tools let you browse ingredient pages, replace an ingredient from a recipe view, and merge, group, or rename ingredient terms.<\/p>\n\n<p>Recipe variations let you link adapted recipes to their originals. Use \"Edit as variation\" to create a prefilled child recipe from an existing one.<\/p>\n\n<h3>Browser extension import<\/h3>\n\n<p>Cook App integrates with the <a href=\"https:\/\/github.com\/akirk\/friends-browser-extension\/\">Friends browser extension<\/a>. After authorizing the extension for your site, use the \"Save as Recipe\" action on a recipe page and Cook App will import the current page HTML.<\/p>\n\n<h3>AI and automation<\/h3>\n\n<p>When the WordPress Abilities API is available, Cook App registers abilities for recipes, week plans, and managing ingredients, categories, cuisines, and tags. This allows compatible AI assistants and automations to work with your saved recipes in a structured way.<\/p>\n\n<h3>Features<\/h3>\n\n<ul>\n<li>Store personal recipes in WordPress<\/li>\n<li>Import recipes from URLs or pasted recipe text<\/li>\n<li>Sideload recipe photos into the media library<\/li>\n<li>Categorize by category, cuisine, tag, and ingredient<\/li>\n<li>Support structured ingredients, instructions, and named recipe sections<\/li>\n<li>Scale servings live on recipe pages<\/li>\n<li>Convert between metric and imperial units<\/li>\n<li>Use cooking mode with step navigation and checkoffs<\/li>\n<li>Track cooking history<\/li>\n<li>Build a personal shopping list from scaled recipes<\/li>\n<li>Plan breakfast, lunch, and dinner for the week<\/li>\n<li>Find recipes by ingredients on hand<\/li>\n<li>Merge, group, rename, and replace ingredients<\/li>\n<li>Create and browse recipe variations<\/li>\n<li>Import from the Friends browser extension<\/li>\n<li>Integrate with Static Archive for portable recipe exports<\/li>\n<li>Translatable with the <code>cook-app<\/code> text domain<\/li>\n<\/ul>\n\n<h3>Developer Notes<\/h3>\n\n<h3>App URLs<\/h3>\n\n\n\n\n  URL\n  Page\n\n\n\n\n  <code>\/cook-app\/<\/code>\n  All recipes\n\n\n  <code>\/cook-app\/new<\/code>\n  Create a recipe\n\n\n  <code>\/cook-app\/import<\/code>\n  Import a recipe from a URL or pasted text\n\n\n  <code>\/cook-app\/shopping-list<\/code>\n  Personal shopping list\n\n\n  <code>\/cook-app\/planner<\/code>\n  Weekly meal planner\n\n\n  <code>\/cook-app\/cooked<\/code>\n  Cooking history\n\n\n  <code>\/cook-app\/by-ingredients<\/code>\n  Find recipes by ingredients on hand\n\n\n  <code>\/cook-app\/manage-ingredients<\/code>\n  Merge, group, and rename ingredients\n\n\n  <code>\/cook-app\/settings<\/code>\n  Unit preferences\n\n\n\n\n<h3>Abilities API<\/h3>\n\n<p>When available, Cook App registers these abilities:<\/p>\n\n<ul>\n<li><code>cookbook\/search-recipes<\/code><\/li>\n<li><code>cookbook\/get-recipe<\/code><\/li>\n<li><code>cookbook\/save-recipe<\/code><\/li>\n<li><code>cookbook\/import-recipe<\/code><\/li>\n<li><code>cookbook\/create-recipe-variation<\/code><\/li>\n<li><code>cookbook\/get-week-plan<\/code><\/li>\n<li><code>cookbook\/save-week-plan<\/code><\/li>\n<li><code>cookbook\/list-recipe-terms<\/code><\/li>\n<li><code>cookbook\/merge-recipe-terms<\/code><\/li>\n<li><code>cookbook\/update-recipe-term<\/code><\/li>\n<li><code>cookbook\/delete-recipe-terms<\/code><\/li>\n<\/ul>\n\n<p>The four term abilities take <code>type<\/code> as <code>ingredients<\/code>, <code>categories<\/code>, <code>cuisines<\/code>, or <code>tags<\/code>. Merging ingredients updates saved ingredient IDs while keeping each recipe's original wording. Deletion accepts only unused entries.<\/p>\n\n<h3>Static Archive Integration<\/h3>\n\n<p>Cook App integrates with Static Archive by making recipe posts available for archive generation and by rendering structured recipe meta as Static Archive HTML and Markdown.<\/p>\n\n<!--section=installation-->\n<ol>\n<li>Upload the <code>cook-app<\/code> directory to <code>wp-content\/plugins\/<\/code><\/li>\n<li>Activate the plugin<\/li>\n<li>Visit <code>\/cook-app\/<\/code> on your site<\/li>\n<li>Add a recipe manually or open <code>\/cook-app\/import<\/code> to import one from the web<\/li>\n<\/ol>\n\n<!--section=faq-->\n<dl>\n<dt id=\"where%20do%20i%20manage%20recipes%3F\"><h3>Where do I manage recipes?<\/h3><\/dt>\n<dd><p>Visit <code>\/cook-app\/<\/code> on your site after activating the plugin. The app uses WordPress users and permissions, but it is separate from your active theme.<\/p><\/dd>\n<dt id=\"can%20i%20import%20recipes%20from%20any%20website%3F\"><h3>Can I import recipes from any website?<\/h3><\/dt>\n<dd><p>Cook App imports pages that expose schema.org <code>Recipe<\/code> data as JSON-LD, Microdata, or RDFa. Optional parser plugins can support additional formats. If a site cannot be parsed automatically, you can paste the recipe text and use the preview before saving.<\/p><\/dd>\n<dt id=\"does%20cook%20app%20publish%20my%20recipes%20publicly%3F\"><h3>Does Cook App publish my recipes publicly?<\/h3><\/dt>\n<dd><p>Cook App is designed as a personal app. Recipes are stored in WordPress and viewed through the <code>\/cook-app\/<\/code> app by users with the required permissions.<\/p><\/dd>\n<dt id=\"can%20i%20switch%20between%20metric%20and%20imperial%20units%3F\"><h3>Can I switch between metric and imperial units?<\/h3><\/dt>\n<dd><p>Yes. Set your default in <code>\/cook-app\/settings<\/code>, or switch units while viewing a recipe.<\/p><\/dd>\n<dt id=\"can%20i%20make%20a%20shopping%20list%20from%20a%20weekly%20meal%20plan%3F\"><h3>Can I make a shopping list from a weekly meal plan?<\/h3><\/dt>\n<dd><p>Yes. Add recipes to the week planner, then add the planned recipes' ingredients to your shopping list.<\/p><\/dd>\n<dt id=\"does%20cook%20app%20work%20with%20static%20archive%3F\"><h3>Does Cook App work with Static Archive?<\/h3><\/dt>\n<dd><p>Yes. If the Static Archive plugin is active, Cook App can opt recipes into the archive and render structured recipe content as HTML and Markdown.<\/p><\/dd>\n<dt id=\"is%20cook%20app%20translatable%3F\"><h3>Is Cook App translatable?<\/h3><\/dt>\n<dd><p>Yes. The text domain is <code>cook-app<\/code>, and a German translation is included.<\/p><\/dd>\n\n<\/dl>\n\n<!--section=changelog-->\n<h3>1.0.0<\/h3>\n\n<ul>\n<li>Initial release.<\/li>\n<\/ul>","raw_excerpt":"A personal cookbook for WordPress: store, import, categorize, scale, plan and shop from your own recipes.","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin\/377397","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin"}],"about":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/types\/plugin"}],"replies":[{"embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/comments?post=377397"}],"author":[{"embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wporg\/v1\/users\/akirk"}],"wp:attachment":[{"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/media?parent=377397"}],"wp:term":[{"taxonomy":"plugin_section","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_section?post=377397"},{"taxonomy":"plugin_tags","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_tags?post=377397"},{"taxonomy":"plugin_category","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_category?post=377397"},{"taxonomy":"plugin_contributors","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_contributors?post=377397"},{"taxonomy":"plugin_business_model","embeddable":true,"href":"https:\/\/de-ch.wordpress.org\/plugins\/wp-json\/wp\/v2\/plugin_business_model?post=377397"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}