TypeError
sizeof(): Argument #1 ($value) must be of type Countable|array, false given TypeError thrown with message "sizeof(): Argument #1 ($value) must be of type Countable|array, false given" Stacktrace: #27 TypeError in /sites/localhost/html/public/app/themes/247able-theme/resources/views/product/summary.php:10 #26 require in /sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php:107 #25 Illuminate\Filesystem\Filesystem:Illuminate\Filesystem\{closure} in /sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php:108 #24 Illuminate\Filesystem\Filesystem:getRequire in /sites/localhost/html/vendor/illuminate/view/Engines/PhpEngine.php:58 #23 Illuminate\View\Engines\PhpEngine:evaluatePath in /sites/localhost/html/vendor/illuminate/view/Engines/PhpEngine.php:38 #22 Illuminate\View\Engines\PhpEngine:get in /sites/localhost/html/vendor/illuminate/view/View.php:139 #21 Illuminate\View\View:getContents in /sites/localhost/html/vendor/illuminate/view/View.php:122 #20 Illuminate\View\View:renderContents in /sites/localhost/html/vendor/illuminate/view/View.php:91 #19 Illuminate\View\View:render in /sites/localhost/html/vendor/wp-kit/utils/helpers.php:62 #18 view in /sites/localhost/html/public/app/themes/247able-theme/resources/widgets/ProductSummaryWidget.php:26 #17 App\Widgets\ProductSummaryWidget:widget in /sites/localhost/html/public/wp/wp-includes/class-wp-widget.php:394 #16 WP_Widget:display_callback in /sites/localhost/html/public/wp/wp-includes/widgets.php:845 #15 dynamic_sidebar in /sites/localhost/html/public/app/themes/247able-theme/resources/views/product/single.php:59 #14 require in /sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php:107 #13 Illuminate\Filesystem\Filesystem:Illuminate\Filesystem\{closure} in /sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php:108 #12 Illuminate\Filesystem\Filesystem:getRequire in /sites/localhost/html/vendor/illuminate/view/Engines/PhpEngine.php:58 #11 Illuminate\View\Engines\PhpEngine:evaluatePath in /sites/localhost/html/vendor/illuminate/view/Engines/PhpEngine.php:38 #10 Illuminate\View\Engines\PhpEngine:get in /sites/localhost/html/vendor/illuminate/view/View.php:139 #9 Illuminate\View\View:getContents in /sites/localhost/html/vendor/illuminate/view/View.php:122 #8 Illuminate\View\View:renderContents in /sites/localhost/html/vendor/illuminate/view/View.php:91 #7 Illuminate\View\View:render in /sites/localhost/html/vendor/wp-kit/utils/helpers.php:62 #6 view in /sites/localhost/html/public/app/themes/247able-theme/woocommerce/content-single-product.php:137 #5 require in /sites/localhost/html/public/wp/wp-includes/template.php:812 #4 load_template in /sites/localhost/html/public/app/plugins/woocommerce/includes/wc-core-functions.php:284 #3 wc_get_template_part in /sites/localhost/html/public/app/plugins/woocommerce/templates/single-product.php:37 #2 include in /sites/localhost/html/public/wp/wp-includes/template-loader.php:106 #1 require_once in /sites/localhost/html/public/wp/wp-blog-header.php:19 #0 require in /sites/localhost/html/public/index.php:7
Stack frames (28)
27
TypeError
/public/app/themes/247able-theme/resources/views/product/summary.php10
26
require
/vendor/illuminate/filesystem/Filesystem.php107
25
Illuminate\Filesystem\Filesystem Illuminate\Filesystem\{closure}
/vendor/illuminate/filesystem/Filesystem.php108
24
Illuminate\Filesystem\Filesystem getRequire
/vendor/illuminate/view/Engines/PhpEngine.php58
23
Illuminate\View\Engines\PhpEngine evaluatePath
/vendor/illuminate/view/Engines/PhpEngine.php38
22
Illuminate\View\Engines\PhpEngine get
/vendor/illuminate/view/View.php139
21
Illuminate\View\View getContents
/vendor/illuminate/view/View.php122
20
Illuminate\View\View renderContents
/vendor/illuminate/view/View.php91
19
Illuminate\View\View render
/vendor/wp-kit/utils/helpers.php62
18
view
/public/app/themes/247able-theme/resources/widgets/ProductSummaryWidget.php26
17
App\Widgets\ProductSummaryWidget widget
/public/wp/wp-includes/class-wp-widget.php394
16
WP_Widget display_callback
/public/wp/wp-includes/widgets.php845
15
dynamic_sidebar
/public/app/themes/247able-theme/resources/views/product/single.php59
14
require
/vendor/illuminate/filesystem/Filesystem.php107
13
Illuminate\Filesystem\Filesystem Illuminate\Filesystem\{closure}
/vendor/illuminate/filesystem/Filesystem.php108
12
Illuminate\Filesystem\Filesystem getRequire
/vendor/illuminate/view/Engines/PhpEngine.php58
11
Illuminate\View\Engines\PhpEngine evaluatePath
/vendor/illuminate/view/Engines/PhpEngine.php38
10
Illuminate\View\Engines\PhpEngine get
/vendor/illuminate/view/View.php139
9
Illuminate\View\View getContents
/vendor/illuminate/view/View.php122
8
Illuminate\View\View renderContents
/vendor/illuminate/view/View.php91
7
Illuminate\View\View render
/vendor/wp-kit/utils/helpers.php62
6
view
/public/app/themes/247able-theme/woocommerce/content-single-product.php137
5
require
/public/wp/wp-includes/template.php812
4
load_template
/public/app/plugins/woocommerce/includes/wc-core-functions.php284
3
wc_get_template_part
/public/app/plugins/woocommerce/templates/single-product.php37
2
include
/public/wp/wp-includes/template-loader.php106
1
require_once
/public/wp/wp-blog-header.php19
0
require
/public/index.php7
/sites/localhost/html/public/app/themes/247able-theme/resources/views/product/summary.php
<div class="summaryBlock js-configurable-product-bind">
        
    <h5 class="redHead"><?php _e('Summary', '247able'); ?></h5>
        
    <ul class="no-bullet">
        
        <?php 
            
            $cat_count = sizeof( get_the_terms( $product->get_id(), 'product_cat' ) );
            $tag_count = sizeof( get_the_terms( $product->get_id(), 'product_tag' ) );
            
        ?>
 
        <?php echo get_the_term_list_by_args( $product->get_id(), 'product_brand', function($term) { return ! $term->parent; }, '<li>' . _n( 'Brand:', 'Brands:', $cat_count, '247able' ) . ' ', ', ', '</li>' ); ?>
        
        <?php echo $product->get_categories( ', ', '<li>' . _n( 'Category:', 'Categories:', $cat_count, '247able' ) . ' ', '</li>' ); ?>
        
        <?php echo $product->get_tags( ', ', '<li>' . _n( 'Tag:', 'Tags:', $tag_count, '247able' ) . ' ', '</li>' ); ?>
        
        <li class="product-sku"><?php _e( 'Part Number:', '247able' ); ?> 
        
            <span itemprop="sku" <?php echo $product->is_type('configurable') ? 'rv-text="product:sku"' : ''; ?>>
            
                <?php echo ( $sku = $product->get_sku() ) ? $sku : ''; ?>
                
            </span>
            
        </li>
    
        <?php if($product->get_weight()) : ?>
    
            <li class="product-weight"><?php _e( 'Packaged Weight:', '247able' ); ?>
            
                <span itemprop="weight" <?php echo $product->is_type('configurable') ? 'rv-text="product:weight"' : ''; ?>>
                
                    <?php echo $product->get_weight(); ?>
                    
                </span>
                
                <span><?php echo strtoupper(get_option('woocommerce_weight_unit')); ?></span>
