• So I have a child theme and want to change add a function to my functions.pp file that will over ride a function in another file of the parent theme but i get the below error.

    Fatal error: Cannot redeclare hesta_bottom_footer_content() (previously declared in C:\xampp\htdocs\hcldesign\wp-content\themes\hestia-child\functions.php:36) in C:\xampp\htdocs\hcldesign\wp-content\themes\hestia\inc\template-tags.php on line 835

    Any idea on how i can fix this?

    Thanks,

    Harvey

Viewing 4 replies - 1 through 4 (of 4 total)
  • Themes need to explicitly support this by making their function ‘pluggable’, which means wrapping their function definitions in an if ( function_exists() ) statement.

    If the function is only used in a hook (add_action or apply_filters etc.) then you can use remove_action to unhook it, and then add your own new function in its place.

    If the function is used in a template, then as long as that template belongs to the template hierarchy, or is included with get_template_part(), you would be able to replace that template file and use your own new function in place of the parent theme’s.

    If it’s not used in either of those ways, there’s not much you can really do about it other than asking the theme developer for better child theme support.

    Thread Starter harveyl12

    (@harveyl12)

    Hi,

    So what would you suggest I can try here?

    Add get_template_part (inc)?

    The theme is hestia? I am able to change the parent file to do what I want but invisibly every update for the theme will change this back.

    Any help will be appreciated

    Thanks

    Harvey

    This is really a topic for the theme’s support forum, but I have the answer so will post it.

    The function you want to replace is used inside the hestia_the_footer_content() function, which is hooked to hestia_do_footer.

    So you’ll want to unhook hestia_the_footer_content from hestia_do_footer and hook a new function.

    function childtheme_replace_footer_content() {
    	remove_action( 'hestia_do_footer', 'hestia_the_footer_content' );
    	add_action( 'hestia_do_footer', 'childtheme_the_footer_content' );
    }
    add_action( 'init', 'childtheme_unhook_parent' );
    

    Copy the hestia_the_footer_content() function to your child theme with a new name (in my example, it’s childtheme_the_footer_content) and replace the call to hesta_bottom_footer_content() inside it with a call to your new function that you want to replace it with.

    • This reply was modified 7 years, 7 months ago by Jacob Peattie.
    Thread Starter harveyl12

    (@harveyl12)

    Hi,

    Okay i’m not too familiar with PHP.

    So this is the code I am wanting to put in the /hestia-child/functions.php which is originally in WP-Content/themes/hestia/inc/template-tags.php

    function hesta_bottom_footer_content( $is_callback = false ) {
    	if ( ! $is_callback ) {
    	?>
    		<div class="hestia-bottom-footer-content">
    		<?php
    	}
    	$hestia_general_credits     = get_theme_mod(
    		'hestia_general_credits',
    		sprintf(
    			/* translators: %1$s is Theme Name, %2$s is WordPress */
    			esc_html__( 'Designed by HCL Design' ),
    			sprintf(
    				/* translators: %s is Theme name */
    				'<a href="https://themeisle.com/themes/hestia/" target="_blank" rel="nofollow">%s</a>',
    				esc_html__( 'Hestia', 'hestia' )
    			),
    			/* translators: %s is WordPress */
    			sprintf(
    				'<a href="%1$s" rel="nofollow">%2$s</a>',
    				esc_url( __( 'https://www.remarpro.com', 'hestia' ) ),
    				esc_html__( 'WordPress', 'hestia' )
    			)
    		)
    	);
    	$hestia_copyright_alignment = get_theme_mod( 'hestia_copyright_alignment', 'right' );
    	$menu_class                 = 'pull-left';
    	$copyright_class            = 'pull-right';
    	switch ( $hestia_copyright_alignment ) {
    		case 'left':
    			$menu_class      = 'pull-right';
    			$copyright_class = 'pull-left';
    			break;
    		case 'center':
    			$menu_class      = 'hestia-center';
    			$copyright_class = 'hestia-center';
    	}
    	wp_nav_menu(
    		array(
    			'theme_location' => 'footer',
    			'depth'          => 1,
    			'container'      => 'ul',
    			'menu_class'     => 'footer-menu ' . esc_attr( $menu_class ),
    		)
    	);
    		?>
    	<?php if ( ! empty( $hestia_general_credits ) || is_customize_preview() ) : ?>
    		<div class="copyright <?php echo esc_attr( $copyright_class ); ?>">
    			<?php echo wp_kses_post( $hestia_general_credits ); ?>
    		</div>
    	<?php endif; ?>
    	<?php
    	if ( ! $is_callback ) {
    	?>
    		</div>
    		<?php
    	}
    }

    So have you got any idea how i would code this in?

    Is this unhook and hook to be added to the functions.php file?

    • This reply was modified 7 years, 7 months ago by harveyl12.
Viewing 4 replies - 1 through 4 (of 4 total)
  • The topic ‘cannot redeclare function’ is closed to new replies.