Sage 9 + PHP 8.0

I was inquiring earlier about upgrading Sage 9 to work with PHP 8.0 and just found a public github fork of sage which does just that. I saw other inquiries about the same thing, so I thought I would write a message here for those who are looking for this:

Here is the changes in composer.json (not the full file, just the bit with changes):


  "autoload": {
    "psr-4": {
      "App\\": "app/"
    }
  },
  "repositories": [
    { "type": "vcs", "url": "https://github.com/jeh5256/sage-installer"},
    { "type":"vcs", "url":"https://github.com/jeh5256/sage-lib" }
  ],
  "require": {
    "php": ">=7.1",
    "composer/installers": "~2.0",
    "illuminate/support": "^8.0",
    "roots/sage-lib": "dev-master",
    "soberwp/controller": "~2.1.0"
  },
  "require-dev": {
    "squizlabs/php_codesniffer": "^2.8.0",
    "roots/sage-installer": "dev-master"
  },

So basicly just updated to use those github repos and version dev-master. Also had to update composer installer to 2.0 and illuminate/support to 8.0.

I haven’t had much time to test it but seems to work based on my quick test run.

So big thanks to Justin for this!

20 Likes

Thank you for sharing!

After now a bit of more testing and installing, I noticed that sage 9 does not get installed with roave/securityadvisories, because all illuminate/view v5… versions have this issue:

So considering that also, I think it would make a lot of sense to include this in the main sage v9, because it would provide the php8 support and get rid of that security issue.

1 Like

Hi Jeskiv,

I was thrilled in seeing this topic created by you. Almost made my day.
You make it sound so simple to use this “fork”, but I can not get anywhere in knowing what entrypoints/lines to add.

I got a few projects that really needs to go from php7 to php8, and they are somewhat complex - so I still want to have the Sage 9 left of course.

Am I missing out on something?

The OP not only said which file to edit (composer.json), but graciously also dropped a fully functional composer.json that will work.

1 Like

Lifesaver :pray: worked perfectly for us, thanks!

Hi, where can I find the fully functional composer.json?

{
  "name": "roots/sage",
  "type": "wordpress-theme",
  "license": "MIT",
  "description": "WordPress starter theme with a modern development workflow",
  "homepage": "https://roots.io/sage/",
  "authors": [
    {
      "name": "Ben Word",
      "email": "ben@benword.com",
      "homepage": "https://github.com/retlehs"
    },
    {
      "name": "Scott Walkinshaw",
      "email": "scott.walkinshaw@gmail.com",
      "homepage": "https://github.com/swalkinshaw"
    },
    {
      "name": "QWp6t",
      "email": "hi@qwp6t.me",
      "homepage": "https://github.com/qwp6t"
    }
  ],
  "keywords": ["wordpress"],
  "support": {
    "issues": "https://github.com/roots/sage/issues",
    "forum": "https://discourse.roots.io/"
  },
  "autoload": {
    "psr-4": {
      "App\\": "app/"
    }
  },
  "repositories": [
    { "type": "vcs", "url": "https://github.com/jeh5256/sage-installer"},
    { "type":"vcs", "url":"https://github.com/jeh5256/sage-lib" }
  ],
  "require": {
    "php": ">=7.1",
    "composer/installers": "~2.0",
    "illuminate/support": "^8.0",
    "roots/sage-lib": "dev-master",
    "soberwp/controller": "~2.1.0"
  },
  "require-dev": {
    "squizlabs/php_codesniffer": "^2.8.0",
    "roots/sage-installer": "dev-master"
  },
  "scripts": {
    "test": ["phpcs"],
    "post-create-project-cmd": [
      "Roots\\Sage\\Installer\\ComposerScript::postCreateProject"
    ]
  }
}
1 Like

Thanks, I got it working by adding the following:

  "config": {
    "allow-plugins": {
      "composer/installers": true
    },
    "platform-check": false
  }

And adding the PHP8 version into require as well like so:

"php": "^7.1|^8.1",
2 Likes

That did the trick for me! Thank you!

Hi :slight_smile: I attempted the above and still broke my site by updating to PHP 8.1 . Could someone help me understand where I went wrong?

  • My site (on shared hosting) with Sage 9 theme was running fine on PHP 7.4
  • My shared host told me to upgrade to PHP 8 or higher
  • I upgraded to PHP 8.1 and the site crashed (I determined that the crash was caused by my Sage 9 theme, not a plugin)
    -I found this thread and did the following:
  1. Changed the composer.json file in my theme folder to be exactly as @ben wrote above
  2. ran composer update (it seemed to work fine, even asked me for a github token to pull the repositories)

