Error
Cannot use object of type Raicof\Core\Domain\Entity\Review as array Error thrown with message "Cannot use object of type Raicof\Core\Domain\Entity\Review as array" Stacktrace: #21 Error in /home/kitchenashf/public_html/wp-content/plugins/raicof_core/build/Blocks/feed-reviews-google/render.php:34 #20 {closure} in [internal]:0 #19 array_filter in /home/kitchenashf/public_html/wp-content/plugins/raicof_core/build/Blocks/feed-reviews-google/render.php:33 #18 include in /home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:831 #17 acf_block_render_template in /home/kitchenashf/public_html/wp-includes/class-wp-hook.php:341 #16 WP_Hook:apply_filters in /home/kitchenashf/public_html/wp-includes/class-wp-hook.php:365 #15 WP_Hook:do_action in /home/kitchenashf/public_html/wp-includes/plugin.php:522 #14 do_action in /home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:794 #13 acf_render_block in /home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:679 #12 acf_rendered_block in /home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:590 #11 acf_render_block_callback in /home/kitchenashf/public_html/wp-includes/class-wp-block.php:599 #10 WP_Block:render in /home/kitchenashf/public_html/wp-includes/blocks.php:2383 #9 render_block in /home/kitchenashf/public_html/wp-includes/blocks.php:2466 #8 do_blocks in /home/kitchenashf/public_html/wp-includes/blocks/template-part.php:156 #7 render_block_core_template_part in /home/kitchenashf/public_html/wp-includes/class-wp-block.php:599 #6 WP_Block:render in /home/kitchenashf/public_html/wp-includes/blocks.php:2383 #5 render_block in /home/kitchenashf/public_html/wp-includes/blocks.php:2466 #4 do_blocks in /home/kitchenashf/public_html/wp-includes/block-template.php:294 #3 get_the_block_template_html in /home/kitchenashf/public_html/wp-includes/template-canvas.php:12 #2 include in /home/kitchenashf/public_html/wp-includes/template-loader.php:125 #1 require_once in /home/kitchenashf/public_html/wp-blog-header.php:19 #0 require in /home/kitchenashf/public_html/index.php:17
Stack frames (22)
21
Error
/home/kitchenashf/public_html/wp-content/plugins/raicof_core/build/Blocks/feed-reviews-google/render.php:34
20
{closure}
[internal]:0
19
array_filter
/home/kitchenashf/public_html/wp-content/plugins/raicof_core/build/Blocks/feed-reviews-google/render.php:33
18
include
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:831
17
acf_block_render_template
/home/kitchenashf/public_html/wp-includes/class-wp-hook.php:341
16
WP_Hook apply_filters
/home/kitchenashf/public_html/wp-includes/class-wp-hook.php:365
15
WP_Hook do_action
/home/kitchenashf/public_html/wp-includes/plugin.php:522
14
do_action
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:794
13
acf_render_block
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:679
12
acf_rendered_block
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php:590
11
acf_render_block_callback
/home/kitchenashf/public_html/wp-includes/class-wp-block.php:599
10
WP_Block render
/home/kitchenashf/public_html/wp-includes/blocks.php:2383
9
render_block
/home/kitchenashf/public_html/wp-includes/blocks.php:2466
8
do_blocks
/home/kitchenashf/public_html/wp-includes/blocks/template-part.php:156
7
render_block_core_template_part
/home/kitchenashf/public_html/wp-includes/class-wp-block.php:599
6
WP_Block render
/home/kitchenashf/public_html/wp-includes/blocks.php:2383
5
render_block
/home/kitchenashf/public_html/wp-includes/blocks.php:2466
4
do_blocks
/home/kitchenashf/public_html/wp-includes/block-template.php:294
3
get_the_block_template_html
/home/kitchenashf/public_html/wp-includes/template-canvas.php:12
2
include
/home/kitchenashf/public_html/wp-includes/template-loader.php:125
1
require_once
/home/kitchenashf/public_html/wp-blog-header.php:19
0
require
/home/kitchenashf/public_html/index.php:17
/home/kitchenashf/public_html/wp-content/plugins/raicof_core/build/Blocks/feed-reviews-google/render.php

