ErrorException (E_ERROR)
Call to undefined function wp_pagenavi() (View: /var/www/html/wp-content/themes/euro/resources/views/woocommerce/loop/loop-new.blade.php) (View: /var/www/html/wp-content/themes/euro/resources/views/woocommerce/loop/loop-new.blade.php)
Previous exceptions
  • Call to undefined function wp_pagenavi() (View: /var/www/html/wp-content/themes/euro/resources/views/woocommerce/loop/loop-new.blade.php) (0)
  • Call to undefined function wp_pagenavi() (0)
ErrorException thrown with message "Call to undefined function wp_pagenavi() (View: /var/www/html/wp-content/themes/euro/resources/views/woocommerce/loop/loop-new.blade.php) (View: /var/www/html/wp-content/themes/euro/resources/views/woocommerce/loop/loop-new.blade.php)" Stacktrace: #26 ErrorException in /var/www/html/wp-content/uploads/cache/2e123ee2b39da5671491f1609d83a5f18b5d0d6c.php:20 #25 Illuminate\View\Engines\CompilerEngine:handleViewException in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php:45 #24 Illuminate\View\Engines\CompilerEngine:handleViewException in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php:47 #23 Symfony\Component\Debug\Exception\FatalThrowableError in /var/www/html/wp-content/uploads/cache/2e123ee2b39da5671491f1609d83a5f18b5d0d6c.php:20 #22 include in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php:43 #21 Illuminate\View\Engines\PhpEngine:evaluatePath in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/CompilerEngine.php:59 #20 Illuminate\View\Engines\CompilerEngine:get in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php:142 #19 Illuminate\View\View:getContents in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php:125 #18 Illuminate\View\View:renderContents in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php:90 #17 Illuminate\View\View:render in /var/www/html/wp-content/uploads/cache/222f38321bf194521e4b6c9871e8bca51eca9b7c.php:49 #16 include in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php:43 #15 Illuminate\View\Engines\PhpEngine:evaluatePath in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/CompilerEngine.php:59 #14 Illuminate\View\Engines\CompilerEngine:get in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php:142 #13 Illuminate\View\View:getContents in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php:125 #12 Illuminate\View\View:renderContents in /var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php:90 #11 Illuminate\View\View:render in /var/www/html/wp-content/themes/euro/vendor/roots/sage-lib/Template/Blade.php:58 #10 Roots\Sage\Template\Blade:render in /var/www/html/wp-content/themes/euro/app/helpers.php:53 #9 App\template in /var/www/html/wp-content/themes/euro/vendor/kimhf/sage-woocommerce-support/BladeTemplateLoader.php:103 #8 Kimhf\SageWoocommerceSupport\BladeTemplateLoader:woocommerceTemplateLoaderFiles in /var/www/html/wp-includes/class-wp-hook.php:307 #7 WP_Hook:apply_filters in /var/www/html/wp-includes/plugin.php:191 #6 apply_filters in /var/www/html/wp-content/plugins/woocommerce/includes/class-wc-template-loader.php:204 #5 WC_Template_Loader:get_template_loader_files in /var/www/html/wp-content/plugins/woocommerce/includes/class-wc-template-loader.php:87 #4 WC_Template_Loader:template_loader in /var/www/html/wp-includes/class-wp-hook.php:307 #3 WP_Hook:apply_filters in /var/www/html/wp-includes/plugin.php:191 #2 apply_filters in /var/www/html/wp-includes/template-loader.php:104 #1 require_once in /var/www/html/wp-blog-header.php:19 #0 require in /var/www/html/index.php:17
Stack frames (27)
26
ErrorException
/var/www/html/wp-content/uploads/cache/2e123ee2b39da5671491f1609d83a5f18b5d0d6c.php20
25
Illuminate\View\Engines\CompilerEngine handleViewException
/vendor/illuminate/view/Engines/PhpEngine.php45
24
Illuminate\View\Engines\CompilerEngine handleViewException
/vendor/illuminate/view/Engines/PhpEngine.php47
23
Symfony\Component\Debug\Exception\FatalThrowableError
/var/www/html/wp-content/uploads/cache/2e123ee2b39da5671491f1609d83a5f18b5d0d6c.php20
22
include
/vendor/illuminate/view/Engines/PhpEngine.php43
21
Illuminate\View\Engines\PhpEngine evaluatePath
/vendor/illuminate/view/Engines/CompilerEngine.php59
20
Illuminate\View\Engines\CompilerEngine get
/vendor/illuminate/view/View.php142
19
Illuminate\View\View getContents
/vendor/illuminate/view/View.php125
18
Illuminate\View\View renderContents
/vendor/illuminate/view/View.php90
17
Illuminate\View\View render
/var/www/html/wp-content/uploads/cache/222f38321bf194521e4b6c9871e8bca51eca9b7c.php49
16
include
/vendor/illuminate/view/Engines/PhpEngine.php43
15
Illuminate\View\Engines\PhpEngine evaluatePath
/vendor/illuminate/view/Engines/CompilerEngine.php59
14
Illuminate\View\Engines\CompilerEngine get
/vendor/illuminate/view/View.php142
13
Illuminate\View\View getContents
/vendor/illuminate/view/View.php125
12
Illuminate\View\View renderContents
/vendor/illuminate/view/View.php90
11
Illuminate\View\View render
/vendor/roots/sage-lib/Template/Blade.php58
10
Roots\Sage\Template\Blade render
/app/helpers.php53
9
App\template
/vendor/kimhf/sage-woocommerce-support/BladeTemplateLoader.php103
8
Kimhf\SageWoocommerceSupport\BladeTemplateLoader woocommerceTemplateLoaderFiles
/var/www/html/wp-includes/class-wp-hook.php307
7
WP_Hook apply_filters
/var/www/html/wp-includes/plugin.php191
6
apply_filters
/var/www/html/wp-content/plugins/woocommerce/includes/class-wc-template-loader.php204
5
WC_Template_Loader get_template_loader_files
/var/www/html/wp-content/plugins/woocommerce/includes/class-wc-template-loader.php87
4
WC_Template_Loader template_loader
/var/www/html/wp-includes/class-wp-hook.php307
3
WP_Hook apply_filters
/var/www/html/wp-includes/plugin.php191
2
apply_filters
/var/www/html/wp-includes/template-loader.php104
1
require_once
/var/www/html/wp-blog-header.php19
0
require
/var/www/html/index.php17
/var/www/html/wp-content/uploads/cache/2e123ee2b39da5671491f1609d83a5f18b5d0d6c.php
<?php if($product_query->have_posts()): ?>
  <?php while($product_query->have_posts()): ?>
    <?php
      /** @var \WP_Query $product_query */
      $product_query->the_post();
      wc_get_template_part('content', 'product');
    ?>
  <?php endwhile; ?>
