Skip to content

Commit

Permalink
Workaround to support surecart product templates
Browse files Browse the repository at this point in the history
  • Loading branch information
kadencewp committed Dec 27, 2024
1 parent e8630c0 commit 967b0f8
Showing 1 changed file with 86 additions and 56 deletions.
142 changes: 86 additions & 56 deletions includes/class-kadence-blocks-frontend.php
Original file line number Diff line number Diff line change
Expand Up @@ -71,6 +71,8 @@ public function __construct() {
if ( ! is_admin() ) {
add_action( 'render_block', array( $this, 'conditionally_render_block' ), 6, 3 );
}
// Add Custom support for SureCart Single Product Page.
add_action( 'wp_enqueue_scripts', [ $this, 'enqueue_surecart_single_product_template' ], 20 );
}

/**
Expand Down Expand Up @@ -381,6 +383,27 @@ public function print_gfonts( $gfonts ) {
}
echo '<link href="' . $full_link . '" rel="stylesheet">'; //phpcs:ignore
}
/**
* Process the SC Single Product Template for Kadence Blocks.
*/
public function enqueue_surecart_single_product_template() {
if ( ! is_singular( 'sc_product' ) ) {
return;
}
if ( function_exists( 'sc_get_product' ) ) {
$product = sc_get_product();
$template_part_id = $product->template_part_id ?? 'surecart/surecart//product-info'; // Get the template part ID.
$template = get_block_template( $template_part_id, 'wp_template_part' );
if ( ! $template ) {
$template = get_block_template( 'surecart/surecart//product-info', 'wp_template_part' );
}
$blocks = $template->content ?? '';
if ( ! empty( $blocks ) ) {
$blocks = parse_blocks( $blocks );
$this->frontend_css_parse( $blocks );
}
}
}

/**
* Outputs extra css for blocks.
Expand All @@ -407,76 +430,83 @@ public function frontend_build_css( $post_object ) {
if ( ! method_exists( $post_object, 'post_content' ) ) {
$post_content = apply_filters( 'as3cf_filter_post_local_to_provider', $post_object->post_content );
$blocks = parse_blocks( $post_content );
if ( ! is_array( $blocks ) || empty( $blocks ) ) {
return;
}
$kadence_blocks = apply_filters( 'kadence_blocks_blocks_to_generate_post_css', array() );
foreach ( $blocks as $indexkey => $block ) {
$block = apply_filters( 'kadence_blocks_frontend_build_css', $block );
if ( ! is_object( $block ) && is_array( $block ) && isset( $block['blockName'] ) ) {
if ( isset( $kadence_blocks[ $block['blockName'] ] ) ) {
$block_class_instance = $kadence_blocks[ $block['blockName'] ]::get_instance();
$block_class_instance->output_head_data( $block );
}
/** !!!! Needs to stay to build schema !!! **/
if ( 'kadence/accordion' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
if ( isset( $block['attrs']['faqSchema'] ) && $block['attrs']['faqSchema'] ) {
$this->render_accordion_scheme_head( $block );
}
$this->frontend_css_parse( $blocks );
}
}
/**
* Parse blocks for css.
* @param array $blocks array of blocks.
*/
public function frontend_css_parse( $blocks ) {
if ( ! is_array( $blocks ) || empty( $blocks ) ) {
return;
}
$kadence_blocks = apply_filters( 'kadence_blocks_blocks_to_generate_post_css', array() );
foreach ( $blocks as $indexkey => $block ) {
$block = apply_filters( 'kadence_blocks_frontend_build_css', $block );
if ( ! is_object( $block ) && is_array( $block ) && isset( $block['blockName'] ) ) {
if ( isset( $kadence_blocks[ $block['blockName'] ] ) ) {
$block_class_instance = $kadence_blocks[ $block['blockName'] ]::get_instance();
$block_class_instance->output_head_data( $block );
}
/** !!!! Needs to stay to build schema !!! **/
if ( 'kadence/accordion' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
if ( isset( $block['attrs']['faqSchema'] ) && $block['attrs']['faqSchema'] ) {
$this->render_accordion_scheme_head( $block );
}
}
if ( 'core/block' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['ref'] ) ) {
$reusable_block = get_post( $blockattr['ref'] );
if ( $reusable_block && 'wp_block' === $reusable_block->post_type ) {
$reuse_data_block = parse_blocks( $reusable_block->post_content );
$this->blocks_cycle_through( $reuse_data_block, $kadence_blocks );
}
}
if ( 'core/block' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['ref'] ) ) {
$reusable_block = get_post( $blockattr['ref'] );
if ( $reusable_block && 'wp_block' === $reusable_block->post_type ) {
$reuse_data_block = parse_blocks( $reusable_block->post_content );
$this->blocks_cycle_through( $reuse_data_block, $kadence_blocks );
}
}
}
if ( 'kadence/advanced-form' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['id'] ) ) {
$form_block = get_post( $blockattr['id'] );
if ( $form_block && 'kadence_form' === $form_block->post_type ) {
$form_data_block = parse_blocks( $form_block->post_content );
$this->blocks_cycle_through( $form_data_block, $kadence_blocks );
}
}
if ( 'kadence/advanced-form' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['id'] ) ) {
$form_block = get_post( $blockattr['id'] );
if ( $form_block && 'kadence_form' === $form_block->post_type ) {
$form_data_block = parse_blocks( $form_block->post_content );
$this->blocks_cycle_through( $form_data_block, $kadence_blocks );
}
}
}
if ( 'kadence/header' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['id'] ) ) {
$header_block = get_post( $blockattr['id'] );
if ( $header_block && 'kadence_header' === $header_block->post_type ) {
$header_data_block = parse_blocks( $header_block->post_content );
$this->blocks_cycle_through( $header_data_block, $kadence_blocks );
}
}
if ( 'kadence/header' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['id'] ) ) {
$header_block = get_post( $blockattr['id'] );
if ( $header_block && 'kadence_header' === $header_block->post_type ) {
$header_data_block = parse_blocks( $header_block->post_content );
$this->blocks_cycle_through( $header_data_block, $kadence_blocks );
}
}
}
if ( 'kadence/navigation' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['id'] ) ) {
$navigation_block = get_post( $blockattr['id'] );
if ( $navigation_block && 'kadence_navigation' === $navigation_block->post_type ) {
$navigation_data_block = parse_blocks( $navigation_block->post_content );
$this->blocks_cycle_through( $navigation_data_block, $kadence_blocks );
}
}
if ( 'kadence/navigation' === $block['blockName'] ) {
if ( isset( $block['attrs'] ) && is_array( $block['attrs'] ) ) {
$blockattr = $block['attrs'];
if ( isset( $blockattr['id'] ) ) {
$navigation_block = get_post( $blockattr['id'] );
if ( $navigation_block && 'kadence_navigation' === $navigation_block->post_type ) {
$navigation_data_block = parse_blocks( $navigation_block->post_content );
$this->blocks_cycle_through( $navigation_data_block, $kadence_blocks );
}
}
}
if ( ! empty( $block['innerBlocks'] ) && is_array( $block['innerBlocks'] ) ) {
$this->blocks_cycle_through( $block['innerBlocks'], $kadence_blocks );
}
}
if ( ! empty( $block['innerBlocks'] ) && is_array( $block['innerBlocks'] ) ) {
$this->blocks_cycle_through( $block['innerBlocks'], $kadence_blocks );
}
}
}
Expand Down

0 comments on commit 967b0f8

Please sign in to comment.