// Get GoogleReviewsModule singleton to access repository.
$module = \Raicof\Core\Modules\Integrations\GoogleReviews\GoogleReviewsModule::instance();
$repository = $module->getRepository();

// Get block fields.
$section_label = get_field('section_label') ?: 'Recensioner';
$count = get_field('count') ?: 6;
$min_rating = (int) (get_field('min_rating') ?: 4);

// Fetch reviews.
$reviews = $repository->fetchLatest((int) $count);

var_dump($reviews);


// Filter by minimum rating.
if (!empty($reviews)) {
    $reviews = array_filter($reviews, function ($review) use ($min_rating) {
        return $review['rating'] >= $min_rating;
    });
    $reviews = array_values($reviews); // Re-index array
}

// Calculate average rating.
$averageRating = 5.0;
// $totalReviews = 0;
// if (!empty($reviews)) {
//     $totalRating = 0;
//     foreach ($reviews as $review) {
//         $totalRating += $review->rating->value;
//     }
//     $averageRating = round($totalRating / count($reviews), 1);
//     $totalReviews = count($reviews);
// }

// Block classes.
$block_class = 'wp-block-raicof-feed-reviews-google';
if (!empty($block['className'])) {
    $block_class .= ' ' . esc_attr($block['className']);
[internal]
/home/kitchenashf/public_html/wp-content/plugins/raicof_core/build/Blocks/feed-reviews-google/render.php
defined('ABSPATH') || exit;

// Get GoogleReviewsModule singleton to access repository.
$module = \Raicof\Core\Modules\Integrations\GoogleReviews\GoogleReviewsModule::instance();
$repository = $module->getRepository();

// Get block fields.
$section_label = get_field('section_label') ?: 'Recensioner';
$count = get_field('count') ?: 6;
$min_rating = (int) (get_field('min_rating') ?: 4);

// Fetch reviews.
$reviews = $repository->fetchLatest((int) $count);

var_dump($reviews);


// Filter by minimum rating.
if (!empty($reviews)) {
    $reviews = array_filter($reviews, function ($review) use ($min_rating) {
        return $review['rating'] >= $min_rating;
    });
    $reviews = array_values($reviews); // Re-index array
}

// Calculate average rating.
$averageRating = 5.0;
// $totalReviews = 0;
// if (!empty($reviews)) {
//     $totalRating = 0;
//     foreach ($reviews as $review) {
//         $totalRating += $review->rating->value;
//     }
//     $averageRating = round($totalRating / count($reviews), 1);
//     $totalReviews = count($reviews);
// }

// Block classes.
$block_class = 'wp-block-raicof-feed-reviews-google';
if (!empty($block['className'])) {
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php
    } elseif ( file_exists( $block['render_template'] ) ) {
        $path = $block['render_template'];
    } else {
        $path = locate_template( $block['render_template'] );
    }
 
    do_action( 'acf/blocks/pre_block_template_render', $block, $content, $is_preview, $post_id, $wp_block, $context );
 
    // Include template.
    if ( file_exists( $path ) ) {
        if ( $is_preview && ! empty( $block['auto_inline_editing'] ) ) {
            $result = apply_inline_editing_attributes_to_render_template( $path, $block, $is_preview );
 
            // In order to allow block render templates to support any html tags,
            // we must assume that escaping has already been properly handled by the block render template here.
            // Typically we'd use something like wp_kses here, but that would limit the HTML tags that can be used.
            // phpcs:ignore WordPress.Security.EscapeOutput.OutputNotEscaped
            echo $result;
        } else {
            include $path;
        }
    } elseif ( $is_preview ) {
        echo acf_esc_html( apply_filters( 'acf/blocks/template_not_found_message', '<p>' . __( 'The render template for this ACF Block was not found', 'acf' ) . '</p>' ) );
    }
 
    do_action( 'acf/blocks/post_block_template_render', $block, $content, $is_preview, $post_id, $wp_block, $context );
}
 