Arguments
  1. "sizeof(): Argument #1 ($value) must be of type Countable|array, false given"
    
/sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php
 
    /**
     * Get the returned value of a file.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function getRequire($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
 
            return (static function () use ($__path, $__data) {
                extract($__data, EXTR_SKIP);
 
                return require $__path;
            })();
        }
 
        throw new FileNotFoundException("File does not exist at path {$path}.");
    }
 
    /**
     * Require the given file once.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function requireOnce($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
/sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php
    /**
     * Get the returned value of a file.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function getRequire($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
 
            return (static function () use ($__path, $__data) {
                extract($__data, EXTR_SKIP);
 
                return require $__path;
            })();
        }
 
        throw new FileNotFoundException("File does not exist at path {$path}.");
    }
 
    /**
     * Require the given file once.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function requireOnce($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
 
/sites/localhost/html/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();
 
        // 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 {
            $this->files->getRequire($path, $data);
        } catch (Throwable $e) {
            $this->handleViewException($e, $obLevel);
        }
 
        return ltrim(ob_get_clean());
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Throwable  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Throwable
     */
    protected function handleViewException(Throwable $e, $obLevel)
    {
        while (ob_get_level() > $obLevel) {
            ob_end_clean();
/sites/localhost/html/vendor/illuminate/view/Engines/PhpEngine.php
     * Create a new file engine instance.
     *
     * @param  \Illuminate\Filesystem\Filesystem  $files
     * @return void
     */
    public function __construct(Filesystem $files)
    {
        $this->files = $files;
    }
 
    /**
     * Get the evaluated contents of the view.
     *
     * @param  string  $path
     * @param  array  $data
     * @return string
     */
    public function get($path, array $data = [])
    {
        return $this->evaluatePath($path, $data);
    }
 
    /**
     * 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();
 
        // 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 {
            $this->files->getRequire($path, $data);
/sites/localhost/html/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
     */
    public 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;
    }
 
/sites/localhost/html/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());
    }
 
    /**
/sites/localhost/html/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) ? $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 (Throwable $e) {
            $this->factory->flushState();
 
            throw $e;
        }
    }
 
    /**
     * Get the contents of the view instance.
     *
     * @return string
/sites/localhost/html/vendor/wp-kit/utils/helpers.php
    }
 
    if ( ! function_exists('view') ) {
        
        /**
         * Helper function to build views.
         *
         * @param string $view      The view relative path, name.
         * @param array  $data      Passed data.
         * @param array  $mergeData
         *
         * @return string
         */
        function view($view = null, array $data = [], array $mergeData = [])
        {
            $factory = app('view');
            if (func_num_args() === 0) {
                return $factory;
            }
            return $factory->make($view, $data, $mergeData)->render();
        }
        
    }
    
    /*----------------------------------------------*\
        #PATHS
    \*----------------------------------------------*/
 
    if( ! function_exists('resources_path') ) {
        
        /**
         * Gets the resources path
         *
         * @return string
         */
        function resources_path($path = '', $file = '')
        {
            if( function_exists('themosis_path') ) {
                $root = themosis_path('theme.resources');
            } else {
/sites/localhost/html/public/app/themes/247able-theme/resources/widgets/ProductSummaryWidget.php
    class ProductSummaryWidget extends WC_Widget {
        
        public function __construct() {
            $this->widget_cssclass    = 'woocommerce wc_product_summary';
            $this->widget_description = __( 'WooCommerce Product Summary', 'woocommerce' );
            $this->widget_id          = 'wc_product_summary';
            $this->widget_name        = __( 'WooCommerce Product Summary', 'woocommerce' );
            parent::__construct();
        }
    
        public function widget( $args, $instance ) {
            
            global $product;
            
            if(!$product)
                return;
            
            $this->widget_start( $args, $instance );
            
            echo view( 'product/summary', compact( 'product' ) );
            
            $this->widget_end( $args );
            
        }
    
         public function update( $new_instance, $old_instance ) {
            // Save widget options
        }
    
         public function form( $instance ) {
            // Output admin widget options form
        }
        
    }
/sites/localhost/html/public/wp/wp-includes/class-wp-widget.php
             * Returning false will effectively short-circuit display of the widget.
             *
             * @since 2.8.0
             *
             * @param array     $instance The current widget instance's settings.
             * @param WP_Widget $widget   The current widget instance.
             * @param array     $args     An array of default widget arguments.
             */
            $instance = apply_filters( 'widget_display_callback', $instance, $this, $args );
 
            if ( false === $instance ) {
                return;
            }
 
            $was_cache_addition_suspended = wp_suspend_cache_addition();
            if ( $this->is_preview() && ! $was_cache_addition_suspended ) {
                wp_suspend_cache_addition( true );
            }
 
            $this->widget( $args, $instance );
 
            if ( $this->is_preview() ) {
                wp_suspend_cache_addition( $was_cache_addition_suspended );
            }
        }
    }
 
    /**
     * Handles changed settings (Do NOT override).
     *
     * @since 2.8.0
     *
     * @global array $wp_registered_widgets
     *
     * @param int $deprecated Not used.
     */
    public function update_callback( $deprecated = 1 ) {
        global $wp_registered_widgets;
 
        $all_instances = $this->get_settings();
/sites/localhost/html/public/wp/wp-includes/widgets.php
         *
         * @param array $widget {
         *     An associative array of widget arguments.
         *
         *     @type string   $name        Name of the widget.
         *     @type string   $id          Widget ID.
         *     @type callable $callback    When the hook is fired on the front end, `$callback` is an array
         *                                 containing the widget object. Fired on the back end, `$callback`
         *                                 is 'wp_widget_control', see `$_callback`.
         *     @type array    $params      An associative array of multi-widget arguments.
         *     @type string   $classname   CSS class applied to the widget container.
         *     @type string   $description The widget description.
         *     @type array    $_callback   When the hook is fired on the back end, `$_callback` is populated
         *                                 with an array containing the widget object, see `$callback`.
         * }
         */
        do_action( 'dynamic_sidebar', $wp_registered_widgets[ $id ] );
 
        if ( is_callable( $callback ) ) {
            call_user_func_array( $callback, $params );
            $did_one = true;
        }
    }
 
    if ( ! is_admin() && ! empty( $sidebar['after_sidebar'] ) ) {
        echo $sidebar['after_sidebar'];
    }
 
    /**
     * Fires after widgets are rendered in a dynamic sidebar.
     *
     * Note: The action also fires for empty sidebars, and on both the front end
     * and back end, including the Inactive Widgets sidebar on the Widgets screen.
     *
     * @since 3.9.0
     *
     * @param int|string $index       Index, name, or ID of the dynamic sidebar.
     * @param bool       $has_widgets Whether the sidebar is populated with widgets.
     *                                Default true.
     */
/sites/localhost/html/public/app/themes/247able-theme/resources/views/product/single.php
                        
                /**
                 * woocommerce_single_product_summary hook
                 *
                 * @hooked woocommerce_template_single_title - 5
                 * @hooked woocommerce_template_single_rating - 10
                 * @hooked woocommerce_template_single_excerpt - 20
                 * @hooked woocommerce_template_single_sharing - 50
                 */
                do_action( 'woocommerce_single_product_summary' );
                
            ?>
            
        </div>
        
        <div class="small-12 medium-12 large-offset-0 large-3 columns">
            
            <div class="widgets">
        
                <?php dynamic_sidebar('Product Sidebar'); ?>
                
            </div>
            
        </div>
        
    </div>
    
    <?php woocommerce_output_product_data_tabs(); ?>
    
</article>
 
<?php
                
    /**
     * woocommerce_after_single_product_summary hook
     *
     * @hooked woocommerce_output_related_products - 20
     */
    do_action( 'woocommerce_after_single_product_summary' );
?>
/sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php
 
    /**
     * Get the returned value of a file.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function getRequire($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
 
            return (static function () use ($__path, $__data) {
                extract($__data, EXTR_SKIP);
 
                return require $__path;
            })();
        }
 
        throw new FileNotFoundException("File does not exist at path {$path}.");
    }
 
    /**
     * Require the given file once.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function requireOnce($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
Arguments
  1. "/sites/localhost/html/public/app/themes/247able-theme/resources/views/product/single.php"
    
/sites/localhost/html/vendor/illuminate/filesystem/Filesystem.php
    /**
     * Get the returned value of a file.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function getRequire($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
 
            return (static function () use ($__path, $__data) {
                extract($__data, EXTR_SKIP);
 
                return require $__path;
            })();
        }
 
        throw new FileNotFoundException("File does not exist at path {$path}.");
    }
 
    /**
     * Require the given file once.
     *
     * @param  string  $path
     * @param  array  $data
     * @return mixed
     *
     * @throws \Illuminate\Contracts\Filesystem\FileNotFoundException
     */
    public function requireOnce($path, array $data = [])
    {
        if ($this->isFile($path)) {
            $__path = $path;
            $__data = $data;
 
/sites/localhost/html/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();
 
        // 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 {
            $this->files->getRequire($path, $data);
        } catch (Throwable $e) {
            $this->handleViewException($e, $obLevel);
        }
 
        return ltrim(ob_get_clean());
    }
 
    /**
     * Handle a view exception.
     *
     * @param  \Throwable  $e
     * @param  int  $obLevel
     * @return void
     *
     * @throws \Throwable
     */
    protected function handleViewException(Throwable $e, $obLevel)
    {
        while (ob_get_level() > $obLevel) {
            ob_end_clean();
/sites/localhost/html/vendor/illuminate/view/Engines/PhpEngine.php
     * Create a new file engine instance.
     *
     * @param  \Illuminate\Filesystem\Filesystem  $files
     * @return void
     */
    public function __construct(Filesystem $files)
    {
        $this->files = $files;
    }
 
    /**
     * Get the evaluated contents of the view.
     *
     * @param  string  $path
     * @param  array  $data
     * @return string
     */
    public function get($path, array $data = [])
    {
        return $this->evaluatePath($path, $data);
    }
 
    /**
     * 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();
 
        // 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 {
            $this->files->getRequire($path, $data);
/sites/localhost/html/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
     */
    public 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;
    }
 
/sites/localhost/html/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());
    }
 
    /**
/sites/localhost/html/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) ? $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 (Throwable $e) {
            $this->factory->flushState();
 
            throw $e;
        }
    }
 
    /**
     * Get the contents of the view instance.
     *
     * @return string
/sites/localhost/html/vendor/wp-kit/utils/helpers.php
    }
 
    if ( ! function_exists('view') ) {
        
        /**
         * Helper function to build views.
         *
         * @param string $view      The view relative path, name.
         * @param array  $data      Passed data.
         * @param array  $mergeData
         *
         * @return string
         */
        function view($view = null, array $data = [], array $mergeData = [])
        {
            $factory = app('view');
            if (func_num_args() === 0) {
                return $factory;
            }
            return $factory->make($view, $data, $mergeData)->render();
        }
        
    }
    
    /*----------------------------------------------*\
        #PATHS
    \*----------------------------------------------*/
 
    if( ! function_exists('resources_path') ) {
        
        /**
         * Gets the resources path
         *
         * @return string
         */
        function resources_path($path = '', $file = '')
        {
            if( function_exists('themosis_path') ) {
                $root = themosis_path('theme.resources');
            } else {
/sites/localhost/html/public/app/themes/247able-theme/woocommerce/content-single-product.php
                
            }
            
        } 
        
        wp_reset_query();
        
        query_posts($args);
        
        $args = compact('product', 'featured');
    
        echo view( 'shop/product-index', $args );
        
        wp_reset_query();
    
    break;
    
    default :
    
        echo view( 'product/single', compact( 'product' ) );
        
        wp_reset_query();
    
    break;
    
}
 
 
/sites/localhost/html/public/wp/wp-includes/template.php
 
    if ( isset( $s ) ) {
        $s = esc_attr( $s );
    }
 
    /**
     * Fires before a template file is loaded.
     *
     * @since 6.1.0
     *
     * @param string $_template_file The full path to the template file.
     * @param bool   $load_once      Whether to require_once or require.
     * @param array  $args           Additional arguments passed to the template.
     */
    do_action( 'wp_before_load_template', $_template_file, $load_once, $args );
 
    if ( $load_once ) {
        require_once $_template_file;
    } else {
        require $_template_file;
    }
 
    /**
     * Fires after a template file is loaded.
     *
     * @since 6.1.0
     *
     * @param string $_template_file The full path to the template file.
     * @param bool   $load_once      Whether to require_once or require.
     * @param array  $args           Additional arguments passed to the template.
     */
    do_action( 'wp_after_load_template', $_template_file, $load_once, $args );
}
 
