0

I've created a child theme, and moved all the modifications I had in the parent theme functions.php into the child theme's functions.php. Now if I preview the theme, it is blank.

I've got three things - changing the number of tags displayed in the cloud, hiding a product category and displaying a Google books preview.

I can't see any errors in this code, and it works when it's in the parent.

I would appreciate any help, I'm totally stuck!

<?php

function change_tag_cloud_widget() {
    $args['number'] = 15;
    return $args;
}
add_filter( 'widget_tag_cloud_args', 'change_tag_cloud_widget' );

add_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

function custom_pre_get_posts_query( $q ) {

if ( ! $q->is_main_query() ) return;
if ( ! $q->is_post_type_archive() ) return;
if ( ! is_admin() ) {

$q->set( 'tax_query', array(array(
'taxonomy' => 'product_cat',
'field' => 'slug',
'terms' => array( 'hands-on' ), // Don't display products in the hands-on category on the shop page
'operator' => 'NOT IN'
)));
}

remove_action( 'pre_get_posts', 'custom_pre_get_posts_query' );

    }

add_shortcode('gbooks', 'sc_embed_google_books');
function sc_embed_google_books( $atts ){
    extract(shortcode_atts(array(
            "id" => '',
            "width"  => '600',
            "height" => '900',
    ), $atts));
    return '<script type="text/javascript" src="http://books.google.com/books/previewlib.js"></script>
    <script type="text/javascript">
    GBS_insertPreviewButtonPopup("'.$id.'", '.$width.','.$height.');
    </script>';
}


function get_google_tag( $isbn_metadata ) {
return (
    /* '<span class="post-meta-key">Preview: </span>' . */
    '<script type="text/javascript" src="http://books.google.com/books/previewlib.js"></script>' .
    '<script type="text/javascript">' .
    'GBS_insertPreviewButtonPopup(\'ISBN:' . $isbn_metadata . '\');' .
    '</script>'
);
}

?>
  • Most probably you are getting a cannot redeclare fatal error? – Pieter Goosen Sep 4 '14 at 7:24
  • Another thing, just to mention, do not use extract. Check in the codex in the shortcode API how to correctly construct a shortcode – Pieter Goosen Sep 4 '14 at 7:28
  • Thanks for the input Pieter. I'm not sure how to tell if I'm getting a "cannot redeclare fatal error". I don't know what this means or how to fix it! I will ask the person who did the google shortcode to fix the extract thing. – RexTheRunt Sep 4 '14 at 10:22
  • Quick check, you said you copied these functions from the parent theme. Are these functions wrapped in a if(!function_exists()) condition. If not, you cannot just copy a function to the child theme. This will trigger a cannot redeclare fatal error. No 2 functions can have the same name, except under the condition as stated. Turn on debug in wp-config.php – Pieter Goosen Sep 4 '14 at 11:01
  • No, I moved them - they are no longer in the parent - they were not included in the parent in the first place, I had added them. – RexTheRunt Sep 4 '14 at 11:56
0

I've created a child theme, and moved all the modifications I had in the parent theme functions.php into the child theme's functions.php

Don't move all the functions from the parent theme into the child theme, just add the modifications to the child theme and leave the parent functions.php as it came with the theme.

You are most likely loading the functions twice as a result.

Unlike style.css, the functions.php of a child theme does not override its counterpart from the parent. Instead, it is loaded in addition to the parent’s functions.php. (Specifically, it is loaded right before the parent’s file.)

http://codex.wordpress.org/Child_Themes#Using_functions.php

  • See my comment above - these are new functions not included with the parent. – RexTheRunt Sep 4 '14 at 11:59
  • When wp_debug is set to true in your wp_config.php file, what errors is it giving you? define( 'WP_DEBUG', true ); – stemie Sep 4 '14 at 14:19
  • Fatal error: Cannot redeclare custom_pre_get_posts_query() in my_parent_theme/functions.php on line 42 – RexTheRunt Sep 4 '14 at 14:28
  • Search for custom_pre_get_posts_query in your parent functions file and remove it, only have that function in your child theme. If there are two different functions with the same name, make them unique. – stemie Sep 4 '14 at 14:32
  • oh I just see what happened - in my child theme's style.css I had the @import set to the correct parent, but not the template. Thanks for putting me on the right track with the debug, Pieter & stemie. – RexTheRunt Sep 4 '14 at 14:33

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.