{
  "features": {
    "networking": true
  },
  "siteOptions": {
    "blogname": "WebP Image Converter & Replacer – Image Optimisation, No Duplicates, Save Disk Space"
  },
  "steps": [
    {
      "step": "installPlugin",
      "pluginData": {
        "resource": "wordpress.org/plugins",
        "slug": "webp-image-converter-replacer"
      }
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/sebastian-CxNdzRd1xtY-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/sebastian-CxNdzRd1xtY-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/sebastian-CxNdzRd1xtY-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/grigorii-shcheglov-YtULKNJ2BSM-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/grigorii-shcheglov-YtULKNJ2BSM-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/grigorii-shcheglov-YtULKNJ2BSM-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/thinh-nguyen-8wIVNc-5YxM-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/thinh-nguyen-8wIVNc-5YxM-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/thinh-nguyen-8wIVNc-5YxM-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/christian-crocker-7ls0DhnAJvw-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/christian-crocker-7ls0DhnAJvw-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/christian-crocker-7ls0DhnAJvw-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/wenhao-ruan-2XTsGRsbEKE-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/wenhao-ruan-2XTsGRsbEKE-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/wenhao-ruan-2XTsGRsbEKE-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/micah-sammie-chaffin-6O6BZerihQw-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/micah-sammie-chaffin-6O6BZerihQw-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/micah-sammie-chaffin-6O6BZerihQw-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/intricate-explorer-_TJGk71ZGDc-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/intricate-explorer-_TJGk71ZGDc-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/intricate-explorer-_TJGk71ZGDc-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/zhenyu-luo-n4XeCKwwrk0-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/zhenyu-luo-n4XeCKwwrk0-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/zhenyu-luo-n4XeCKwwrk0-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/willian-justen-de-vasconcellos-sp5TFLhI3hM-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/willian-justen-de-vasconcellos-sp5TFLhI3hM-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/willian-justen-de-vasconcellos-sp5TFLhI3hM-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/colin-watts-YwwUXa6NvX4-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/colin-watts-YwwUXa6NvX4-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/colin-watts-YwwUXa6NvX4-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/shutter-speed-_OZPiiW-pmo-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/shutter-speed-_OZPiiW-pmo-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/shutter-speed-_OZPiiW-pmo-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/willian-justen-de-vasconcellos-v4rA2O0_IVI-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/willian-justen-de-vasconcellos-v4rA2O0_IVI-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/willian-justen-de-vasconcellos-v4rA2O0_IVI-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/kevin-schmid-9WicLhY0tI8-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/kevin-schmid-9WicLhY0tI8-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/kevin-schmid-9WicLhY0tI8-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/ren-hosoya-xYI_dcYIQas-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/ren-hosoya-xYI_dcYIQas-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/ren-hosoya-xYI_dcYIQas-unsplash.jpg"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/zhenyu-luo-acLp1oYUsUc-unsplash.jpg",
      "data": {
        "resource": "url",
        "url": "https://raw.githubusercontent.com/iwtw-richb/demo-content/refs/heads/main/zhenyu-luo-acLp1oYUsUc-unsplash.jpg"
      }
    },
    {
      "step": "wp-cli",
      "command": "wp media import /wordpress/wp-content/zhenyu-luo-acLp1oYUsUc-unsplash.jpg"
    },
    {
      "step": "login",
      "username": "admin",
      "password": "password"
    },
    {
      "step": "mkdir",
      "path": "/wordpress/wp-content/mu-plugins"
    },
    {
      "step": "writeFile",
      "path": "/wordpress/wp-content/mu-plugins/00-ce-force-media.php",
      "data": "<?php\n/**\n * Plugin Name: CE Force Media (until reached)\n */\n\n// Where we want to land\nfunction ce_force_media_target(){ return self_admin_url('upload.php?mode=list'); }\n\n// 1) Rewrite any later admin redirects back to Media until we've reached it\nadd_filter('wp_redirect', function($location, $status){\n    if( get_option('_ce_force_media_done') || isset($_GET['no_redirect']) ) return $location;\n    if( strpos($location, 'upload.php') !== false ) return $location;\n    if( is_admin() ) return ce_force_media_target();\n    return $location; // front-end redirects handled below\n}, 9999, 2);\n\n// 2) Early push: catches BOTH admin and front-end first load\nadd_action('init', function(){\n    if( get_option('_ce_force_media_done') || isset($_GET['no_redirect']) ) return;\n\n    // Already on Media Library? do nothing here; we'll mark done in load-upload.php\n    $req = $_SERVER['REQUEST_URI'] ?? '';\n    $on_media = (strpos($req, 'upload.php') !== false);\n\n    // If in admin and not on Media -> go there\n    if( is_admin() ){\n        if( defined('DOING_AJAX') && DOING_AJAX ) return;\n        if( ! $on_media ) { wp_redirect( ce_force_media_target() ); exit; }\n        return;\n    }\n\n    // If on the front-end but logged in -> send to Media\n    if( is_user_logged_in() ){\n        if( defined('REST_REQUEST') && REST_REQUEST ) return;\n        wp_redirect( ce_force_media_target() );\n        exit;\n    }\n}, 0);\n\n// 3) Only mark success once Media Library actually loads\nadd_action('load-upload.php', function(){ update_option('_ce_force_media_done', 1, false); }, 0);\n"
    },
    {
      "step": "writeFile",
      "path": "wordpress/wp-content/mu-plugins/show-admin-notice-2.php",
      "data": "<?php\nadd_action(\n'admin_notices',\nfunction() {\n$dismissed = get_user_option( 'dismissed_expose_blueprint_notice-2', get_current_user_id() );\nif ( $dismissed ) {\nreturn;\n}\necho '<div class=\"notice notice-success is-dismissible\" id=\"custom-admin-notice-2\"><p><strong>This is a demo of the \\'WebP Image Converter & Replacer\\' plugin by <a href=\\'https://coreessentials.online/\\' target=\\'_blank\\'>Core Essentials</a></strong></p><ol><li>Hover over a media item below and click \\'<strong>Convert to WebP</strong>\\'.</li><li>After conversion check the \\'<strong>Total Savings via WebP Converter</strong>\\' or hover over the image again to see how much space you saved.</li><li>Click the image to see the quality of the conversion.</li></ol></div>';\n}\n);\nadd_action('wp_ajax_dismiss_custom-admin-notice-2', function() {\ncheck_ajax_referer('custom-admin-notice-2', 'nonce');\n$user_id = get_current_user_id();\nif ( $user_id ) {\nupdate_user_option($user_id, 'dismissed_expose_blueprint_notice-2', 1, false);\nwp_send_json_success();\n} else {\nwp_send_json_error('User not found');\n}\n} );\nadd_action('admin_footer', function() {\n?>\n<script type=\"text/javascript\">\njQuery(document).ready( function($) {\nvar ajaxurl = '<?php echo esc_url( admin_url( 'admin-ajax.php' ) ); ?>';\nvar nonce = '<?php echo esc_html( wp_create_nonce( 'custom-admin-notice-2' ) ); ?>';\n$( '#custom-admin-notice-2' ).on( 'click', '.notice-dismiss', function() {\n$.ajax({\nurl: ajaxurl,\ntype: 'POST',\ndata: {\naction: 'dismiss_custom-admin-notice-2',\nnonce: nonce\n}\n});\n});\n});\n</script>\n<?php\n} );"
    }
  ]
}