/**
 * Returns an array of all fields for the given block.
 *
 * @date    24/10/18
 * @since   5.8.0
 *
 * @param   array $block The block props.
 * @return  array
 */
function acf_get_block_fields( $block ) {
    $fields = array();
 
/home/kitchenashf/public_html/wp-includes/class-wp-hook.php
 
        $this->iterations[ $nesting_level ] = $this->priorities;
 
        $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, $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.
/home/kitchenashf/public_html/wp-includes/class-wp-hook.php
        } 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.
     */
    public function do_action( $args ) {
        $this->doing_action = true;
        $this->apply_filters( '', $args );
 
        // If there are recursive calls to the current action, we haven't finished it until we get to the last one.
        if ( ! $this->nesting_level ) {
            $this->doing_action = false;
        }
    }
 
    /**
     * Processes the functions hooked into the 'all' hook.
     *
     * @since 4.7.0
     *
     * @param array $args Arguments to pass to the hook callbacks. Passed by reference.
     */
    public function do_all_hook( &$args ) {
        $nesting_level                      = $this->nesting_level++;
        $this->iterations[ $nesting_level ] = $this->priorities;
 
        do {
            $priority = current( $this->iterations[ $nesting_level ] );
/home/kitchenashf/public_html/wp-includes/plugin.php
    if ( ! isset( $wp_filter[ $hook_name ] ) ) {
        if ( isset( $wp_filter['all'] ) ) {
            array_pop( $wp_current_filter );
        }
 
        return;
    }
 
    if ( ! isset( $wp_filter['all'] ) ) {
        $wp_current_filter[] = $hook_name;
    }
 
    if ( empty( $arg ) ) {
        $arg[] = '';
    } elseif ( is_array( $arg[0] ) && 1 === count( $arg[0] ) && isset( $arg[0][0] ) && is_object( $arg[0][0] ) ) {
        // Backward compatibility for PHP4-style passing of `array( &$this )` as action `$arg`.
        $arg[0] = $arg[0][0];
    }
 
    $wp_filter[ $hook_name ]->do_action( $arg );
 
    array_pop( $wp_current_filter );
}
 
/**
 * Calls the callback functions that have been added to an action hook, specifying arguments in an array.
 *
 * @since 2.1.0
 *
 * @see do_action() 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 int[]     $wp_actions        Stores the number of times each action was triggered.
 * @global string[]  $wp_current_filter Stores the list of current filters with the current one last.
 *
 * @param string $hook_name The name of the action to be executed.
 * @param array  $args      The arguments supplied to the functions hooked to `$hook_name`.
 */
function do_action_ref_array( $hook_name, $args ) {
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php
    // Find post_id if not defined.
    if ( ! $post_id ) {
        $post_id = get_the_ID();
    }
 
    // Enqueue block type assets.
    acf_enqueue_block_type_assets( $block );
 
    $block = acf_add_block_meta_values( $block, $post_id );
 
    // Setup postdata allowing get_field() to work.
    acf_setup_meta( $block['data'], $block['id'], true );
 
    // Call render_callback.
    if ( is_callable( $block['render_callback'] ) ) {
        call_user_func( $block['render_callback'], $block, $content, $is_preview, $post_id, $wp_block, $context );
 
        // Or include template.
    } elseif ( $block['render_template'] ) {
        do_action( 'acf_block_render_template', $block, $content, $is_preview, $post_id, $wp_block, $context );
    }
 
    // Reset postdata.
    acf_reset_meta( $block['id'] );
}
 
/**
 * Locate and include an ACF block's template.
 *
 * @since   6.0.4
 *
 * @param   array $block The block props.
 */
function acf_block_render_template( $block, $content, $is_preview, $post_id, $wp_block, $context ) {
    // Locate template.
    if ( isset( $block['path'] ) && file_exists( $block['path'] . '/' . $block['render_template'] ) ) {
        $path = $block['path'] . '/' . $block['render_template'];
    } elseif ( file_exists( $block['render_template'] ) ) {
        $path = $block['render_template'];
    } else {
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php
            $validation = acf_get_block_validation_state( $block, false, false, true );
        }
 
        $fields = acf_get_block_fields( $block );
        if ( $fields ) {
            acf_prefix_fields( $fields, "acf-{$block['id']}" );
 
            echo '<div class="acf-block-fields acf-fields" data-block-id="' . esc_attr( $block['id'] ) . '">';
            acf_render_fields( $fields, acf_ensure_block_id_prefix( $block['id'] ), 'div', 'field' );
            echo '</div>';
        } else {
            echo acf_get_empty_block_form_html( $attributes['name'] ); //phpcs:ignore -- escaped in function.
        }
    } else {
        if ( $is_preview ) {
            acf_set_data( 'acf_doing_block_preview', true );
        }
 
        // Capture block render output.
        acf_render_block( $attributes, $content, $is_preview, $post_id, $wp_block, $context );
 
        if ( $is_preview && ! $is_ajax_render ) {
            /**
             * If we're in preloaded preview, we need to get the validation state for a preview too.
             * Because the block render resets meta once it's finished to not pollute $post_id, we need to redo that process here.
             */
            $block                = acf_prepare_block( $attributes );
            $block                = acf_add_block_meta_values( $block, $post_id );
            $block_toolbar_fields = acf_process_block_toolbar_fields( apply_filters( 'acf/blocks/top_toolbar_fields', array(), $block, $content, $is_preview, $post_id, $wp_block, $context ) );
            $fields               = acf_get_block_fields( $block );
 
            acf_setup_meta( $block['data'], $block['id'], true );
            if ( ! empty( $block['validate'] ) ) {
                $validation = acf_get_block_validation_state( $block, false, false, true );
            }
        }
    }
 
    $html = ob_get_clean();
    $html = is_string( $html ) ? $html : '';
/home/kitchenashf/public_html/wp-content/plugins/advanced-custom-fields-pro/pro/blocks.php
 * @param   WP_Block $wp_block   The block instance (since WP 5.5).
 * @return  string The block HTML.
 */
function acf_render_block_callback( $attributes, $content = '', $wp_block = null ) {
 
    $is_preview = false;
    $post_id    = get_the_ID();
 
    // Set preview flag to true when rendering for the block editor.
    if ( is_admin() && acf_is_block_editor() ) {
        $is_preview = true;
    }
 
    // If ACF's block save method hasn't been called yet, try to initialize a default block.
    if ( empty( $attributes['name'] ) && ! empty( $wp_block->name ) ) {
        $attributes['name'] = $wp_block->name;
    }
 
    // Return rendered block HTML.
    return acf_rendered_block( $attributes, $content, $is_preview, $post_id, $wp_block );
}
 
/**
 * Returns the rendered block HTML.
 *
 * @date    28/2/19
 * @since   5.7.13
 *
 * @param   array    $attributes     The block attributes.
 * @param   string   $content        The block content.
 * @param   boolean  $is_preview     Whether or not the block is being rendered for editing preview.
 * @param   integer  $post_id        The current post being edited or viewed.
 * @param   WP_Block $wp_block       The block instance (since WP 5.5).
 * @param   array    $context        The block context array.
 * @param   boolean  $is_ajax_render Whether or not this is an ACF AJAX render.
 * @return  string   The block HTML.
 */
function acf_rendered_block( $attributes, $content = '', $is_preview = false, $post_id = 0, $wp_block = null, $context = false, $is_ajax_render = false ) {
    $registry      = WP_Block_Type_Registry::get_instance();
    $wp_block_type = $registry->get_registered( $attributes['name'] );
/home/kitchenashf/public_html/wp-includes/class-wp-block.php
                    }
 
                    ++$index;
                }
            }
        }
 
        if ( ! empty( $computed_attributes ) && ! empty( $block_content ) ) {
            foreach ( $computed_attributes as $attribute_name => $source_value ) {
                $block_content = $this->replace_html( $block_content, $attribute_name, $source_value );
            }
        }
 
        if ( $is_dynamic ) {
            $global_post = $post;
            $parent      = WP_Block_Supports::$block_to_render;
 
            WP_Block_Supports::$block_to_render = $this->parsed_block;
 
            $block_content = (string) call_user_func( $this->block_type->render_callback, $this->attributes, $block_content, $this );
 
            WP_Block_Supports::$block_to_render = $parent;
 
            $post = $global_post;
        }
 
        if ( ( ! empty( $this->block_type->script_handles ) ) ) {
            foreach ( $this->block_type->script_handles as $script_handle ) {
                wp_enqueue_script( $script_handle );
            }
        }
 
        if ( ! empty( $this->block_type->view_script_handles ) ) {
            foreach ( $this->block_type->view_script_handles as $view_script_handle ) {
                wp_enqueue_script( $view_script_handle );
            }
        }
 
        if ( ! empty( $this->block_type->view_script_module_ids ) ) {
            foreach ( $this->block_type->view_script_module_ids as $view_script_module_id ) {
/home/kitchenashf/public_html/wp-includes/blocks.php
     *
     * @param array         $context      Default context.
     * @param array         $parsed_block {
     *     An associative array of the block being rendered. See WP_Block_Parser_Block.
     *
     *     @type string|null $blockName    Name of block.
     *     @type array       $attrs        Attributes from block comment delimiters.
     *     @type array[]     $innerBlocks  List of inner blocks. An array of arrays that
     *                                     have the same structure as this one.
     *     @type string      $innerHTML    HTML from inside block comment delimiters.
     *     @type array       $innerContent List of string fragments and null markers where
     *                                     inner blocks were found.
     * }
     * @param WP_Block|null $parent_block If this is a nested block, a reference to the parent block.
     */
    $context = apply_filters( 'render_block_context', $context, $parsed_block, $parent_block );
 
    $block = new WP_Block( $parsed_block, $context );
 
    return $block->render();
}
 
/**
 * Parses blocks out of a content string.
 *
 * Given an HTML document, this function fully-parses block content, producing
 * a tree of blocks and their contents, as well as top-level non-block content,
 * which will appear as a block with no `blockName`.
 *
 * This function can be memory heavy for certain documents, particularly those
 * with deeply-nested blocks or blocks with extensive attribute values. Further,
 * this function must parse an entire document in one atomic operation.
 *
 * If the entire parsed document is not necessary, consider using {@see WP_Block_Processor}
 * instead, as it provides a streaming and low-overhead interface for finding blocks.
 *
 * @since 5.0.0
 *
 * @param string $content Post content.
 * @return array[] {
/home/kitchenashf/public_html/wp-includes/blocks.php
     * Parsed blocks consist of a list of top-level blocks. Those top-level
     * blocks may themselves contain nested inner blocks. However, every
     * top-level block is rendered independently, meaning there are no data
     * dependencies between them.
     *
     * Ideally, therefore, the parser would only need to parse one complete
     * top-level block at a time, render it, and move on. Unfortunately, this
     * is not possible with {@see \parse_blocks()} because it must parse the
     * entire given document at once.
     *
     * While the current implementation prevents this optimization, it’s still
     * possible to reduce the peak memory use when calls to `render_block()`
     * on those top-level blocks are memory-heavy (which many of them are).
     * By setting each parsed block to `NULL` after rendering it, any memory
     * allocated during the render will be freed and reused for the next block.
     * Before making this change, that memory was retained and would lead to
     * out-of-memory crashes for certain posts that now run with this change.
     */
    for ( $i = 0; $i < $top_level_block_count; $i++ ) {
        $output      .= render_block( $blocks[ $i ] );
        $blocks[ $i ] = null;
    }
 
    // If there are blocks in this content, we shouldn't run wpautop() on it later.
    $priority = has_filter( 'the_content', 'wpautop' );
    if ( false !== $priority && doing_filter( 'the_content' ) && has_blocks( $content ) ) {
        remove_filter( 'the_content', 'wpautop', $priority );
        add_filter( 'the_content', '_restore_wpautop_hook', $priority + 1 );
    }
 
    return $output;
}
 
