'Replace class-wc-twenty-seventeen.php from WooCommerce plugin

I want to replace this template: class-wc-twenty-seventeen.php from plugin woocommerce/includes/theme-support/class-wc-twenty-seventeen.php

class-wc-twenty-seventeen.php code:

<?php
if ( ! defined( 'ABSPATH' ) ) {
exit;
}

/**
 * Twenty Seventeen suport.
 *
 * @class   WC_Twenty_Seventeen
 * @since   2.6.9
 * @version 2.6.9
 * @package WooCommerce/Classes
 */
class WC_Twenty_Seventeen {

/**
 * Constructor.
 */
public function __construct() {
    remove_action( 'woocommerce_before_main_content', 'woocommerce_output_content_wrapper', 10 );
    remove_action( 'woocommerce_after_main_content', 'woocommerce_output_content_wrapper_end', 10 );

    add_action( 'woocommerce_before_main_content', array( $this, 'output_content_wrapper' ), 10 );
    add_action( 'woocommerce_after_main_content', array( $this, 'output_content_wrapper_end' ), 10 );
    add_filter( 'woocommerce_enqueue_styles', array( $this, 'enqueue_styles' ) );
}

/**
 * Enqueue CSS for this theme.
 *
 * @param  array $styles
 * @return array
 */
public function enqueue_styles( $styles ) {
    unset( $styles['woocommerce-general'] );

    $styles['woocommerce-twenty-seventeen'] = array(
        'src'     => str_replace( array( 'http:', 'https:' ), '', WC()->plugin_url() ) . '/assets/css/twenty-seventeen.css',
        'deps'    => '',
        'version' => WC_VERSION,
        'media'   => 'all',
    );

    return apply_filters( 'woocommerce_twenty_seventeen_styles', $styles );
}

/**
 * Open the Twenty Seventeen wrapper.
 */
public function output_content_wrapper() { ?>
    <div class="wrap">
        <div id="primary" class="content-area twentyseventeen">
            <main id="main" class="site-main" role="main">
    <?php
}

/**
 * Close the Twenty Seventeen wrapper.
 */
public function output_content_wrapper_end() { ?>
            </main>
        </div>
        <?php get_sidebar(); ?>
    </div>
    <?php
}
}

new WC_Twenty_Seventeen();

What I actually want

I need to modify this function public function output_content_wrapper_end() so I could remove that get_sidebar(); and the Sidebar will not be called anymore in the Main Shop page.

Can somebody help me please?



Solution 1:[1]

In general, you just need to remove the action you don't want, and then replace it with your own action. There doesn't seem to be a good way to access the WC_Twenty_Seventeen without reinitializing it. Therefore, I think this should work:

add_action( 'woocommerce_before_main_content', 'so_42400911_change_end_wrapper', 5 );
function so_42400911_change_end_wrapper(){
    if ( 'twentyseventeen' == get_template() ) {
        remove_action( 'woocommerce_after_main_content', array( 'WC_Twenty_Seventeen', 'output_content_wrapper_end' ), 10 );
        add_action( 'woocommerce_after_main_content', 'so_42400911_new_end_wrapper' );
    }
}

function so_42400911_new_end_wrapper(){ ?>
            </main>
        </div>
    </div>
    <?php
}

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Iurie