Closed DanielWahl closed 3 years ago
Hello!
Cannot use "use" and namespaces
Please change the title to Fatal error when importing namespaced class
/functions.php
?namespace ...;
statement in it?/functions.php
and I cannot get it working in another filenamespace themename;
already breaks the page.When I use the StarterSite-class in a new file and call the class in functions.php
with new \crla\StarterSite();
I get the following errorPHP Fatal error: Uncaught Error: Class 'crla\StarterSite' not found in ~/wp-content/themes/crla-theme-master/functions.php:65
. After require("src/StarterSite.php")
and use clra/StarterSite
, I don't get any error running wp-cli-run-frontend, but the page is still broken. PhpStorm finds every Class from the right directory (Timber from /vender/timber/timberlib/Timber.php
and StarterSite from src/Startersite.php
.
When I change the namespace of functions.php
, declare Timber as use \Timber\Timber;
, I don't get any error running wp-cli-run-frontend, but the page is still broken.
Please try this.
functions.php
// No namespace!
use crla\StarterSite;
require __DIR__ . '/src/StarterSite.php'; // or Composer's autoloader
new StarterSite();
src/StarterSite.php
namespace crla;
use Timber\Site as TimberSite;
class StarterSite extends TimberSite {
No error, only a warning (Warning: Some code is trying to do a URL redirect.
) running the wp-cli, but the page remains broken.
I tried cloning a completely new Starter-Theme v1 and only changing the functions.php by copy&pasting the StarterSite-class into a new file and configuring as above. Still the same, only a warning and page broken.
Warning: Some code is trying to do a URL redirect.
You may need to check --url
option to make sure it is a canonical URL.
Doesn't new WordPress versions display the actual error when running through a webserver? Try setting WP_DEBUG
to true.
When I leave the StartSite-class inside functions.php
and the page is working, I get the exact same warning running wp-cli.
The --url
option may specify a non-canonical URL and WordPress does a redirect to the canonical one.
wp --url="http://wp.crla.danielwahl.lu/" eval-file wp-cli-run-frontend.php
Warning: Some code is trying to do a URL redirect. Backtrace:
#0 WP_CLI\Utils\wp_redirect_handler(https://wp.crla.danielwahl.lu/) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/class-wp-hook.php:294]
#1 WP_Hook->apply_filters(https://wp.crla.danielwahl.lu/, Array ([0] => https://wp.crla.danielwahl.lu/,[1] => 301)) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/plugin.php:212]
#2 apply_filters(wp_redirect, https://wp.crla.danielwahl.lu/, 301) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/pluggable.php:1290]
#3 wp_redirect(https://wp.crla.danielwahl.lu/, 301) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/canonical.php:799]
#4 redirect_canonical(http://wp.crla.danielwahl.lu/) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/class-wp-hook.php:292]
#5 WP_Hook->apply_filters(, Array ([0] => )) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/class-wp-hook.php:316]
#6 WP_Hook->do_action(Array ([0] => )) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/plugin.php:484]
#7 do_action(template_redirect) called at [/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/template-loader.php:13]
#8 require_once(/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-includes/template-loader.php) called at [phar:///usr/local/bin/wp/vendor/wp-cli/eval-command/src/EvalFile_Command.php(76) : eval()'d code:20]
#9 eval() called at [phar:///usr/local/bin/wp/vendor/wp-cli/eval-command/src/EvalFile_Command.php:76]
#10 EvalFile_Command::execute_eval(/var/www/vhosts/danielwahl.lu/wp.crla.danielwahl.lu/wp-cli-run-frontend.php, Array ()) called at [phar:///usr/local/bin/wp/vendor/wp-cli/eval-command/src/EvalFile_Command.php:39]
#11 EvalFile_Command->__invoke(Array (), Array ())
#12 call_user_func(Array ([0] => EvalFile_Command Object (),[1] => __invoke), Array ([0] => wp-cli-run-frontend.php), Array ()) called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/CommandFactory.php:98]
#13 WP_CLI\Dispatcher\CommandFactory::WP_CLI\Dispatcher\{closure}(Array ([0] => wp-cli-run-frontend.php), Array ())
#14 call_user_func(Closure Object (), Array ([0] => wp-cli-run-frontend.php), Array ()) called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Dispatcher/Subcommand.php:451]
#15 WP_CLI\Dispatcher\Subcommand->invoke(Array ([0] => wp-cli-run-frontend.php), Array (), Array ()) called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php:371]
#16 WP_CLI\Runner->run_command(Array ([0] => eval-file,[1] => wp-cli-run-frontend.php), Array ()) called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php:394]
#17 WP_CLI\Runner->run_command_and_exit() called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php:87]
#18 WP_CLI\Runner->do_early_invoke(before_wp_load) called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Runner.php:1102]
#19 WP_CLI\Runner->start() called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/WP_CLI/Bootstrap/LaunchRunner.php:23]
#20 WP_CLI\Bootstrap\LaunchRunner->process(WP_CLI\Bootstrap\BootstrapState Object ([WP_CLI\Bootstrap\BootstrapStatestate] => Array ())) called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/bootstrap.php:74]
#21 WP_CLI\bootstrap() called at [phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php:27]
#22 include(phar:///usr/local/bin/wp/vendor/wp-cli/wp-cli/php/wp-cli.php) called at [phar:///usr/local/bin/wp/php/boot-phar.php:11]
#23 include(phar:///usr/local/bin/wp/php/boot-phar.php) called at [/usr/local/bin/wp:4]
An s
is missing from the protocol: https://wp.crla.danielwahl.lu/
is the canonical URL.
True, the s
was missing.
Now the errors also were more clear and I found the issue.
public function add_to_twig( $twig ) {
$twig->addExtension( new Twig\Extension\StringLoaderExtension() );
$twig->addFilter( new Twig\TwigFilter( 'myfoo', array( $this, 'myfoo' ) ) );
return $twig;
}
new Twig\Extension
and new Twig\TwigFilter
were a \
missing in the new class-file.
So adding
new \Twig\Extension...
new \Twig\TwigFilter...
Fixed the issue.
@szepeviktor Thanks very much for your help.
You're welcome.
Please consider importing used classes with use Twig\Extension\StringLoaderExtension;
Hi, I can't use the StarterSite (1.x) with namespaces, to extend or use other classes.
I'm trying to create a new object from my class Backend (to enqueue wp-styles, etc), but after creating a new instance, I'm getting the "There has been a critical error on this website"-error.
causes the error.
Even trying to move the StarterSite class to a new file (f.e. src/StartSite.php) and creating the instance in functions.php breaks everything.