/**
 * If do_blocks() needs to remove wpautop() from the `the_content` filter, this re-adds it afterwards,
 * for subsequent `the_content` usage.
 *
 * @since 5.0.0
 * @access private
 *
/home/kitchenashf/public_html/wp-includes/blocks/template-part.php
    // Look up area definition.
    $area_definition = null;
    $defined_areas   = get_allowed_block_template_part_areas();
    foreach ( $defined_areas as $defined_area ) {
        if ( $defined_area['area'] === $area ) {
            $area_definition = $defined_area;
            break;
        }
    }
 
    // If $area is not allowed, set it back to the uncategorized default.
    if ( ! $area_definition ) {
        $area = WP_TEMPLATE_PART_AREA_UNCATEGORIZED;
    }
 
    // Run through the actions that are typically taken on the_content.
    $content                       = shortcode_unautop( $content );
    $content                       = do_shortcode( $content );
    $seen_ids[ $template_part_id ] = true;
    $content                       = do_blocks( $content );
    unset( $seen_ids[ $template_part_id ] );
    $content = wptexturize( $content );
    $content = convert_smilies( $content );
    $content = wp_filter_content_tags( $content, "template_part_{$area}" );
 
    // Handle embeds for block template parts.
    global $wp_embed;
    $content = $wp_embed->autoembed( $content );
 
    if ( empty( $attributes['tagName'] ) || tag_escape( $attributes['tagName'] ) !== $attributes['tagName'] ) {
        $area_tag = 'div';
        if ( $area_definition && isset( $area_definition['area_tag'] ) ) {
            $area_tag = $area_definition['area_tag'];
        }
        $html_tag = $area_tag;
    } else {
        $html_tag = esc_attr( $attributes['tagName'] );
    }
    $wrapper_attributes = get_block_wrapper_attributes();
 
/home/kitchenashf/public_html/wp-includes/class-wp-block.php
                    }
 
                    ++$index;
                }
            }
        }
 
        if ( ! empty( $computed_attributes ) && ! empty( $block_content ) ) {
            foreach ( $computed_attributes as $attribute_name => $source_value ) {
                $block_content = $this->replace_html( $block_content, $attribute_name, $source_value );
            }
        }
 
        if ( $is_dynamic ) {
            $global_post = $post;
            $parent      = WP_Block_Supports::$block_to_render;
 
            WP_Block_Supports::$block_to_render = $this->parsed_block;
 
            $block_content = (string) call_user_func( $this->block_type->render_callback, $this->attributes, $block_content, $this );
 
            WP_Block_Supports::$block_to_render = $parent;
 
            $post = $global_post;
        }
 
        if ( ( ! empty( $this->block_type->script_handles ) ) ) {
            foreach ( $this->block_type->script_handles as $script_handle ) {
                wp_enqueue_script( $script_handle );
            }
        }
 
        if ( ! empty( $this->block_type->view_script_handles ) ) {
            foreach ( $this->block_type->view_script_handles as $view_script_handle ) {
                wp_enqueue_script( $view_script_handle );
            }
        }
 
        if ( ! empty( $this->block_type->view_script_module_ids ) ) {
            foreach ( $this->block_type->view_script_module_ids as $view_script_module_id ) {
/home/kitchenashf/public_html/wp-includes/blocks.php
     *
     * @param array         $context      Default context.
     * @param array         $parsed_block {
     *     An associative array of the block being rendered. See WP_Block_Parser_Block.
     *
     *     @type string|null $blockName    Name of block.
     *     @type array       $attrs        Attributes from block comment delimiters.
     *     @type array[]     $innerBlocks  List of inner blocks. An array of arrays that
     *                                     have the same structure as this one.
     *     @type string      $innerHTML    HTML from inside block comment delimiters.
     *     @type array       $innerContent List of string fragments and null markers where
     *                                     inner blocks were found.
     * }
     * @param WP_Block|null $parent_block If this is a nested block, a reference to the parent block.
     */
    $context = apply_filters( 'render_block_context', $context, $parsed_block, $parent_block );
 
    $block = new WP_Block( $parsed_block, $context );
 
    return $block->render();
}
 
