Whoops \ Exception \ ErrorException (E_NOTICE)
Undefined variable: product_id Whoops\Exception\ErrorException thrown with message "Undefined variable: product_id" Stacktrace: #9 Whoops\Exception\ErrorException in /var/www/user2038614/data/www/termotech.by/wp-content/themes/g5_hydrogen/woocommerce/content-product.php:40 #8 Gantry\Component\Whoops\SystemFacade:handleError in /var/www/user2038614/data/www/termotech.by/wp-content/themes/g5_hydrogen/woocommerce/content-product.php:40 #7 require in /var/www/user2038614/data/www/termotech.by/wp-includes/template.php:724 #6 load_template in /var/www/user2038614/data/www/termotech.by/wp-content/plugins/woocommerce/includes/wc-core-functions.php:195 #5 wc_get_template_part in /var/www/user2038614/data/www/termotech.by/wp-content/themes/g5_hydrogen/woocommerce/archive-product.php:84 #4 include in /var/www/user2038614/data/www/termotech.by/wp-content/plugins/woocommerce/includes/wc-core-functions.php:249 #3 wc_get_template in /var/www/user2038614/data/www/termotech.by/wp-content/themes/g5_hydrogen/woocommerce/taxonomy-product_cat.php:22 #2 include in /var/www/user2038614/data/www/termotech.by/wp-includes/template-loader.php:78 #1 require_once in /var/www/user2038614/data/www/termotech.by/wp-blog-header.php:19 #0 require in /var/www/user2038614/data/www/termotech.by/index.php:17
Stack frames (10)
9
Whoops
\
Exception
\
ErrorException
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-content
/
themes
/
g5_hydrogen
/
woocommerce
/
content-product.php
40
8
Gantry
\
Component
\
Whoops
\
SystemFacade
handleError
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-content
/
themes
/
g5_hydrogen
/
woocommerce
/
content-product.php
40
7
require
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-includes
/
template.php
724
6
load_template
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-content
/
plugins
/
woocommerce
/
includes
/
wc-core-functions.php
195
5
wc_get_template_part
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-content
/
themes
/
g5_hydrogen
/
woocommerce
/
archive-product.php
84
4
include
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-content
/
plugins
/
woocommerce
/
includes
/
wc-core-functions.php
249
3
wc_get_template
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-content
/
themes
/
g5_hydrogen
/
woocommerce
/
taxonomy-product_cat.php
22
2
include
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-includes
/
template-loader.php
78
1
require_once
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
wp-blog-header.php
19
0
require
/
var
/
www
/
user2038614
/
data
/
www
/
termotech.by
/
index.php
17
}
 
global $product;
 
// Ensure visibility
if ( empty( $product ) || ! $product->is_visible() ) {
    return;
}
?>
<div class="product-card">
    <div <?php post_class("uk-flex uk-flex-column uk-flex-center"); ?>>
        <?php
        /**
         * woocommerce_before_shop_loop_item hook.
         *
         * @hooked woocommerce_template_loop_product_link_open - 10
         */
        // do_action( 'woocommerce_before_shop_loop_item' );
        ?>
        <a class="uk-flex uk-flex-column uk-margin-auto-bottom" href=<?php echo get_permalink($product_id)?> >
            <div>
                <?php 
 
                /**
                 * woocommerce_before_shop_loop_item_title hook.
                 *
                 * @hooked woocommerce_show_product_loop_sale_flash - 10
                 * @hooked woocommerce_template_loop_product_thumbnail - 10
                 */
                do_action( 'woocommerce_before_shop_loop_item_title' );
                ?>
            </div>
 
            <?php 
 
            /**
             * woocommerce_shop_loop_item_title hook.
             *
             * @hooked woocommerce_template_loop_product_title - 10
             */
}
 
global $product;
 
