I’m trying to redeclare a function in a wordpress child theme that is already in use by the parent theme. However, I get a “Fatal error: Cannot redeclare” message when trying to do so.
Also, I’ve tried using the following with no luck:
if (!function_exists('jr_load_scripts')) {
// do fancy things here...
}
Here’s the link if you want to have a quick look…
EDIT: Here’s the full code:
if (!function_exists('jr_load_scripts')) {
function jr_load_scripts() {
global $app_abbr;
$http = (is_ssl()) ? 'https' : 'http';
// load google cdn hosted scripts if enabled
if (get_option($app_abbr.'_google_jquery') == 'yes') :
wp_deregister_script('jquery');
wp_register_script('jquery', (''.$http.'://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js'), false, '1.4.2');
wp_register_script('jquery-ui-custom', ''.$http.'://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js', false, '1.8');
else :
wp_register_script('jquery-ui-custom', get_bloginfo('template_directory').'/includes/js/jquery-ui-1.8.custom.min.js', false, '1.8');
endif;
wp_enqueue_script('jquery');
wp_enqueue_script('jquery-ui-custom');
wp_enqueue_script('jquery-tag', get_bloginfo('template_directory').'/includes/js/jquery.tag.js', array('jquery'), '');
wp_enqueue_script('smoothscroll', get_bloginfo('template_directory').'/includes/js/smoothscroll.js', array('jquery'), '');
wp_enqueue_script('lazyload', get_bloginfo('template_directory').'/includes/js/jquery.lazyload.mini.js', array('jquery'), '1.5.0');
wp_enqueue_script('elastic', get_bloginfo('template_directory').'/includes/js/jquery.elastic.js', array('jquery'), '1.0');
wp_enqueue_script('fancybox', get_bloginfo('template_directory').'/includes/js/jquery.fancybox-1.3.4.pack.js', array('jquery'), '1.3.4');
wp_enqueue_script('qtip', get_bloginfo('template_directory').'/includes/js/jquery.qtip.min.js', array('jquery'), '1.0.0-rc3');
wp_enqueue_script('general', get_bloginfo('template_directory').'/includes/js/theme-scripts.js', array('jquery'), '3.0');
$jr_enable_indeed_feeds = get_option('jr_enable_indeed_feeds');
if ($jr_enable_indeed_feeds=='yes') :
wp_enqueue_script('indeed-api', ''.$http.'://www.indeed.com/ads/apiresults.js');
endif;
}
It is somewhat counter-intuitive but WordPress loads child’s theme code before parent’s theme. So wrapping anything in
function_exists()
in child theme does nothing, it’s parent theme that needs to have that.Better option is to unhook parent’s theme function (unless it’s run right at load, which it should not do) and hook your own.