I ran into the SAME ISSUE as before (switch from PHP 7.4 to PHP 8.1 , site crashes (critical error white screen).

I also tried @evance 's version of the composer.json file, ran composer update , and got the same error

Am I missing some step here ? Do I need to do anything else besides changing the file and running composer update ?!

Would be very grateful for any support here- Thanks :slight_smile:

Hi Grace,

  • Please post your full composer.json-file so we can compare (maybe you missed something)
  • We need some more debugging info regarding the critical error / white screen – what exactly does the debug.log say?

Thanks!

1 Like

Hi there @evance ! here is the debugging info: Thanks so much for taking a look :slight_smile:

Deprecated: Return type of Illuminate\Container\Container::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/container/Container.php on line 1405

Deprecated: Return type of Illuminate\Container\Container::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/container/Container.php on line 1416

Deprecated: Return type of Illuminate\Container\Container::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/container/Container.php on line 1428

Deprecated: Return type of Illuminate\Container\Container::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/container/Container.php on line 1441

Deprecated: Return type of Illuminate\Support\Collection::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/collections/Collection.php on line 1459

Deprecated: Return type of Illuminate\Support\Collection::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/collections/Collection.php on line 1470

Deprecated: Return type of Illuminate\Support\Collection::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/collections/Collection.php on line 1482

Deprecated: Return type of Illuminate\Support\Collection::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/collections/Collection.php on line 1497

Deprecated: Return type of Illuminate\Support\Collection::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/collections/Collection.php on line 1414

Deprecated: Return type of Illuminate\Support\Collection::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/collections/Collection.php on line 1404

Deprecated: Return type of Symfony\Component\HttpFoundation\ParameterBag::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/http-foundation/ParameterBag.php on line 210

Deprecated: Return type of Symfony\Component\HttpFoundation\ParameterBag::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/http-foundation/ParameterBag.php on line 220

Deprecated: Return type of Symfony\Component\HttpFoundation\HeaderBag::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/http-foundation/HeaderBag.php on line 255

Deprecated: Return type of Symfony\Component\HttpFoundation\HeaderBag::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/http-foundation/HeaderBag.php on line 265

Deprecated: Return type of Illuminate\Http\Request::offsetExists($offset) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/http/Request.php on line 637

Deprecated: Return type of Illuminate\Http\Request::offsetGet($offset) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/http/Request.php on line 651

Deprecated: Return type of Illuminate\Http\Request::offsetSet($offset, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/http/Request.php on line 663

Deprecated: Return type of Illuminate\Http\Request::offsetUnset($offset) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/http/Request.php on line 674

Deprecated: Return type of Illuminate\View\View::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/view/View.php on line 309

Deprecated: Return type of Illuminate\View\View::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/view/View.php on line 320

Deprecated: Return type of Illuminate\View\View::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/view/View.php on line 332

Deprecated: Return type of Illuminate\View\View::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/view/View.php on line 343

Deprecated: Return type of PhpOption\Some::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/phpoption/phpoption/src/PhpOption/Some.php on line 152

Deprecated: Return type of PhpOption\None::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/phpoption/phpoption/src/PhpOption/None.php on line 118

Deprecated: Return type of Illuminate\Config\Repository::offsetExists($key) should either be compatible with ArrayAccess::offsetExists(mixed $offset): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/config/Repository.php on line 141

Deprecated: Return type of Illuminate\Config\Repository::offsetGet($key) should either be compatible with ArrayAccess::offsetGet(mixed $offset): mixed, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/config/Repository.php on line 152

Deprecated: Return type of Illuminate\Config\Repository::offsetSet($key, $value) should either be compatible with ArrayAccess::offsetSet(mixed $offset, mixed $value): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/config/Repository.php on line 164

Deprecated: Return type of Illuminate\Config\Repository::offsetUnset($key) should either be compatible with ArrayAccess::offsetUnset(mixed $offset): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/illuminate/config/Repository.php on line 175

Deprecated: Return type of Symfony\Component\Finder\Finder::getIterator() should either be compatible with IteratorAggregate::getIterator(): Traversable, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Finder.php on line 608

Deprecated: Return type of Symfony\Component\Finder\Finder::count() should either be compatible with Countable::count(): int, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Finder.php on line 690

Deprecated: Return type of Symfony\Component\Finder\Iterator\FileTypeFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/FileTypeFilterIterator.php on line 42

Deprecated: Return type of Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::getChildren() should either be compatible with RecursiveDirectoryIterator::getChildren(): RecursiveDirectoryIterator, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php on line 85

Deprecated: Return type of Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::rewind() should either be compatible with FilesystemIterator::rewind(): void, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php on line 113

Deprecated: Return type of Symfony\Component\Finder\Iterator\RecursiveDirectoryIterator::current() should either be compatible with FilesystemIterator::current(): SplFileInfo|FilesystemIterator|string, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/RecursiveDirectoryIterator.php on line 61

Deprecated: Return type of Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php on line 55

Deprecated: Return type of Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator::hasChildren() should either be compatible with RecursiveIterator::hasChildren(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php on line 74

Deprecated: Return type of Symfony\Component\Finder\Iterator\ExcludeDirectoryFilterIterator::getChildren() should either be compatible with RecursiveIterator::getChildren(): ?RecursiveIterator, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/ExcludeDirectoryFilterIterator.php on line 79

Deprecated: Return type of Symfony\Component\Finder\Iterator\FilenameFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/FilenameFilterIterator.php on line 28

Deprecated: Return type of Symfony\Component\Finder\Iterator\PathFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily suppress the notice in /homepages/5/d876449378/htdocs/clickandbuilds/test4/wp-content/themes/gyro2/vendor/symfony/finder/Iterator/PathFilterIterator.php on line 27

And here is my composer.json file in my sage theme folder:

{
  "name": "roots/sage",
  "type": "wordpress-theme",
  "license": "MIT",
  "description": "WordPress starter theme with a modern development workflow",
  "homepage": "https://roots.io/sage/",
  "authors": [
    {
      "name": "Ben Word",
      "email": "ben@benword.com",
      "homepage": "https://github.com/retlehs"
    },
    {
      "name": "Scott Walkinshaw",
      "email": "scott.walkinshaw@gmail.com",
      "homepage": "https://github.com/swalkinshaw"
    },
    {
      "name": "QWp6t",
      "email": "hi@qwp6t.me",
      "homepage": "https://github.com/qwp6t"
    }
  ],
  "keywords": [
    "wordpress"
  ],
  "support": {
    "issues": "https://github.com/roots/sage/issues",
    "forum": "https://discourse.roots.io/"
  },
  "autoload": {
    "psr-4": {
      "App\\": "app/"
    }
  },
  "repositories": [
    {
      "type": "vcs",
      "url": "https://github.com/jeh5256/sage-installer"
    },
    {
      "type": "vcs",
      "url": "https://github.com/jeh5256/sage-lib"
    }
  ],
    "config": {
      "allow-plugins": {
        "composer/installers": true
      },
      "platform-check": false
    },
  "require": {
    "php": ">=8.0",
    "composer/installers": "~2.0",
    "illuminate/support": "^8.0",
    "roots/sage-lib": "dev-master",
    "soberwp/controller": "~2.1.0"
  },
  "require-dev": {
    "squizlabs/php_codesniffer": "^2.8.0",
    "roots/sage-installer": "dev-master"
  },
  "scripts": {
    "test": [
      "phpcs"
    ],
    "post-create-project-cmd": [
      "Roots\\Sage\\Installer\\ComposerScript::postCreateProject"
    ]
  }
}

Hi @gracemonahan,

I can only see minor differences between the composer.json-files, specifically

"composer/installers": "~2.0"
"roots/sage-installer": "dev-master"

vs.

"composer/installers": "^2.0",
"roots/sage-installer": "^2.0"

and also that you should move the roots/sage-installer into the required-section (vs. required-dev) but since you say that you have copied the complete composer.json and tried with that to no avail I am clueless as to what might be the culprit here…

Was hoping for some fatal errors in the debug.log – the deprecations won’t cause the white screen of death.

Check your composer.lock-file within the Sage theme directory and make sure that you have the illuminate-packages in version 8.x – e.g.

"name": "illuminate/container",
"version": "v8.83.26",

If the versions there are lower the your composer update didn’t go through properly and you should run that again and post the output here.

Sorry, that’s all off the top of my head…

1 Like

Hi @ben ,

I used the composer you shared and run the update composer. I am using windows, xamp and PHP 8.1.

Fatal error: Uncaught ReflectionException: Class "App\Controllers\App" does not exist in C:\xampp\htdocs\php\wp-content\themes\zaks-sage\vendor\soberwp\controller\src\Loader.php:75 Stack trace: #0 C:\xampp\htdocs\php\wp-content\themes\zaks-sage\vendor\soberwp\controller\src\Loader.php(75): ReflectionClass->__construct('App\\Controllers...') #1 C:\xampp\htdocs\php\wp-content\themes\zaks-sage\vendor\soberwp\controller\src\Loader.php(35): Sober\Controller\Loader->setPath() #2 C:\xampp\htdocs\php\wp-content\themes\zaks-sage\vendor\soberwp\controller\controller.php(41): Sober\Controller\Loader->__construct(Object(Brain\Hierarchy\Hierarchy)) #3 C:\xampp\htdocs\php\wp-includes\class-wp-hook.php(308): Sober\Controller\loader('') #4 C:\xampp\htdocs\php\wp-includes\class-wp-hook.php(332): WP_Hook->apply_filters(NULL, Array) #5 C:\xampp\htdocs\php\wp-includes\plugin.php(517): WP_Hook->do_action(Array) #6 C:\xampp\htdocs\php\wp-settings.php(617): do_action('init') #7 C:\xampp\htdocs\php\wp-config.php(97): require_once('C:\\xampp\\htdocs...') #8 C:\xampp\htdocs\php\wp-load.php(50): require_once('C:\\xampp\\htdocs...') #9 C:\xampp\htdocs\php\wp-admin\admin.php(34): require_once('C:\\xampp\\htdocs...') #10 C:\xampp\htdocs\php\wp-admin\themes.php(10): require_once('C:\\xampp\\htdocs...') #11 {main} thrown in C:\xampp\htdocs\php\wp-content\themes\zaks-sage\vendor\soberwp\controller\src\Loader.php on line 75

Thanks

See How to best ask questions on this forum

1 Like