/**
 * Parses blocks out of a content string.
 *
 * Given an HTML document, this function fully-parses block content, producing
 * a tree of blocks and their contents, as well as top-level non-block content,
 * which will appear as a block with no `blockName`.
 *
 * This function can be memory heavy for certain documents, particularly those
 * with deeply-nested blocks or blocks with extensive attribute values. Further,
 * this function must parse an entire document in one atomic operation.
 *
 * If the entire parsed document is not necessary, consider using {@see WP_Block_Processor}
 * instead, as it provides a streaming and low-overhead interface for finding blocks.
 *
 * @since 5.0.0
 *
 * @param string $content Post content.
 * @return array[] {
/home/kitchenashf/public_html/wp-includes/blocks.php
     * Parsed blocks consist of a list of top-level blocks. Those top-level
     * blocks may themselves contain nested inner blocks. However, every
     * top-level block is rendered independently, meaning there are no data
     * dependencies between them.
     *
     * Ideally, therefore, the parser would only need to parse one complete
     * top-level block at a time, render it, and move on. Unfortunately, this
     * is not possible with {@see \parse_blocks()} because it must parse the
     * entire given document at once.
     *
     * While the current implementation prevents this optimization, it’s still
     * possible to reduce the peak memory use when calls to `render_block()`
     * on those top-level blocks are memory-heavy (which many of them are).
     * By setting each parsed block to `NULL` after rendering it, any memory
     * allocated during the render will be freed and reused for the next block.
     * Before making this change, that memory was retained and would lead to
     * out-of-memory crashes for certain posts that now run with this change.
     */
    for ( $i = 0; $i < $top_level_block_count; $i++ ) {
        $output      .= render_block( $blocks[ $i ] );
        $blocks[ $i ] = null;
    }
 
    // If there are blocks in this content, we shouldn't run wpautop() on it later.
    $priority = has_filter( 'the_content', 'wpautop' );
    if ( false !== $priority && doing_filter( 'the_content' ) && has_blocks( $content ) ) {
        remove_filter( 'the_content', 'wpautop', $priority );
        add_filter( 'the_content', '_restore_wpautop_hook', $priority + 1 );
    }
 
    return $output;
}
 