// Ensure visibility
if ( empty( $product ) || ! $product->is_visible() ) {
    return;
}
?>
<div class="product-card">
    <div <?php post_class("uk-flex uk-flex-column uk-flex-center"); ?>>
        <?php
        /**
         * woocommerce_before_shop_loop_item hook.
         *
         * @hooked woocommerce_template_loop_product_link_open - 10
         */
        // do_action( 'woocommerce_before_shop_loop_item' );
        ?>
        <a class="uk-flex uk-flex-column uk-margin-auto-bottom" href=<?php echo get_permalink($product_id)?> >
            <div>
                <?php 
 
                /**
                 * woocommerce_before_shop_loop_item_title hook.
                 *
                 * @hooked woocommerce_show_product_loop_sale_flash - 10
                 * @hooked woocommerce_template_loop_product_thumbnail - 10
                 */
                do_action( 'woocommerce_before_shop_loop_item_title' );
                ?>
            </div>
 
            <?php 
 
            /**
             * woocommerce_shop_loop_item_title hook.
             *
             * @hooked woocommerce_template_loop_product_title - 10
             */
        /*
         * This use of extract() cannot be removed. There are many possible ways that
         * templates could depend on variables that it creates existing, and no way to
         * detect and deprecate it.
         *
         * Passing the EXTR_SKIP flag is the safest option, ensuring globals and
         * function variables cannot be overwritten.
         */
        // phpcs:ignore WordPress.PHP.DontExtract.extract_extract
        extract( $wp_query->query_vars, EXTR_SKIP );
    }
 
    if ( isset( $s ) ) {
        $s = esc_attr( $s );
    }
 
    if ( $require_once ) {
        require_once( $_template_file );
    } else {
        require( $_template_file );
    }
}
 
        }
 
        if ( ! $template ) {
            // If template file doesn't exist, look in yourtheme/slug.php and yourtheme/woocommerce/slug.php.
            $template = WC_TEMPLATE_DEBUG_MODE ? '' : locate_template(
                array(
                    "{$slug}.php",
                    WC()->template_path() . "{$slug}.php",
                )
            );
        }
 
        wp_cache_set( $cache_key, $template, 'woocommerce' );
    }
 
    // 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, WC_VERSION ) ) );
    $template  = (string) wp_cache_get( $cache_key, 'woocommerce' );
 
    if ( ! $template ) {
        $template = wc_locate_template( $template_name, $template_path, $default_path );
        wp_cache_set( $cache_key, $template, 'woocommerce' );
    }
 
                 */
                do_action( 'woocommerce_before_shop_loop' );
            ?>
 
            <?php woocommerce_product_loop_start(); ?>
 
                <?php woocommerce_product_subcategories(); ?>
 
                <?php while ( have_posts() ) : the_post(); ?>
 
                    <?php
                        /**
                         * woocommerce_shop_loop hook.
                         *
                         * @hooked WC_Structured_Data::generate_product_data() - 10
                         */
                        do_action( 'woocommerce_shop_loop' );
                    ?>
 
                    <?php wc_get_template_part( 'content', 'product' ); ?>
 
                <?php endwhile; // end of the loop. ?>
 
            <?php woocommerce_product_loop_end(); ?>
 
            <?php
                /**
                 * woocommerce_after_shop_loop hook.
                 *
                 * @hooked woocommerce_pagination - 10
                 */
                do_action( 'woocommerce_after_shop_loop' );
            ?>
 
        <?php elseif ( ! woocommerce_product_subcategories( array( 'before' => woocommerce_product_loop_start( false ), 'after' => woocommerce_product_loop_end( false ) ) ) ) : ?>
 
            <?php
                /**
                 * woocommerce_no_products_found hook.
                 *
        'template_path' => $template_path,
        'located'       => $template,
        'args'          => $args,
    );
 
    if ( ! empty( $args ) && is_array( $args ) ) {
        if ( isset( $args['action_args'] ) ) {
            wc_doing_it_wrong(
                __FUNCTION__,
                __( 'action_args should not be overwritten when calling wc_get_template.', 'woocommerce' ),
                '3.6.0'
            );
            unset( $args['action_args'] );
        }
        extract( $args ); // @codingStandardsIgnoreLine
    }
 
    do_action( 'woocommerce_before_template_part', $action_args['template_name'], $action_args['template_path'], $action_args['located'], $action_args['args'] );
 
    include $action_args['located'];
 
    do_action( 'woocommerce_after_template_part', $action_args['template_name'], $action_args['template_path'], $action_args['located'], $action_args['args'] );
}
 
/**
 * Like wc_get_template, but returns the HTML instead of outputting.
 *
 * @see wc_get_template
 * @since 2.5.0
 * @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: '').
 *
 * @return string
 */