Arguments
  1. "/sites/localhost/html/public/app/themes/247able-theme/woocommerce/content-single-product.php"
    
/sites/localhost/html/public/app/plugins/woocommerce/includes/wc-core-functions.php
                    "{$slug}.php",
                    WC()->template_path() . "{$slug}.php",
                )
            );
        }
 
        // Don't cache the absolute path so that it can be shared between web servers with different paths.
        $cache_path = wc_tokenize_path( $template, wc_get_path_define_tokens() );
 
        wc_set_template_cache( $cache_key, $cache_path );
    } else {
        // Make sure that the absolute path to the template is resolved.
        $template = wc_untokenize_path( $template, wc_get_path_define_tokens() );
    }
 
    // Allow 3rd party plugins to filter template file from their plugin.
    $template = apply_filters( 'wc_get_template_part', $template, $slug, $name );
 
    if ( $template ) {
        load_template( $template, false );
    }
}
 
/**
 * Get other templates (e.g. product attributes) passing attributes and including the file.
 *
 * @param string $template_name Template name.
 * @param array  $args          Arguments. (default: array).
 * @param string $template_path Template path. (default: '').
 * @param string $default_path  Default path. (default: '').
 */
function wc_get_template( $template_name, $args = array(), $template_path = '', $default_path = '' ) {
    $cache_key = sanitize_key( implode( '-', array( 'template', $template_name, $template_path, $default_path, Constants::get_constant( 'WC_VERSION' ) ) ) );
    $template  = (string) wp_cache_get( $cache_key, 'woocommerce' );
 
    if ( ! $template ) {
        $template = wc_locate_template( $template_name, $template_path, $default_path );
 
        // Don't cache the absolute path so that it can be shared between web servers with different paths.
        $cache_path = wc_tokenize_path( $template, wc_get_path_define_tokens() );
/sites/localhost/html/public/app/plugins/woocommerce/templates/single-product.php
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}
 
get_header( 'shop' ); ?>
 
    <?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' );
    ?>
 
        <?php while ( have_posts() ) : ?>
            <?php the_post(); ?>
 
            <?php wc_get_template_part( 'content', 'single-product' ); ?>
 
        <?php endwhile; // end of the loop. ?>
 
    <?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' );
    ?>
 
    <?php
        /**
         * woocommerce_sidebar hook.
         *
         * @hooked woocommerce_get_sidebar - 10
         */
        do_action( 'woocommerce_sidebar' );
    ?>
/sites/localhost/html/public/wp/wp-includes/template-loader.php
            }
 
            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;
}
 