/**
 * If do_blocks() needs to remove wpautop() from the `the_content` filter, this re-adds it afterwards,
 * for subsequent `the_content` usage.
 *
 * @since 5.0.0
 * @access private
 *
/home/kitchenashf/public_html/wp-includes/block-template.php
     * loop, it would not cause errors since it would use a cloned instance and go through the same loop of a single
     * post, within the actual main query loop.
     *
     * This special logic should be skipped if the current template does not come from the current theme, in which case
     * it has been injected by a plugin by hijacking the block template loader mechanism. In that case, entirely custom
     * logic may be applied which is unpredictable and therefore safer to omit this special handling on.
     */
    if (
        $_wp_current_template_id &&
        str_starts_with( $_wp_current_template_id, get_stylesheet() . '//' ) &&
        is_singular() &&
        1 === $wp_query->post_count &&
        have_posts()
    ) {
        while ( have_posts() ) {
            the_post();
            $content = do_blocks( $content );
        }
    } else {
        $content = do_blocks( $content );
    }
 
    $content = wptexturize( $content );
    $content = convert_smilies( $content );
    $content = wp_filter_content_tags( $content, 'template' );
    $content = str_replace( ']]>', ']]&gt;', $content );
 
    // Wrap block template in .wp-site-blocks to allow for specific descendant styles
    // (e.g. `.wp-site-blocks > *`).
    return '<div class="wp-site-blocks">' . $content . '</div>';
}
 