function wc_get_template_html( $template_name, $args = array(), $template_path = '', $default_path = '' ) {
    ob_start();
    wc_get_template( $template_name, $args, $template_path, $default_path );
    return ob_get_clean();
 * The Template for displaying products in a product category. Simply includes the archive template
 *
 * This template can be overridden by copying it to yourtheme/woocommerce/taxonomy-product_cat.php.
 *
 * HOWEVER, on occasion WooCommerce will need to update template files and you
 * (the theme developer) will need to copy the new files to your theme to
 * maintain compatibility. We try to do this as little as possible, but it does
 * happen. When this occurs the version of the template file will be bumped and
 * the readme will list any important changes.
 *
 * @see         https://docs.woocommerce.com/document/template-structure/
 * @package     WooCommerce/Templates
 * @version     1.6.4
 */
 
if ( ! defined( 'ABSPATH' ) ) {
    exit; // Exit if accessed directly
}
 
wc_get_template( 'archive-product.php' );
 
    elseif ( is_single() && $template = get_single_template() ) :
    elseif ( is_page() && $template = get_page_template() ) :
    elseif ( is_singular() && $template = get_singular_template() ) :
    elseif ( is_category() && $template = get_category_template() ) :
    elseif ( is_tag() && $template = get_tag_template() ) :
    elseif ( is_author() && $template = get_author_template() ) :
    elseif ( is_date() && $template = get_date_template() ) :
    elseif ( is_archive() && $template = get_archive_template() ) :
    else :
        $template = get_index_template();
    endif;
    /**
     * Filters the path of the current template before including it.
     *
     * @since 3.0.0
     *
     * @param string $template The path of the template to include.
     */
    if ( $template = apply_filters( 'template_include', $template ) ) {
        include( $template );
    } elseif ( current_user_can( 'switch_themes' ) ) {
        $theme = wp_get_theme();
        if ( $theme->errors() ) {
            wp_die( $theme->errors() );
        }
    }
    return;
endif;
 
<?php
/**
 * Loads the WordPress environment and template.
 *
 * @package WordPress
 */
 
if ( ! isset( $wp_did_header ) ) {
 
    $wp_did_header = true;
 
    // Load the WordPress library.
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
 
    // Set up the WordPress query.
    wp();
 
    // Load the theme template.
    require_once( ABSPATH . WPINC . '/template-loader.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( dirname( __FILE__ ) . '/wp-blog-header.php' );
 

Environment & details:

Key Value
page product-category/gas-boilers/wall-mounted/wm-bosch/
empty
empty
empty
empty
Key Value
SERVER_SOFTWARE Apache/2.4.62 (CloudLinux) OpenSSL/3.5.1 mod_fcgid/2.3.9
REQUEST_URI /product-category/gas-boilers/wall-mounted/wm-bosch/
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /
HTTP_ACCEPT text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
HTTP_ACCEPT_ENCODING br,gzip
HTTP_ACCEPT_LANGUAGE en-US,en;q=0.5
HTTP_CONNECTION close
CONTENT_LENGTH 0
HTTP_HOST termotech.by
HTTP_USER_AGENT CCBot/2.0 (https://commoncrawl.org/faq/)
HTTP_IF_MODIFIED_SINCE Tue, 15 Jul 2025 02:51:03 GMT
HTTP_X_FORWARDED_PROTO https
HTTP_X_FORWARDED_PORT 443
HTTP_X_BN_WHITELISTED false
HTTP_BN_CLIENT_PORT 60730
REDIRECT_HTTPS on
REDIRECT_UNIQUE_ID aTLkDbV35xeCQNI_1UVoGwAAAAc
REDIRECT_STATUS 200
HTTPS on
UNIQUE_ID aTLkDbV35xeCQNI_1UVoGwAAAAc
SERVER_SIGNATURE
SERVER_NAME termotech.by
SERVER_ADDR 127.0.0.1
SERVER_PORT 80
REMOTE_ADDR 18.97.9.173
DOCUMENT_ROOT /var/www/user2038614/data/www/termotech.by
REQUEST_SCHEME http
CONTEXT_PREFIX
CONTEXT_DOCUMENT_ROOT /var/www/user2038614/data/www/termotech.by
SERVER_ADMIN webmaster@termotech.by
SCRIPT_FILENAME /var/www/user2038614/data/www/termotech.by/index.php
REMOTE_PORT 59398
REDIRECT_URL /product-category/gas-boilers/wall-mounted/wm-bosch/
REDIRECT_QUERY_STRING page=product-category/gas-boilers/wall-mounted/wm-bosch/
SERVER_PROTOCOL HTTP/1.0
REQUEST_METHOD GET
QUERY_STRING page=product-category/gas-boilers/wall-mounted/wm-bosch/
SCRIPT_NAME /index.php
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1764942861.6001
REQUEST_TIME 1764942861
Key Value
PATH /usr/local/bin:/usr/bin:/bin
TEMP /tmp
TMP /tmp
TMPDIR /tmp
PWD /
0. Whoops\Handler\PrettyPageHandler