Arguments
  1. "/sites/localhost/html/public/app/plugins/woocommerce/templates/single-product.php"
    
/sites/localhost/html/public/wp/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';
 
}
 
Arguments
  1. "/sites/localhost/html/public/wp/wp-includes/template-loader.php"
    
/sites/localhost/html/public/index.php
<?php
    
$GLOBALS['START_TIME'] = floatval(microtime(true));
 
/** WordPress view bootstrapper */
define('WP_USE_THEMES', true);
require __DIR__ . '/wp/wp-blog-header.php';
 
Arguments
  1. "/sites/localhost/html/public/wp/wp-blog-header.php"
    

Environment & details:

empty
empty
empty
Key Value
fikker-61vm-nk2N
"MgPGRI6oXLV7DSLWJk4y6wNi63F1ZE0E"
wcumcs_user_currency_session
"GBP"
PHPSESSID
"3j39g55p7g94movp3cq3v8j8ra"
empty
Key Value
SERVER_SOFTWARE
"Apache/2.4.59 (Unix)"
REQUEST_URI
"/product/ecom-tab-ex-pro-dz2-replacement-battery/"
WEBSITE_DEFAULT_HOSTNAME
"prod-ableuk-wordpress.azurewebsites.net"
APPSETTING_AZURE_SERVICE_BUS_SAS_KEY
"XwzuAsAFR4reZUUQJRqj36fTiYgqC6O+/+ASbKf5JHY="
AZUREBLOBSTORAGE_wflogs
"prodableukstorage|wf-logs|WCtlZC0UOyDMgpPuXonOv89wEUBD1YY8vkUReKySLUFkpZZvB2X9kVsoQ56gSnprz64Zsq90VWeg+AStmDPa3w==|/sites/localhost/html/public/app/wflogs||Http"
WP_HOME
"https://247able.com"
WEBSITES_ENABLE_APP_SERVICE_STORAGE
"true"
LOGGED_IN_KEY
"generateme"
APPSETTING_API_URL
"https://247able.com"
APPSETTING_PRODUCTS_JSON_URL
"https://prodableukstorage.blob.core.windows.net/able-public/products.json"
WP_ALL_EXPORT_PRO_URL
""
APPSETTING_DB_NAME
"prod-ableuk-wordpress-db"
FUNCTIONS_RUNTIME_SCALE_MONITORING_ENABLED
"0"
WEBJOB_HOME
"/home"
REGION_NAME
"uksouth"
PLATFORM_VERSION
"103.0.7.247"
APPSETTING_WEBSITE_DEFAULT_HOSTNAME
"prod-ableuk-wordpress.azurewebsites.net"
PRODUCTS_JSON_URL
"https://prodableukstorage.blob.core.windows.net/able-public/products.json"
APPSETTING_WP_HOME
"https://247able.com"
HOSTNAME
"prod-ableu_ab1c752e17"
APPSETTING_WEBSITES_ENABLE_APP_SERVICE_STORAGE
"true"
WEBSITE_INSTANCE_ID
"0397c5cd55fab51b5685c7f1c2f118d330054b49d1b0d8b6295045439dbb773d"
APP_URL
"https://247able.com"
APPSETTING_FUNCTIONS_RUNTIME_SCALE_MONITORING_ENABLED
"0"
APPSETTING_JWT_SECRET
"q2OM07XMHe"
APPSETTING_SIGNATURE_PRIVATE_KEY
"93ypi/cl8S9cN0ZddtZUlNtLOvckN8+PAx/t9OLJ9SoeePrUf9bSkzc/BGsbCL82P9AYQPkafZBR50N3pSN9qw=="
SHLVL
"1"
MICROSOFT_AZURE_ACCOUNT_KEY
"Qv9eXQe1xPN6NorQxJbL0ZJ43MzbMnWnztBbZzTJQQm+/HwQMxnf1p4mgvXjrH8V3vb8SmLc5pt++AStYChgTg=="
WEBSITE_RESOURCE_GROUP
"prod-ableuk"
HOME
"/home/www-data"
WEBSITE_HOME_STAMPNAME
"waws-prod-ln1-109"
DB_NAME
"prod-ableuk-wordpress-db"
APPSETTING_APP_URL
"https://247able.com"
ScmType
"None"
REMOTEDEBUGGINGVERSION
"17.10.20419.3425"
WEBSITE_HOSTNAME
"prod-ableuk-wordpress.azurewebsites.net"
AZURE_SERVICE_BUS_NAMESPACE
"prod-ableuk-servicebus"
SECURE_AUTH_SALT
"generateme"
WEBSITE_STACK
"DOCKER"
NUM_CORES
"2"
WEBSITE_AUTH_LOGOUT_PATH
"/.auth/logout"
APPSETTING_MICROSOFT_AZURE_ACCOUNT_KEY
"Qv9eXQe1xPN6NorQxJbL0ZJ43MzbMnWnztBbZzTJQQm+/HwQMxnf1p4mgvXjrH8V3vb8SmLc5pt++AStYChgTg=="
COMPOSER_ALLOW_SUPERUSER
"1"
APPSETTING_REMOTEDEBUGGINGVERSION
"17.10.20419.3425"
WEBSITE_ROLE_INSTANCE_ID
"3531"
WP_ENV
"production"
SIGNATURE_PRIVATE_KEY
"93ypi/cl8S9cN0ZddtZUlNtLOvckN8+PAx/t9OLJ9SoeePrUf9bSkzc/BGsbCL82P9AYQPkafZBR50N3pSN9qw=="
SECURE_AUTH_KEY
"generateme"
APPSETTING_AZURE_SERVICE_BUS_NAMESPACE
"prod-ableuk-servicebus"
WEBSITE_AUTH_ENCRYPTION_KEY
"98007A353E2B10192D5676E8D3D7618925D94524683FA8593FB46E2F5EA554D9"
WEBJOB_ENV
"true"
APPSETTING_WEBSITE_AUTH_LOGOUT_PATH
"/.auth/logout"
MICROSOFT_AZURE_CNAME
"https://247able.com"
WEBSITE_ISOLATION
"lxc"
MICROSOFT_AZURE_USE_FOR_DEFAULT_UPLOAD
"1"
APPSETTING_DB_PREFIX
"a247_"
ACP_KEY
"93d36a90-7700-4e7b-891f-f1336fa12aa8"
WEBSITE_SITE_NAME
"prod-ableuk-wordpress"
PATH
"/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
AZURE_SERVICE_BUS_QUEUE
"prod-ableuk-functions-queue"
WP_SITEURL
"https://247able.com/wp"
WEBSITE_MOUNT_PATH_wp-cache
"/sites/localhost/html/public/app/cache"
WEBSITE_AUTH_AUTO_AAD
"False"
MICROSOFT_AZURE_ACCOUNT_NAME
"prodableukstorage"
APPSETTING_MICROSOFT_AZURE_CNAME
"https://247able.com"
APPSETTING_WEBSITE_SITE_NAME
"prod-ableuk-wordpress"
MICROSOFT_AZURE_CONTAINER
"wp-uploads"
LD_PRELOAD
"/usr/lib/preloadable_libiconv.so php"
WEBSITE_AUTH_ENABLED
"False"
WP_ALL_IMPORT_PRO_KEY
""
DB_PREFIX
"a247_"
APPSETTING_ACP_KEY
"93d36a90-7700-4e7b-891f-f1336fa12aa8"
APPSETTING_AZURE_SERVICE_BUS_QUEUE
"prod-ableuk-functions-queue"
APPSETTING_WEBSITE_AUTH_AUTO_AAD
"False"
APPSETTING_MICROSOFT_AZURE_USE_FOR_DEFAULT_UPLOAD
"1"
APPSETTING_WP_SITEURL
"https://247able.com/wp"
WEBSITE_MOUNT_PATH_wf-logs
"/sites/localhost/html/public/app/wflogs"
APPSETTING_WEBSITE_AUTH_ENABLED
"False"
DISABLE_WP_CRON
"true"
JWT_SECRET
"q2OM07XMHe"
WEBSITE_OWNER_NAME
"eb779aee-837d-46ef-8b82-34e6ab6e2344+prod-ableuk-UKSouthwebspace-Linux"
APPSETTING_DB_PASSWORD
"jpnLK3LMe30lJKm"
AZURE_SERVICE_BUS_SAS_KEY_NAME
"RootManageSharedAccessKey"
WP_PLUGIN_GF_KEY
"48af70f71661bfbd69606761e0f8e7aa"
APPSETTING_MICROSOFT_AZURE_ACCOUNT_NAME
"prodableukstorage"
MICROSOFT_AZURE_OVERRIDE_CONTAINER_PATH
"uploads"
APPSETTING_MICROSOFT_AZURE_CONTAINER
"wp-uploads"
APPSETTING_DB_HOST
"prod-ableuk-mysql-server.mysql.database.azure.com"
WP_ALL_EXPORT_PRO_KEY
""
APPSETTING_DB_USER
"zawuhkhlpe"
APPSETTING_WP_PLUGIN_GF_KEY
"48af70f71661bfbd69606761e0f8e7aa"
AUTH_SALT
"generateme"
APPSETTING_AZURE_SERVICE_BUS_SAS_KEY_NAME
"RootManageSharedAccessKey"
NONCE_SALT
"generateme"
DB_PASSWORD
"jpnLK3LMe30lJKm"
WP_DEBUG_LOG
"false"
PWD
"/sites/localhost/html"
ACF_PRO_KEY
"b3JkZXJfaWQ9NTA3MTh8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE1LTAyLTI0IDE2OjM5OjA1"
COMPUTERNAME
"ln1xsdlwk0002Q3"
WP_ALL_IMPORT_PRO_URL
""
AZURE_SERVICE_BUS_SAS_KEY
"XwzuAsAFR4reZUUQJRqj36fTiYgqC6O+/+ASbKf5JHY="
AZUREBLOBSTORAGE_wpcache
"prodableukstorage|wp-cache|WCtlZC0UOyDMgpPuXonOv89wEUBD1YY8vkUReKySLUFkpZZvB2X9kVsoQ56gSnprz64Zsq90VWeg+AStmDPa3w==|/sites/localhost/html/public/app/cache||Http"
WEBSITE_OS
"linux"
AUTH_KEY
"generateme"
NONCE_KEY
"generateme"
API_URL
"https://247able.com"
DB_HOST
"prod-ableuk-mysql-server.mysql.database.azure.com"
WEBSITE_PRIVATE_IP
"10.0.1.254"
LOGGED_IN_SALT
"generateme"
DB_USER
"zawuhkhlpe"
APPSETTING_ScmType
"None"
WEBSITE_AUTH_SIGNING_KEY
"262774CB75B18812444D568A2394642826C7313374D0A068FC2B0DE73918B50C"
APPSETTING_MICROSOFT_AZURE_OVERRIDE_CONTAINER_PATH
"uploads"
APPSETTING_ACF_PRO_KEY
"b3JkZXJfaWQ9NTA3MTh8dHlwZT1kZXZlbG9wZXJ8ZGF0ZT0yMDE1LTAyLTI0IDE2OjM5OjA1"
WEBSITE_SKU
"Premium0V3"
USER
"www-data"
SCRIPT_NAME
"/index.php"
QUERY_STRING
""
REQUEST_METHOD
"GET"
SERVER_PROTOCOL
"HTTP/1.1"
GATEWAY_INTERFACE
"CGI/1.1"
REDIRECT_URL
"/product/ecom-tab-ex-pro-dz2-replacement-battery/"
REMOTE_PORT
"50569"
SCRIPT_FILENAME
"/sites/localhost/html/public/index.php"
SERVER_ADMIN
"you@example.com"
CONTEXT_DOCUMENT_ROOT
"/sites/localhost/html/public"
CONTEXT_PREFIX
""
REQUEST_SCHEME
"http"
DOCUMENT_ROOT
"/sites/localhost/html/public"
REMOTE_ADDR
"169.254.129.1"
SERVER_PORT
"80"
SERVER_ADDR
"169.254.129.2"
SERVER_NAME
"247able.com"
SERVER_SIGNATURE
"<address>Apache/2.4.59 (Unix) Server at prod-ableuk-wordpress.azurewebsites.net Port 80</address>\n"
HTTP_X_CLIENT_PORT
"36630"
HTTP_X_CLIENT_IP
"147.243.230.48"
HTTP_X_WAWS_UNENCODED_URL
"/product/ecom-tab-ex-pro-dz2-replacement-battery/"
HTTP_X_ORIGINAL_URL
"/product/ecom-tab-ex-pro-dz2-replacement-battery/"
HTTP_X_FORWARDED_TLSVERSION
"1.3"
HTTP_X_ARR_SSL
"2048|256|CN=Microsoft Azure RSA TLS Issuing CA 04, O=Microsoft Corporation, C=US|CN=*.azurewebsites.net, O=Microsoft Corporation, L=Redmond, S=WA, C=US"
HTTP_X_APPSERVICE_PROTO
"https"
HTTP_WAS_DEFAULT_HOSTNAME
"prod-ableuk-wordpress.azurewebsites.net"
HTTP_X_SITE_DEPLOYMENT_ID
"prod-ableuk-wordpress"
HTTP_DISGUISED_HOST
"prod-ableuk-wordpress.azurewebsites.net"
HTTP_CLIENT_IP
"147.243.230.48:36630"
HTTP_X_ARR_LOG_ID
"3e71762a-a84f-486c-812d-668bdab20bcd"
HTTP_X_AZURE_REQUESTCHAINV2
"hops=4"
HTTP_X_AZURE_SOCKETIP
"18.116.24.111"
HTTP_X_AZURE_CLIENTIP
"18.116.24.111"
HTTP_X_AZURE_REF
"20241130T094716Z-178b58d6f9drqwtmhC1CHIcteg00000003yg000000006nxf, 20241130T094716Z-265f88c5f7bv6sdrhC2CHI2prs0000000e50000000001tqn, 20241130T094716Z-1559458c5c9m7f2rhP1DM1brs00000000d4g000000003azh, 20241130T094716Z-256997fc945jskm8hP2DM1y0mw0000000dhg0000000060hk"
HTTP_X_FORWARDED_PROTO
"https"
HTTP_X_FORWARDED_HOST
"247able.com"
HTTP_X_AZURE_FDID
"13a37c99-e556-4554-a71b-98594ee0c856"
HTTP_X_FORWARDED_FOR
"18.116.24.111, 147.243.76.204, 147.243.230.48:36630"
HTTP_X_FD_INT_ROXY_EXPECTEDPURGEID
"5"
HTTP_VIA
"HTTP/2.0 Azure"
HTTP_REFERER
"https://247able.com/?p=85193"
HTTP_RANGE
"bytes=0-8388607"
HTTP_MAX_FORWARDS
"9"
HTTP_COOKIE
"fikker-61vm-nk2N=MgPGRI6oXLV7DSLWJk4y6wNi63F1ZE0E; wcumcs_user_currency_session=GBP; PHPSESSID=3j39g55p7g94movp3cq3v8j8ra"
HTTP_ACCEPT_ENCODING
"gzip, br"
HTTP_USER_AGENT
"Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)"
HTTP_HOST
"247able.com"
HTTP_ACCEPT
"*/*"
proxy-nokeepalive
"1"
W3TC_ENC
"_gzip"
W3TC_SSL
"_ssl"
W3TC_QUERY_STRING
""
HTTP_AUTHORIZATION
""
REDIRECT_STATUS
"200"
REDIRECT_W3TC_SLASH
"_slash"
REDIRECT_W3TC_ENC
"_gzip"
REDIRECT_W3TC_SSL
"_ssl"
REDIRECT_W3TC_QUERY_STRING
""
REDIRECT_HTTP_AUTHORIZATION
""
FCGI_ROLE
"RESPONDER"
PHP_SELF
"/index.php"
REQUEST_TIME_FLOAT
1732960036.4434
REQUEST_TIME
1732960036
HTTPS
"on"
empty
0. Whoops\Handler\PrettyPageHandler