/**
 * Renders a 'viewport' meta tag.
 *
 * This is hooked into {@see 'wp_head'} to decouple its output from the default template canvas.
 *
 * @access private
 * @since 5.8.0
 */
/home/kitchenashf/public_html/wp-includes/template-canvas.php
<?php
/**
 * Template canvas file to render the current 'wp_template'.
 *
 * @package WordPress
 */
 
/*
 * Get the template HTML.
 * This needs to run before <head> so that blocks can add scripts and styles in wp_head().
 */
$template_html = get_the_block_template_html();
?><!DOCTYPE html>
<html <?php language_attributes(); ?>>
<head>
    <meta charset="<?php bloginfo( 'charset' ); ?>" />
    <?php wp_head(); ?>
</head>
 
<body <?php body_class(); ?>>
<?php wp_body_open(); ?>
 
<?php echo $template_html; ?>
 
<?php wp_footer(); ?>
</body>
</html>
 
/home/kitchenashf/public_html/wp-includes/template-loader.php
 
    /**
     * 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 ) {
        /**
         * Fires immediately before including the template.
         *
         * @since 6.9.0
         *
         * @param string $template The path of the template about to be included.
         */
        do_action( 'wp_before_include_template', $template );
 
        include $template;
    } elseif ( current_user_can( 'switch_themes' ) ) {
        $theme = wp_get_theme();
        if ( $theme->errors() ) {
            wp_die( $theme->errors() );
        }
    }
    return;
}
 