<?php else: ?>
  <p><?php echo \Theme\Help::qTransAcf('no_results'); ?></p>
<?php endif; ?>
 
<?php
  woocommerce_product_loop_end();
?>
 
<nav class="woocommerce-pagination">
  <?php
    /** @var \WP_Query $product_query */
      wp_pagenavi( [ 'query' => $product_query ] );
  ?>
</nav>
 
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php
     *
     * @param  string  $__path
     * @param  array   $__data
     * @return string
     */
    protected function evaluatePath($__path, $__data)
    {
        $obLevel = ob_get_level();
 
        ob_start();
 
        extract($__data, EXTR_SKIP);
 
        // We'll evaluate the contents of the view inside a try/catch block so we can
        // flush out any stray output that might get out before an error occurs or
        // an exception is thrown. This prevents any partial views from leaking.
        try {
            include $__path;
        } catch (Exception $e) {
            $this->handleViewException($e, $obLevel);
        } catch (Throwable $e) {
            $this->handleViewException(new FatalThrowableError($e), $obLevel);
        }
 
        return ltrim(ob_get_clean());
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Exception  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Exception
     */
    protected function handleViewException(Exception $e, $obLevel)
    {
        while (ob_get_level() > $obLevel) {
            ob_end_clean();
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php
     * @param  array   $__data
     * @return string
     */
    protected function evaluatePath($__path, $__data)
    {
        $obLevel = ob_get_level();
 
        ob_start();
 
        extract($__data, EXTR_SKIP);
 
        // We'll evaluate the contents of the view inside a try/catch block so we can
        // flush out any stray output that might get out before an error occurs or
        // an exception is thrown. This prevents any partial views from leaking.
        try {
            include $__path;
        } catch (Exception $e) {
            $this->handleViewException($e, $obLevel);
        } catch (Throwable $e) {
            $this->handleViewException(new FatalThrowableError($e), $obLevel);
        }
 
        return ltrim(ob_get_clean());
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Exception  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Exception
     */
    protected function handleViewException(Exception $e, $obLevel)
    {
        while (ob_get_level() > $obLevel) {
            ob_end_clean();
        }
 
Exception message: Call to undefined function wp_pagenavi() (View: /var/www/html/wp-content/themes/euro/resources/views/woocommerce/loop/loop-new.blade.php)
/var/www/html/wp-content/uploads/cache/2e123ee2b39da5671491f1609d83a5f18b5d0d6c.php
<?php if($product_query->have_posts()): ?>
  <?php while($product_query->have_posts()): ?>
    <?php
      /** @var \WP_Query $product_query */
      $product_query->the_post();
      wc_get_template_part('content', 'product');
    ?>
  <?php endwhile; ?>
<?php else: ?>
  <p><?php echo \Theme\Help::qTransAcf('no_results'); ?></p>
<?php endif; ?>
 
<?php
  woocommerce_product_loop_end();
?>
 
<nav class="woocommerce-pagination">
  <?php
    /** @var \WP_Query $product_query */
      wp_pagenavi( [ 'query' => $product_query ] );
  ?>
</nav>
 
Exception message: Call to undefined function wp_pagenavi()
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php
    /**
     * Get the evaluated contents of the view at the given path.
     *
     * @param  string  $__path
     * @param  array   $__data
     * @return string
     */
    protected function evaluatePath($__path, $__data)
    {
        $obLevel = ob_get_level();
 
        ob_start();
 
        extract($__data, EXTR_SKIP);
 
        // We'll evaluate the contents of the view inside a try/catch block so we can
        // flush out any stray output that might get out before an error occurs or
        // an exception is thrown. This prevents any partial views from leaking.
        try {
            include $__path;
        } catch (Exception $e) {
            $this->handleViewException($e, $obLevel);
        } catch (Throwable $e) {
            $this->handleViewException(new FatalThrowableError($e), $obLevel);
        }
 
        return ltrim(ob_get_clean());
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Exception  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Exception
     */
    protected function handleViewException(Exception $e, $obLevel)
    {
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/CompilerEngine.php
     * @param  array   $data
     * @return string
     */
    public function get($path, array $data = [])
    {
        $this->lastCompiled[] = $path;
 
        // If this given view has expired, which means it has simply been edited since
        // it was last compiled, we will re-compile the views so we can evaluate a
        // fresh copy of the view. We'll pass the compiler the path of the view.
        if ($this->compiler->isExpired($path)) {
            $this->compiler->compile($path);
        }
 
        $compiled = $this->compiler->getCompiledPath($path);
 
        // Once we have the path to the compiled file, we will evaluate the paths with
        // typical PHP just like any other templates. We also keep a stack of views
        // which have been rendered for right exception messages to be generated.
        $results = $this->evaluatePath($compiled, $data);
 
        array_pop($this->lastCompiled);
 
        return $results;
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Exception  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Exception
     */
    protected function handleViewException(Exception $e, $obLevel)
    {
        $e = new ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
 
        parent::handleViewException($e, $obLevel);
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php
        $this->factory->callComposer($this);
 
        $contents = $this->getContents();
 
        // Once we've finished rendering the view, we'll decrement the render count
        // so that each sections get flushed out next time a view is created and
        // no old sections are staying around in the memory of an environment.
        $this->factory->decrementRender();
 
        return $contents;
    }
 
    /**
     * Get the evaluated contents of the view.
     *
     * @return string
     */
    protected function getContents()
    {
        return $this->engine->get($this->path, $this->gatherData());
    }
 
    /**
     * Get the data bound to the view instance.
     *
     * @return array
     */
    protected function gatherData()
    {
        $data = array_merge($this->factory->getShared(), $this->data);
 
        foreach ($data as $key => $value) {
            if ($value instanceof Renderable) {
                $data[$key] = $value->render();
            }
        }
 
        return $data;
    }
 
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php
 
            throw $e;
        }
    }
 
    /**
     * Get the contents of the view instance.
     *
     * @return string
     */
    protected function renderContents()
    {
        // We will keep track of the amount of views being rendered so we can flush
        // the section after the complete rendering operation is done. This will
        // clear out the sections for any separate views that may be rendered.
        $this->factory->incrementRender();
 
        $this->factory->callComposer($this);
 
        $contents = $this->getContents();
 
        // Once we've finished rendering the view, we'll decrement the render count
        // so that each sections get flushed out next time a view is created and
        // no old sections are staying around in the memory of an environment.
        $this->factory->decrementRender();
 
        return $contents;
    }
 
    /**
     * Get the evaluated contents of the view.
     *
     * @return string
     */
    protected function getContents()
    {
        return $this->engine->get($this->path, $this->gatherData());
    }
 
    /**
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php
        $this->view = $view;
        $this->path = $path;
        $this->engine = $engine;
        $this->factory = $factory;
 
        $this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
    }
 
    /**
     * Get the string contents of the view.
     *
     * @param  callable|null  $callback
     * @return string
     *
     * @throws \Throwable
     */
    public function render(callable $callback = null)
    {
        try {
            $contents = $this->renderContents();
 
            $response = isset($callback) ? call_user_func($callback, $this, $contents) : null;
 
            // Once we have the contents of the view, we will flush the sections if we are
            // done rendering all views so that there is nothing left hanging over when
            // another view gets rendered in the future by the application developer.
            $this->factory->flushStateIfDoneRendering();
 
            return ! is_null($response) ? $response : $contents;
        } catch (Exception $e) {
            $this->factory->flushState();
 
            throw $e;
        } catch (Throwable $e) {
            $this->factory->flushState();
 
            throw $e;
        }
    }
 
/var/www/html/wp-content/uploads/cache/222f38321bf194521e4b6c9871e8bca51eca9b7c.php
            <h1><?php echo $cat_title; ?> <?= Theme\Help::qTransAcf('page_number'); ?><?php echo e($current_page); ?> - <?= Theme\Help::qTransAcf('company_name'); ?></h1>
          <?php else: ?>
            <h1><?php echo e($cat_title); ?></h1>
          <?php endif; ?>
        <?php endif; ?>
 
        <?php
          /**
           * woocommerce_before_main_content hook.
           *
           * @hooked woocommerce_output_content_wrapper - 10 (outputs opening divs for the content)
           * @hooked woocommerce_breadcrumb - 20
           */
          do_action('woocommerce_before_main_content');
          woocommerce_product_loop_start();
        ?>
 
 
        <?php if( $new_query ): ?>
          <?php echo $__env->make('woocommerce.loop.loop-new', \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>
        <?php else: ?>
          <?php echo $__env->make('woocommerce.loop.loop-old', \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>
        <?php endif; ?>
 
 
        <?php
          /**
           * woocommerce_after_main_content hook.
           *
           * @hooked woocommerce_output_content_wrapper_end - 10 (outputs closing divs for the content)
           */
          do_action('woocommerce_after_main_content');
        ?>
 
      </div>
    </div>
  </div>
  <?php echo $__env->make('global.seo_text', \Illuminate\Support\Arr::except(get_defined_vars(), array('__data', '__path')))->render(); ?>
<?php $__env->stopSection(); ?>
 
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/PhpEngine.php
    /**
     * Get the evaluated contents of the view at the given path.
     *
     * @param  string  $__path
     * @param  array   $__data
     * @return string
     */
    protected function evaluatePath($__path, $__data)
    {
        $obLevel = ob_get_level();
 
        ob_start();
 
        extract($__data, EXTR_SKIP);
 
        // We'll evaluate the contents of the view inside a try/catch block so we can
        // flush out any stray output that might get out before an error occurs or
        // an exception is thrown. This prevents any partial views from leaking.
        try {
            include $__path;
        } catch (Exception $e) {
            $this->handleViewException($e, $obLevel);
        } catch (Throwable $e) {
            $this->handleViewException(new FatalThrowableError($e), $obLevel);
        }
 
        return ltrim(ob_get_clean());
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Exception  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Exception
     */
    protected function handleViewException(Exception $e, $obLevel)
    {
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/Engines/CompilerEngine.php
     * @param  array   $data
     * @return string
     */
    public function get($path, array $data = [])
    {
        $this->lastCompiled[] = $path;
 
        // If this given view has expired, which means it has simply been edited since
        // it was last compiled, we will re-compile the views so we can evaluate a
        // fresh copy of the view. We'll pass the compiler the path of the view.
        if ($this->compiler->isExpired($path)) {
            $this->compiler->compile($path);
        }
 
        $compiled = $this->compiler->getCompiledPath($path);
 
        // Once we have the path to the compiled file, we will evaluate the paths with
        // typical PHP just like any other templates. We also keep a stack of views
        // which have been rendered for right exception messages to be generated.
        $results = $this->evaluatePath($compiled, $data);
 
        array_pop($this->lastCompiled);
 
        return $results;
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Exception  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Exception
     */
    protected function handleViewException(Exception $e, $obLevel)
    {
        $e = new ErrorException($this->getMessage($e), 0, 1, $e->getFile(), $e->getLine(), $e);
 
        parent::handleViewException($e, $obLevel);
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php
        $this->factory->callComposer($this);
 
        $contents = $this->getContents();
 
        // Once we've finished rendering the view, we'll decrement the render count
        // so that each sections get flushed out next time a view is created and
        // no old sections are staying around in the memory of an environment.
        $this->factory->decrementRender();
 
        return $contents;
    }
 
    /**
     * Get the evaluated contents of the view.
     *
     * @return string
     */
    protected function getContents()
    {
        return $this->engine->get($this->path, $this->gatherData());
    }
 
    /**
     * Get the data bound to the view instance.
     *
     * @return array
     */
    protected function gatherData()
    {
        $data = array_merge($this->factory->getShared(), $this->data);
 
        foreach ($data as $key => $value) {
            if ($value instanceof Renderable) {
                $data[$key] = $value->render();
            }
        }
 
        return $data;
    }
 
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php
 
            throw $e;
        }
    }
 
    /**
     * Get the contents of the view instance.
     *
     * @return string
     */
    protected function renderContents()
    {
        // We will keep track of the amount of views being rendered so we can flush
        // the section after the complete rendering operation is done. This will
        // clear out the sections for any separate views that may be rendered.
        $this->factory->incrementRender();
 
        $this->factory->callComposer($this);
 
        $contents = $this->getContents();
 
        // Once we've finished rendering the view, we'll decrement the render count
        // so that each sections get flushed out next time a view is created and
        // no old sections are staying around in the memory of an environment.
        $this->factory->decrementRender();
 
        return $contents;
    }
 
    /**
     * Get the evaluated contents of the view.
     *
     * @return string
     */
    protected function getContents()
    {
        return $this->engine->get($this->path, $this->gatherData());
    }
 
    /**
/var/www/html/wp-content/themes/euro/vendor/illuminate/view/View.php
        $this->view = $view;
        $this->path = $path;
        $this->engine = $engine;
        $this->factory = $factory;
 
        $this->data = $data instanceof Arrayable ? $data->toArray() : (array) $data;
    }
 
    /**
     * Get the string contents of the view.
     *
     * @param  callable|null  $callback
     * @return string
     *
     * @throws \Throwable
     */
    public function render(callable $callback = null)
    {
        try {
            $contents = $this->renderContents();
 
            $response = isset($callback) ? call_user_func($callback, $this, $contents) : null;
 
            // Once we have the contents of the view, we will flush the sections if we are
            // done rendering all views so that there is nothing left hanging over when
            // another view gets rendered in the future by the application developer.
            $this->factory->flushStateIfDoneRendering();
 
            return ! is_null($response) ? $response : $contents;
        } catch (Exception $e) {
            $this->factory->flushState();
 
            throw $e;
        } catch (Throwable $e) {
            $this->factory->flushState();
 
            throw $e;
        }
    }
 
/var/www/html/wp-content/themes/euro/vendor/roots/sage-lib/Template/Blade.php
    public function compiler()
    {
        static $engineResolver;
        if (!$engineResolver) {
            $engineResolver = $this->getContainer()->make('view.engine.resolver');
        }
        return $engineResolver->resolve('blade')->getCompiler();
    }
 
    /**
     * @param string $view
     * @param array  $data
     * @param array  $mergeData
     * @return string
     */
    public function render($view, $data = [], $mergeData = [])
    {
        /** @var \Illuminate\Contracts\Filesystem\Filesystem $filesystem */
        $filesystem = $this->getContainer()['files'];
        return $this->{$filesystem->exists($view) ? 'file' : 'make'}($view, $data, $mergeData)->render();
    }
 
    /**
     * @param string $file
     * @param array  $data
     * @param array  $mergeData
     * @return string
     */
    public function compiledPath($file, $data = [], $mergeData = [])
    {
        $rendered = $this->file($file, $data, $mergeData);
        /** @var EngineInterface $engine */
        $engine = $rendered->getEngine();
 
        if (!($engine instanceof CompilerEngine)) {
            // Using PhpEngine, so just return the file
            return $file;
        }
 
        $compiler = $engine->getCompiler();
/var/www/html/wp-content/themes/euro/app/helpers.php
{
    if (is_null($key)) {
        return sage('config');
    }
    if (is_array($key)) {
        return sage('config')->set($key);
    }
    return sage('config')->get($key, $default);
}
/**
 * @param string $file
 * @param array $data
 * @return string
 */
function template($file, $data = [])
{
    if (remove_action('wp_head', 'wp_enqueue_scripts', 1)) {
        wp_enqueue_scripts();
    }
    return sage('blade')->render($file, $data);
}
/**
 * Retrieve path to a compiled blade view
 * @param $file
 * @param array $data
 * @return string
 */
function template_path($file, $data = [])
{
    return sage('blade')->compiledPath($file, $data);
}
/**
 * @param $asset
 * @return string
 */
function asset_path($asset)
{
    return sage('assets')->getUri($asset);
}
function get_asset($asset)
/var/www/html/wp-content/themes/euro/vendor/kimhf/sage-woocommerce-support/BladeTemplateLoader.php
            $templates[] = 'taxonomy-' . $object->taxonomy;
 
            $templates[] = 'archive-product';
        }
 
        $templates[] = $default_file;
 
        $paths = [
            trim(WC()->template_path(), '/\\'),
        ];
 
        $filter_templates = $this->filterTemplates($templates, $paths);
 
        $template = $this->locateTemplate($filter_templates);
 
        if ($template) {
            $this->data = collect(get_body_class())->reduce(function ($data, $class) use ($template) {
                return apply_filters("sage/template/{$class}/data", $data, $template);
            }, []);
            echo \App\template($template, $this->data);
            // Return the empty index.php in Sage to make WooCommerce happy
            return ['index.php'];
        }
 
        return $search_files;
    }
 
    /**
     * Filter wc_get_template_part located in wc_get_template_part().
     * Loads a template if found in any of the config view paths,
     * and then returns false to stop woocommerce from loading anything.
     *
     * Include $data added by controllers.
     *
     * @param string  $template The template file Woocommerce found and is ready to load.
     * @param mixed   $slug
     * @param string  $name (default: '')
     * @return mixed  Return false to shortcut the loading of the default template if we find one in the theme.
     */
    public function wcGetTemplatePart(string $template, string $slug, string $name)
/var/www/html/wp-includes/class-wp-hook.php
 
        $nesting_level = $this->nesting_level++;
 
        $this->iterations[ $nesting_level ] = array_keys( $this->callbacks );
        $num_args                           = count( $args );
 
        do {
            $this->current_priority[ $nesting_level ] = current( $this->iterations[ $nesting_level ] );
            $priority                                 = $this->current_priority[ $nesting_level ];
 
            foreach ( $this->callbacks[ $priority ] as $the_ ) {
                if ( ! $this->doing_action ) {
                    $args[0] = $value;
                }
 
                // Avoid the array_slice() if possible.
                if ( 0 == $the_['accepted_args'] ) {
                    $value = call_user_func( $the_['function'] );
                } elseif ( $the_['accepted_args'] >= $num_args ) {
                    $value = call_user_func_array( $the_['function'], $args );
                } else {
                    $value = call_user_func_array( $the_['function'], array_slice( $args, 0, (int) $the_['accepted_args'] ) );
                }
            }
        } while ( false !== next( $this->iterations[ $nesting_level ] ) );
 
        unset( $this->iterations[ $nesting_level ] );
        unset( $this->current_priority[ $nesting_level ] );
 
        $this->nesting_level--;
 
        return $value;
    }
 
    /**
     * Calls the callback functions that have been added to an action hook.
     *
     * @since 4.7.0
     *
     * @param array $args Parameters to pass to the callback functions.
/var/www/html/wp-includes/plugin.php
        $all_args = func_get_args(); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
        _wp_call_all_hook( $all_args );
    }
 
    if ( ! isset( $wp_filter[ $hook_name ] ) ) {
        if ( isset( $wp_filter['all'] ) ) {
            array_pop( $wp_current_filter );
        }
 
        return $value;
    }
 
    if ( ! isset( $wp_filter['all'] ) ) {
        $wp_current_filter[] = $hook_name;
    }
 
    // Pass the value to WP_Hook.
    array_unshift( $args, $value );
 
    $filtered = $wp_filter[ $hook_name ]->apply_filters( $value, $args );
 
    array_pop( $wp_current_filter );
 
    return $filtered;
}
 
/**
 * Calls the callback functions that have been added to a filter hook, specifying arguments in an array.
 *
 * @since 3.0.0
 *
 * @see apply_filters() This function is identical, but the arguments passed to the
 *                      functions hooked to `$hook_name` are supplied using an array.
 *
 * @global WP_Hook[] $wp_filter         Stores all of the filters and actions.
 * @global string[]  $wp_current_filter Stores the list of current filters with the current one last.
 *
 * @param string $hook_name The name of the filter hook.
 * @param array  $args      The arguments supplied to the functions hooked to `$hook_name`.
 * @return mixed The filtered value after all hooked functions are applied to it.
/var/www/html/wp-content/plugins/woocommerce/includes/class-wc-template-loader.php
        } elseif (
            ( is_post_type_archive( 'product' ) || is_page( wc_get_page_id( 'shop' ) ) ) &&
            ! self::has_block_template( 'archive-product' )
        ) {
            $default_file = self::$theme_support ? 'archive-product.php' : '';
        } else {
            $default_file = '';
        }
        return $default_file;
    }
 
    /**
     * Get an array of filenames to search for a given template.
     *
     * @since  3.0.0
     * @param  string $default_file The default file name.
     * @return string[]
     */
    private static function get_template_loader_files( $default_file ) {
        $templates   = apply_filters( 'woocommerce_template_loader_files', array(), $default_file );
        $templates[] = 'woocommerce.php';
 
        if ( is_page_template() ) {
            $page_template = get_page_template_slug();
 
            if ( $page_template ) {
                $validated_file = validate_file( $page_template );
                if ( 0 === $validated_file ) {
                    $templates[] = $page_template;
                } else {
                    error_log( "WooCommerce: Unable to validate template path: \"$page_template\". Error Code: $validated_file." ); // phpcs:ignore WordPress.PHP.DevelopmentFunctions.error_log_error_log
                }
            }
        }
 
        if ( is_singular( 'product' ) ) {
            $object       = get_queried_object();
            $name_decoded = urldecode( $object->post_name );
            if ( $name_decoded !== $object->post_name ) {
                $templates[] = "single-product-{$name_decoded}.php";
/var/www/html/wp-content/plugins/woocommerce/includes/class-wc-template-loader.php
     * WooCommerce templates.
     *
     * @param string $template Template to load.
     * @return string
     */
    public static function template_loader( $template ) {
        if ( is_embed() ) {
            return $template;
        }
 
        $default_file = self::get_template_loader_default_file();
 
        if ( $default_file ) {
            /**
             * Filter hook to choose which files to find before WooCommerce does it's own logic.
             *
             * @since 3.0.0
             * @var array
             */
            $search_files = self::get_template_loader_files( $default_file );
            $template     = locate_template( $search_files );
 
            if ( ! $template || WC_TEMPLATE_DEBUG_MODE ) {
                if ( false !== strpos( $default_file, 'product_cat' ) || false !== strpos( $default_file, 'product_tag' ) ) {
                    $cs_template = str_replace( '_', '-', $default_file );
                    $template    = WC()->plugin_path() . '/templates/' . $cs_template;
                } else {
                    $template = WC()->plugin_path() . '/templates/' . $default_file;
                }
            }
        }
 
        return $template;
    }
 
    /**
     * Checks whether a block template with that name exists.
     *
     * **Note: ** This checks both the `templates` and `block-templates` directories
     * as both conventions should be supported.
/var/www/html/wp-includes/class-wp-hook.php
 
        $nesting_level = $this->nesting_level++;
 
        $this->iterations[ $nesting_level ] = array_keys( $this->callbacks );
        $num_args                           = count( $args );
 
        do {
            $this->current_priority[ $nesting_level ] = current( $this->iterations[ $nesting_level ] );
            $priority                                 = $this->current_priority[ $nesting_level ];
 
            foreach ( $this->callbacks[ $priority ] as $the_ ) {
                if ( ! $this->doing_action ) {
                    $args[0] = $value;
                }
 
                // Avoid the array_slice() if possible.
                if ( 0 == $the_['accepted_args'] ) {
                    $value = call_user_func( $the_['function'] );
                } elseif ( $the_['accepted_args'] >= $num_args ) {
                    $value = call_user_func_array( $the_['function'], $args );
                } else {
                    $value = call_user_func_array( $the_['function'], array_slice( $args, 0, (int) $the_['accepted_args'] ) );
                }
            }
        } while ( false !== next( $this->iterations[ $nesting_level ] ) );
 
        unset( $this->iterations[ $nesting_level ] );
        unset( $this->current_priority[ $nesting_level ] );
 
        $this->nesting_level--;
 
        return $value;
    }
 
    /**
     * Calls the callback functions that have been added to an action hook.
     *
     * @since 4.7.0
     *
     * @param array $args Parameters to pass to the callback functions.
/var/www/html/wp-includes/plugin.php
        $all_args = func_get_args(); // phpcs:ignore PHPCompatibility.FunctionUse.ArgumentFunctionsReportCurrentValue.NeedsInspection
        _wp_call_all_hook( $all_args );
    }
 
    if ( ! isset( $wp_filter[ $hook_name ] ) ) {
        if ( isset( $wp_filter['all'] ) ) {
            array_pop( $wp_current_filter );
        }
 
        return $value;
    }
 
    if ( ! isset( $wp_filter['all'] ) ) {
        $wp_current_filter[] = $hook_name;
    }
 
    // Pass the value to WP_Hook.
    array_unshift( $args, $value );
 
    $filtered = $wp_filter[ $hook_name ]->apply_filters( $value, $args );
 
    array_pop( $wp_current_filter );
 
    return $filtered;
}
 
/**
 * Calls the callback functions that have been added to a filter hook, specifying arguments in an array.
 *
 * @since 3.0.0
 *
 * @see apply_filters() This function is identical, but the arguments passed to the
 *                      functions hooked to `$hook_name` are supplied using an array.
 *
 * @global WP_Hook[] $wp_filter         Stores all of the filters and actions.
 * @global string[]  $wp_current_filter Stores the list of current filters with the current one last.
 *
 * @param string $hook_name The name of the filter hook.
 * @param array  $args      The arguments supplied to the functions hooked to `$hook_name`.
 * @return mixed The filtered value after all hooked functions are applied to it.
/var/www/html/wp-includes/template-loader.php
            if ( 'is_attachment' === $tag ) {
                remove_filter( 'the_content', 'prepend_attachment' );
            }
 
            break;
        }
    }
 
    if ( ! $template ) {
        $template = get_index_template();
    }
 
    /**
     * Filters the path of the current template before including it.
     *
     * @since 3.0.0
     *
     * @param string $template The path of the template to include.
     */
    $template = apply_filters( 'template_include', $template );
    if ( $template ) {
        include $template;
    } elseif ( current_user_can( 'switch_themes' ) ) {
        $theme = wp_get_theme();
        if ( $theme->errors() ) {
            wp_die( $theme->errors() );
        }
    }
    return;
}
 
/var/www/html/wp-blog-header.php
<?php
/**
 * Loads the WordPress environment and template.
 *
 * @package WordPress
 */
 
if ( ! isset( $wp_did_header ) ) {
 
    $wp_did_header = true;
 
    // Load the WordPress library.
    require_once __DIR__ . '/wp-load.php';
 
    // Set up the WordPress query.
    wp();
 
    // Load the theme template.
    require_once ABSPATH . WPINC . '/template-loader.php';
 
}
 
/var/www/html/index.php
<?php
/**
 * Front to the WordPress application. This file doesn't do anything, but loads
 * wp-blog-header.php which does and tells WordPress to load the theme.
 *
 * @package WordPress
 */
 
/**
 * Tells WordPress to load the WordPress theme and output it.
 *
 * @var bool
 */
define( 'WP_USE_THEMES', true );
 
/** Loads the WordPress Environment and Template */
require __DIR__ . '/wp-blog-header.php';
 

Environment & details:

empty
empty
empty
Key Value
selCurrency uah
empty
Key Value
SERVER_SOFTWARE nginx/1.18.0
REQUEST_URI /obshhaya-massa-kg/41000/
KUBERNETES_PORT tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT 443
UKREUROMAZ_NGINX_SERVICE_HOST 10.101.120.216
HOSTNAME ukreuromaz-nginx-6668f5fd75-kbmbt
DB_PORT $(db_port)
SHLVL 1
HOME /var/lib/nginx
DB_NAME ukreuromaz-prod
UKREUROMAZ_NGINX_PORT tcp://10.101.120.216:80
UKREUROMAZ_NGINX_SERVICE_PORT 80
UKREUROMAZ_NGINX_PORT_80_TCP_ADDR 10.101.120.216
UKREUROMAZ_NGINX_PORT_80_TCP_PORT 80
KUBERNETES_PORT_443_TCP_ADDR 10.96.0.1
UKREUROMAZ_NGINX_PORT_80_TCP_PROTO tcp
PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT 443
KUBERNETES_PORT_443_TCP_PROTO tcp
LD_PRELOAD /usr/lib/preloadable_libiconv.so php
UKREUROMAZ_NGINX_PORT_80_TCP tcp://10.101.120.216:80
DB_PASS 0GOR3r8gHrFiyOVMZ6BZ9Reyb9TfWD
KUBERNETES_PORT_443_TCP tcp://10.96.0.1:443
KUBERNETES_SERVICE_PORT_HTTPS 443
KUBERNETES_SERVICE_HOST 10.96.0.1
PWD /var/www/html
UKREUROMAZ_NGINX_SERVICE_PORT_HTTP 80
DB_HOST 192.168.2.10
DB_USER ukreuromaz-user-prod
USER nginx
HTTP_CF_CONNECTING_IP 52.90.50.252
HTTP_USER_AGENT claudebot
HTTP_ACCEPT */*
HTTP_CF_VISITOR {\"scheme\":\"https\"}
HTTP_CF_RAY 86baf8c2ad269c49-IAD
HTTP_ACCEPT_ENCODING gzip, br
HTTP_CF_IPCOUNTRY US
HTTP_CDN_LOOP cloudflare
HTTP_X_ORIGINAL_FORWARDED_FOR 52.90.50.252
HTTP_X_SCHEME https
HTTP_X_FORWARDED_SCHEME https
HTTP_X_FORWARDED_PROTO https
HTTP_X_FORWARDED_PORT 443
HTTP_X_FORWARDED_HOST ukreuromaz.com
HTTP_X_FORWARDED_FOR 172.70.175.166
HTTP_X_REAL_IP 172.70.175.166
HTTP_X_REQUEST_ID 984cd71e67bf1366b54da8b7f262c49d
HTTP_HOST ukreuromaz.com
HTTPS on
REDIRECT_STATUS 200
SERVER_NAME _
SERVER_PORT 80
SERVER_ADDR 10.10.79.13
REMOTE_PORT 32818
REMOTE_ADDR 192.168.2.6
GATEWAY_INTERFACE CGI/1.1
REQUEST_SCHEME http
SERVER_PROTOCOL HTTP/1.1
DOCUMENT_URI /index.php
SCRIPT_NAME /index.php
CONTENT_LENGTH
CONTENT_TYPE
REQUEST_METHOD GET
QUERY_STRING
PATH_TRANSLATED /var/www/html/index.php
SCRIPT_FILENAME /var/www/html/index.php
DOCUMENT_ROOT /var/www/html
FCGI_ROLE RESPONDER
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1711664051.8982
REQUEST_TIME 1711664051
empty
0. Whoops\Handler\PrettyPageHandler