/home/kitchenashf/public_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';
 
}
 
/home/kitchenashf/public_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
empty
empty
Key Value
SERVER_SOFTWARE Apache
REQUEST_URI /
USER kitchenashf
HOME /home/kitchenashf
SCRIPT_NAME /index.php
QUERY_STRING
REQUEST_METHOD GET
SERVER_PROTOCOL HTTP/1.1
GATEWAY_INTERFACE CGI/1.1
REMOTE_PORT 21819
SCRIPT_FILENAME /home/kitchenashf/public_html/index.php
SERVER_ADMIN webmaster@ashford.kitchen
CONTEXT_DOCUMENT_ROOT /home/kitchenashf/public_html
CONTEXT_PREFIX
REQUEST_SCHEME https
DOCUMENT_ROOT /home/kitchenashf/public_html
REMOTE_ADDR 216.73.216.161
SERVER_PORT 443
SERVER_ADDR 51.38.99.231
SERVER_NAME ashford.kitchen
SERVER_SIGNATURE
PATH /usr/local/jdk/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/X11R6/bin:/usr/local/bin:/usr/X11R6/bin:/root/bin:/opt/bin
HTTP_X_HTTPS 1
HTTP_HOST ashford.kitchen
HTTP_ACCEPT_ENCODING gzip, br, zstd, deflate
HTTP_USER_AGENT Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
HTTP_ACCEPT */*
proxy-nokeepalive 1
SSL_TLS_SNI ashford.kitchen
HTTPS on
HTTP_AUTHORIZATION
SCRIPT_URI https://ashford.kitchen/
SCRIPT_URL /
UNIQUE_ID aZ3qwdKQ83aSsxlVcvXmUAAAAAs
FCGI_ROLE RESPONDER
PHP_SELF /index.php
REQUEST_TIME_FLOAT 1771956929.6799
REQUEST_TIME 1771956929
argv Array ( )
argc 0
empty
0. Whoops\Handler\PrettyPageHandler