defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );/** * When WP sets the update_plugins site transient, we set our own transient, then see rocket_add_response_to_updates * * @since 2.6.5 * * @param Object $value Site transient object. */ function rocket_check_update( $value ) { $timer_update_wprocket = (int) get_site_transient( 'update_wprocket' ); $temp_object = get_site_transient( 'update_wprocket_response' ); if ( ( ! isset( $_GET['rocket_force_update'] ) || defined( 'WP_INSTALLING' ) ) && ( 12 * HOUR_IN_SECONDS ) > ( time() - $timer_update_wprocket ) // retry in 12 hours. ) { if ( is_object( $value ) && false !== $temp_object ) { if ( version_compare( $temp_object->new_version, WP_ROCKET_VERSION ) > 0 ) { $value->response[ $temp_object->plugin ] = $temp_object; } else { delete_site_transient( 'update_wprocket_response' ); } } return $value; }if ( isset( $_GET['rocket_force_update'] ) ) { $_SERVER['REQUEST_URI'] = remove_query_arg( 'rocket_force_update' ); }$plugin_folder = plugin_basename( dirname( WP_ROCKET_FILE ) ); $plugin_file = basename( WP_ROCKET_FILE ); $version = true; if ( ! $value ) { $value = new stdClass(); $value->last_checked = time(); }$response = wp_remote_get( WP_ROCKET_WEB_CHECK, array( 'timeout' => 30, ) ); if ( ! is_a( $response, 'WP_Error' ) && 200 === $response['response']['code'] && strlen( $response['body'] ) > 32 ) {set_site_transient( 'update_wprocket', time() );list( $version, $url ) = explode( '|', $response['body'] ); if ( version_compare( $version, WP_ROCKET_VERSION ) <= 0 ) { return $value; }$temp_array = array( 'slug' => $plugin_folder, 'plugin' => $plugin_folder . '/' . $plugin_file, 'new_version' => $version, 'url' => 'http://wp-rocket.me', 'package' => $url, );$temp_object = (object) $temp_array; $value->response[ $plugin_folder . '/' . $plugin_file ] = $temp_object;set_site_transient( 'update_wprocket_response', $temp_object ); } else { set_site_transient( 'update_wprocket', ( time() + ( 11 * HOUR_IN_SECONDS ) ) ); // retry in 1 hour in case of error.. } return $value; } add_filter( 'site_transient_update_plugins', 'rocket_check_update', 1 );/** * When WP deletes the update_plugins site transient or updates the plugins, we delete our own transients to avoid another 12 hours waiting * * @since 2.6.8 * * @param string $transient Transient name. * @param object $value Transient object. */ function rocket_reset_check_update_timer( $transient = 'update_plugins', $value = null ) { // $value used by setted. if ( 'update_plugins' === $transient ) { if ( is_null( $value ) || is_object( $value ) && ! isset( $value->response ) ) { delete_site_transient( 'update_wprocket' ); } } } add_action( 'wp_update_plugins', 'rocket_reset_check_update_timer', 9 ); // WP Cron. add_action( 'deleted_site_transient', 'rocket_reset_check_update_timer' ); add_action( 'setted_site_transient', 'rocket_reset_check_update_timer' );defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );global $wp_version;if ( version_compare( $wp_version, '4.2' ) >= 0 && get_rocket_option( 'emoji', 0 ) ) : /** * Disable the emoji functionality to reduce then number of external HTTP requests. * * @since 2.7 */ function rocket_disable_emoji() { remove_action( 'wp_head' , 'print_emoji_detection_script', 7 ); remove_action( 'admin_print_scripts' , 'print_emoji_detection_script' ); remove_filter( 'the_content_feed' , 'wp_staticize_emoji' ); remove_filter( 'comment_text_rss' , 'wp_staticize_emoji' ); remove_filter( 'wp_mail' , 'wp_staticize_emoji_for_email' ); } add_action( 'init', 'rocket_disable_emoji' );/** * Remove the tinymce emoji plugin. * * @since 2.7 * * @param Array $plugins Plugins loaded for TinyMCE. */ function rocket_disable_emoji_tinymce( $plugins ) { if ( is_array( $plugins ) ) { return array_diff( $plugins, array( 'wpemoji' ) ); }return array(); } add_filter( 'tiny_mce_plugins', 'rocket_disable_emoji_tinymce' ); endif;defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );global $wp_version;if ( version_compare( $wp_version, '4.4' ) >= 0 && get_rocket_option( 'embeds', 0 ) ) : /** * Disable embeds on init. * * - Removes the needed query vars. * - Disables oEmbed discovery. * - Completely removes the related JavaScript. * * @since 2.10 * @author Remy Perona */ function rocket_disable_embeds_init() { /* @var WP $wp */ global $wp;// Remove the embed query var. $wp->public_query_vars = array_diff( $wp->public_query_vars, array( 'embed', ) );// Remove the REST API endpoint. remove_action( 'rest_api_init', 'wp_oembed_register_route' );// Turn off oEmbed auto discovery. add_filter( 'embed_oembed_discover', '__return_false' );// Don't filter oEmbed results. remove_filter( 'oembed_dataparse', 'wp_filter_oembed_result', 10 );// Remove oEmbed discovery links. remove_action( 'wp_head', 'wp_oembed_add_discovery_links' );// Remove oEmbed-specific JavaScript from the front-end and back-end. remove_action( 'wp_head', 'wp_oembed_add_host_js' ); add_filter( 'tiny_mce_plugins', 'rocket_disable_embeds_tiny_mce_plugin' );// Remove all embeds rewrite rules. add_filter( 'rewrite_rules_array', 'rocket_disable_embeds_rewrites' );// Remove filter of the oEmbed result before any HTTP requests are made. remove_filter( 'pre_oembed_result', 'wp_filter_pre_oembed_result', 10 ); } add_action( 'init', 'rocket_disable_embeds_init', 9999 );/** * Removes the 'wpembed' TinyMCE plugin. * * @since 2.10 * @author Remy Perona * * @param array $plugins List of TinyMCE plugins. * @return array The modified list. */ function rocket_disable_embeds_tiny_mce_plugin( $plugins ) { return array_diff( $plugins, array( 'wpembed' ) ); }/** * Remove all rewrite rules related to embeds. * * @since 2.10 * @author Remy Perona * * @param array $rules WordPress rewrite rules. * @return array Rewrite rules without embeds rules. */ function rocket_disable_embeds_rewrites( $rules ) { foreach ( $rules as $rule => $rewrite ) { if ( false !== strpos( $rewrite, 'embed=true' ) ) { unset( $rules[ $rule ] ); } }return $rules; } endif;defined( 'ABSPATH' ) || die( 'Cheatin’ uh?' );// Launch hooks that deletes all the cache domain. add_action( 'switch_theme' , 'rocket_clean_domain' ); // When user change theme. add_action( 'user_register' , 'rocket_clean_domain' ); // When a user is added. add_action( 'profile_update' , 'rocket_clean_domain' ); // When a user is updated. add_action( 'deleted_user' , 'rocket_clean_domain' ); // When a user is deleted. add_action( 'wp_update_nav_menu' , 'rocket_clean_domain' ); // When a custom menu is update. add_action( 'update_option_sidebars_widgets' , 'rocket_clean_domain' ); // When you change the order of widgets. add_action( 'update_option_category_base' , 'rocket_clean_domain' ); // When category permalink prefix is update. add_action( 'update_option_tag_base' , 'rocket_clean_domain' ); // When tag permalink prefix is update. add_action( 'permalink_structure_changed' , 'rocket_clean_domain' ); // When permalink structure is update. add_action( 'create_term' , 'rocket_clean_domain' ); // When a term is created. add_action( 'edited_terms' , 'rocket_clean_domain' ); // When a term is updated. add_action( 'delete_term' , 'rocket_clean_domain' ); // When a term is deleted. add_action( 'add_link' , 'rocket_clean_domain' ); // When a link is added. add_action( 'edit_link' , 'rocket_clean_domain' ); // When a link is updated. add_action( 'delete_link' , 'rocket_clean_domain' ); // When a link is deleted. add_action( 'customize_save' , 'rocket_clean_domain' ); // When customizer is saved. add_action( 'update_option_theme_mods_' . get_option( 'stylesheet' ), 'rocket_clean_domain' ); // When location of a menu is updated./** * Purge cache When a widget is updated * * @since 1.1.1 * * @param object $instance Widget instance. * @return object Widget instance */ function rocket_widget_update_callback( $instance ) { rocket_clean_domain(); return $instance; } add_filter( 'widget_update_callback', 'rocket_widget_update_callback' );/** * Update cache when a post is updated or commented * * @since 2.8 Only add post type archive if post type is not post * @since 2.6 Purge the page defined in "Posts page" option * @since 2.5.5 Don't cache for auto-draft post status * @since 1.3.2 Add wp_update_comment_count to purge cache when a comment is added/updated/deleted * @since 1.3.0 Compatibility with WPML * @since 1.3.0 Add 2 hooks : before_rocket_clean_post, after_rocket_clean_post * @since 1.3.0 Purge all parents of the post and the author page * @since 1.2.2 Add wp_trash_post and delete_post to purge cache when a post is trashed or deleted * @since 1.1.3 Use clean_post_cache instead of transition_post_status, transition_comment_status and preprocess_comment * @since 1.0 * * @param int $post_id The post ID. */ function rocket_clean_post( $post_id ) { if ( defined( 'DOING_AUTOSAVE' ) ) { return; }$purge_urls = array();// Get all post infos. $post = get_post( $post_id );// Return if $post is not an object. if ( ! is_object( $post ) ) { return; }// No purge for specific conditions. if ( 'auto-draft' === $post->post_status || empty( $post->post_type ) || 'nav_menu_item' === $post->post_type ) { return; }// Don't purge if post's post type is not public or not publicly queryable. $post_type = get_post_type_object( $post->post_type ); if ( ! is_object( $post_type ) || true !== $post_type->public ) { return; }// Get the post language. $lang = false;// WPML. if ( rocket_is_plugin_active( 'sitepress-multilingual-cms/sitepress.php' ) && ! rocket_is_plugin_active( 'woocommerce-multilingual/wpml-woocommerce.php' ) ) { $lang = $GLOBALS['sitepress']->get_language_for_element( $post_id, 'post_' . get_post_type( $post_id ) );// Polylang. } elseif ( rocket_is_plugin_active( 'polylang/polylang.php' ) || rocket_is_plugin_active( 'polylang-pro/polylang.php' ) ) { $lang = pll_get_post_language( $post_id ); }// Get the permalink structure. $permalink_structure = get_rocket_sample_permalink( $post_id );// Get permalink. $permalink = str_replace( array( '%postname%', '%pagename%' ), $permalink_structure[1], $permalink_structure[0] );// Add permalink. if ( rocket_extract_url_component( $permalink, PHP_URL_PATH ) !== '/' ) { array_push( $purge_urls, $permalink ); }// Add Posts page. if ( 'post' === $post->post_type && (int) get_option( 'page_for_posts' ) > 0 ) { array_push( $purge_urls, get_permalink( get_option( 'page_for_posts' ) ) ); }// Add Post Type archive. if ( 'post' !== $post->post_type ) { $post_type_archive = get_post_type_archive_link( get_post_type( $post_id ) ); if ( $post_type_archive ) { $post_type_archive = trailingslashit( $post_type_archive ); array_push( $purge_urls, $post_type_archive . 'index.html' ); array_push( $purge_urls, $post_type_archive . 'index.html_gzip' ); array_push( $purge_urls, $post_type_archive . $GLOBALS['wp_rewrite']->pagination_base ); } }// Add next post. $next_post = get_adjacent_post( false, '', false ); if ( $next_post ) { array_push( $purge_urls, get_permalink( $next_post ) ); }// Add next post in same category. $next_in_same_cat_post = get_adjacent_post( true, '', false ); if ( $next_in_same_cat_post && $next_in_same_cat_post !== $next_post ) { array_push( $purge_urls, get_permalink( $next_in_same_cat_post ) ); }// Add previous post. $previous_post = get_adjacent_post( false, '', true ); if ( $previous_post ) { array_push( $purge_urls, get_permalink( $previous_post ) ); }// Add previous post in same category. $previous_in_same_cat_post = get_adjacent_post( true, '', true ); if ( $previous_in_same_cat_post && $previous_in_same_cat_post !== $previous_post ) { array_push( $purge_urls, get_permalink( $previous_in_same_cat_post ) ); }// Add urls page to purge every time a post is save. $cache_purge_pages = get_rocket_option( 'cache_purge_pages' ); if ( $cache_purge_pages ) { global $blog_id;$home_url = get_option( 'home' );if ( ! empty( $blog_id ) && is_multisite() ) { switch_to_blog( $blog_id ); $home_url = get_option( 'home' ); restore_current_blog(); }foreach ( $cache_purge_pages as $page ) { $page = trailingslashit( $home_url ) . $page; array_push( $purge_urls, $page ); } }// Add all terms archive page to purge. $purge_terms = get_rocket_post_terms_urls( $post_id ); if ( count( $purge_terms ) ) { $purge_urls = array_merge( $purge_urls, $purge_terms ); }// Add all dates archive page to purge. $purge_dates = get_rocket_post_dates_urls( $post_id ); if ( count( $purge_dates ) ) { $purge_urls = array_merge( $purge_urls, $purge_dates ); }// Add the author page. $purge_author = array( get_author_posts_url( $post->post_author ) ); $purge_urls = array_merge( $purge_urls, $purge_author );// Add all parents. $parents = get_post_ancestors( $post_id ); if ( (bool) $parents ) { foreach ( $parents as $parent_id ) { array_push( $purge_urls, get_permalink( $parent_id ) ); } }/** * Fires before cache files related with the post are deleted * * @since 1.3.0 * * @param obj $post The post object * @param array $purge_urls URLs cache files to remove * @param string $lang The post language */ do_action( 'before_rocket_clean_post', $post, $purge_urls, $lang );/** * Filter URLs cache files to remove * * @since 1.0 * * @param array $purge_urls List of URLs cache files to remove */ $purge_urls = apply_filters( 'rocket_post_purge_urls', $purge_urls, $post );// Purge all files. rocket_clean_files( $purge_urls );// Never forget to purge homepage and their pagination. rocket_clean_home( $lang );// Purge home feeds (blog & comments). rocket_clean_home_feeds();/** * Fires after cache files related with the post are deleted * * @since 1.3.0 * * @param obj $post The post object * @param array $purge_urls URLs cache files to remove * @param string $lang The post language */ do_action( 'after_rocket_clean_post', $post, $purge_urls, $lang ); } add_action( 'wp_trash_post' , 'rocket_clean_post' ); add_action( 'delete_post' , 'rocket_clean_post' ); add_action( 'clean_post_cache' , 'rocket_clean_post' ); add_action( 'wp_update_comment_count' , 'rocket_clean_post' );/** * Add pattern to clean files of connected users * * @since 2.0 * * @param array $urls An array of URLs to clean. * @return array An array of pattern to use for clearing the cache */ function rocket_clean_files_users( $urls ) { $pattern_urls = array(); foreach ( $urls as $url ) { $parse_url = get_rocket_parse_url( $url ); $pattern_urls[] = $parse_url['scheme'] . '://' . $parse_url['host'] . '*' . $parse_url['path']; } return $pattern_urls; } add_filter( 'rocket_clean_files', 'rocket_clean_files_users' );/** * Return all translated version of a post when qTranslate is used. * Use the "rocket_post_purge_urls" filter to insert URLs of traduction post * * @since 1.3.5 * * @param array $urls An array of URLs to clean. * @return array Updated array of URLs to clean */ function rocket_post_purge_urls_for_qtranslate( $urls ) { if ( rocket_is_plugin_active( 'qtranslate/qtranslate.php' ) || rocket_is_plugin_active( 'qtranslate-x/qtranslate.php' ) ) {global $q_config;// Get all languages. $enabled_languages = $q_config['enabled_languages'];// Remove default language. $enabled_languages = array_diff( $enabled_languages, array( $q_config['default_language'] ) );// Add translate URLs. foreach ( $urls as $url ) { foreach ( $enabled_languages as $lang ) { if ( rocket_is_plugin_active( 'qtranslate/qtranslate.php' ) ) { $urls[] = qtrans_convertURL( $url, $lang, true ); } elseif ( rocket_is_plugin_active( 'qtranslate-x/qtranslate.php' ) ) { $urls[] = qtranxf_convertURL( $url, $lang, true ); } } } }return $urls; } add_filter( 'rocket_post_purge_urls', 'rocket_post_purge_urls_for_qtranslate' );/** * Actions to be done after the purge cache files of a post * By Default, this hook call the WP Rocket Bot (cache json) * * @since 1.3.0 * * @param object $post The post object. * @param array $purge_urls An array of URLs to clean. * @param string $lang The language to clean. */ function run_rocket_bot_after_clean_post( $post, $purge_urls, $lang ) { // Run robot only if post is published. if ( 'publish' !== $post->post_status ) { return false; }// Add Homepage URL to $purge_urls for bot crawl. array_push( $purge_urls, get_rocket_i18n_home_url( $lang ) );// Add default WordPress feeds (posts & comments). array_push( $purge_urls, get_feed_link() ); array_push( $purge_urls, get_feed_link( 'comments_' ) );// Get the author page. $purge_author = array( get_author_posts_url( $post->post_author ) );// Get all dates archive page. $purge_dates = get_rocket_post_dates_urls( $post->ID );// Remove dates archives page and author page to preload cache. $purge_urls = array_diff( $purge_urls, $purge_dates, $purge_author );// Create json file and run WP Rocket Bot. $json_encode_urls = '["' . implode( '","', array_filter( $purge_urls ) ) . '"]'; if ( rocket_put_content( WP_ROCKET_PATH . 'cache.json', $json_encode_urls ) ) { global $do_rocket_bot_cache_json; $do_rocket_bot_cache_json = true; } } add_action( 'after_rocket_clean_post', 'run_rocket_bot_after_clean_post', 10, 3 );/** * Actions to be done after the purge cache files of a term * By Default, this hook call the WP Rocket Bot (cache json) * * @since 2.6.8 * * @param object $post The post object. * @param array $purge_urls An array of URLs to clean. * @param string $lang The language to clean. */ function run_rocket_bot_after_clean_term( $post, $purge_urls, $lang ) { // Add Homepage URL to $purge_urls for bot crawl. array_push( $purge_urls, get_rocket_i18n_home_url( $lang ) );// Create json file and run WP Rocket Bot. $json_encode_urls = '["' . implode( '","', array_filter( $purge_urls ) ) . '"]'; if ( rocket_put_content( WP_ROCKET_PATH . 'cache.json', $json_encode_urls ) ) { global $do_rocket_bot_cache_json; $do_rocket_bot_cache_json = true; } } add_action( 'after_rocket_clean_term', 'run_rocket_bot_after_clean_term', 10, 3 );/** * Run WP Rocket Bot when a post is added, updated or deleted * * @since 1.3.2 */ function do_rocket_bot_cache_json() { global $do_rocket_bot_cache_json; if ( $do_rocket_bot_cache_json ) { run_rocket_preload_cache( 'cache-json', false ); } } add_action( 'shutdown', 'do_rocket_bot_cache_json' );/** * Purge Cache file System in Admin Bar * * @since 1.3.0 Compatibility with WPML * @since 1.0 */ function do_admin_post_rocket_purge_cache() { if ( isset( $_GET['type'], $_GET['_wpnonce'] ) ) {$_type = explode( '-', $_GET['type'] ); $_type = reset( $_type ); $_id = explode( '-', $_GET['type'] ); $_id = end( $_id ); $_taxonomy = isset( $_GET['taxonomy'] ) ? $_GET['taxonomy'] : false;if ( ! wp_verify_nonce( $_GET['_wpnonce'], 'purge_cache_' . $_GET['type'] ) ) { wp_nonce_ays( '' ); }switch ( $_type ) {// Clear all cache domain. case 'all': set_transient( 'rocket_clear_cache', 'all', HOUR_IN_SECONDS ); // Remove all cache files. $lang = isset( $_GET['lang'] ) && 'all' !== $_GET['lang'] ? sanitize_key( $_GET['lang'] ) : ''; // Remove all cache files. rocket_clean_domain( $lang );// Remove all minify cache files. rocket_clean_minify();// Remove cache busting files. rocket_clean_cache_busting();// Generate a new random key for minify cache file. $options = get_option( WP_ROCKET_SLUG ); $options['minify_css_key'] = create_rocket_uniqid(); $options['minify_js_key'] = create_rocket_uniqid(); remove_all_filters( 'update_option_' . WP_ROCKET_SLUG ); update_option( WP_ROCKET_SLUG, $options );rocket_dismiss_box( 'rocket_warning_plugin_modification' );break;// Clear terms, homepage and other files associated at current post in back-end. case 'post': rocket_clean_post( $_id ); set_transient( 'rocket_clear_cache', 'post', HOUR_IN_SECONDS ); break;// Clear a specific term. case 'term': rocket_clean_term( $_id, $_taxonomy ); set_transient( 'rocket_clear_cache', 'term', HOUR_IN_SECONDS ); break;// Clear a specific user. case 'user': rocket_clean_user( $_id ); set_transient( 'rocket_clear_cache', 'user', HOUR_IN_SECONDS ); break;// Clear cache file of the current page in front-end. case 'url': $referer = wp_get_referer();if ( 0 !== strpos( $referer, 'http' ) ) { $parse_url = get_rocket_parse_url( untrailingslashit( home_url() ) ); $referer = $parse_url['scheme'] . '://' . $parse_url['host'] . $referer; }if ( home_url( '/' ) === $referer ) { rocket_clean_home(); } else { rocket_clean_files( $referer ); } break;default: wp_nonce_ays( '' ); break; }wp_redirect( wp_get_referer() ); die(); } } add_action( 'admin_post_purge_cache', 'do_admin_post_rocket_purge_cache' );/** * Purge OPCache content in Admin Bar * * @since 2.7 */ function do_admin_post_rocket_purge_opcache() { if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'rocket_purge_opcache' ) ) { wp_nonce_ays( '' ); }if ( function_exists( 'opcache_reset' ) ) { @opcache_reset(); }wp_redirect( wp_get_referer() ); die(); } add_action( 'admin_post_rocket_purge_opcache', 'do_admin_post_rocket_purge_opcache' );/** * Preload cache system in Admin Bar * It launch the WP Rocket Bot * * @since 1.3.0 Compatibility with WPML * @since 1.0 (delete in 1.1.6 and re-add in 1.1.9) */ function do_admin_post_rocket_preload_cache() { if ( isset( $_GET['_wpnonce'] ) ) {if ( ! wp_verify_nonce( $_GET['_wpnonce'], 'preload' ) ) { wp_nonce_ays( '' ); }$lang = isset( $_GET['lang'] ) && 'all' !== $_GET['lang'] ? sanitize_key( $_GET['lang'] ) : ''; run_rocket_preload_cache( 'cache-preload' );wp_redirect( wp_get_referer() ); die(); } } add_action( 'admin_post_preload', 'do_admin_post_rocket_preload_cache' ); add_action( 'admin_post_nopriv_preload', 'do_admin_post_rocket_preload_cache' );/** * Purge CloudFlare cache * * @since 2.5 */ function do_admin_post_rocket_purge_cloudflare() { if ( ! isset( $_GET['_wpnonce'] ) || ! wp_verify_nonce( $_GET['_wpnonce'], 'rocket_purge_cloudflare' ) ) { wp_nonce_ays( '' ); }// Purge CloudFlare. $cf_purge = rocket_purge_cloudflare();if ( is_wp_error( $cf_purge ) ) { $cf_purge_result = array( 'result' => 'error', // translators: %s = CloudFare API return message. 'message' => sprintf( __( 'Cloudflare cache purge error: %s', 'rocket' ), $cf_purge->get_error_message() ), ); } else { $cf_purge_result = array( 'result' => 'success', 'message' => __( 'Cloudflare cache successfully purged', 'rocket' ), ); }set_transient( $GLOBALS['current_user']->ID . '_cloudflare_purge_result', $cf_purge_result );wp_redirect( wp_get_referer() ); die(); } add_action( 'admin_post_rocket_purge_cloudflare', 'do_admin_post_rocket_purge_cloudflare' ); Magician, Charlie Cadabra performs shows for kids and families

Magic Shows for Children and Families

MagicianMagician, Charlie Cadabra provides the best magic show in the area. Charlie can help make your event fun, special and memorable.

Imagine having a stress-free event knowing you hired the best magic show based on Charlie’s experience with entertaining audiences.

For over 30 years, Charlie has performed magic shows throughout the Greater Cincinnati Area. Including Mason, West Chester, Hamilton, Middletown, Loveland, Milford, Harrison, Florence, Northern Kentucky and more.

Magician

Best Children’s Magician Award by Cincinnati Parents Magazine!
Also, Best Party Magician by Cincinnati & NKY Family Magazine Readers!

MagicianThe Best Magician awards Charlie has received are for a unique blend of original magic routines.

Charlie’s routines are age-appropriate, using only clean humor, that engages the audience.

The magic show has tons of audience participation, goofy dress-ups, and silly fun. And, Charlie does NOT embarrass or make fun of his audience helpers.

Finally, the shows use, and the magical production of a live rabbit, Harvey, at the end.

So, you are guaranteed a tried-and-tested magic show that your guests will love. Why? Because, Charlie understands what children think is funny, how to engage them in the show, and keep their attention.

“Reasonably priced, highly interactive, lots going on – no slow parts, new tricks I haven’t seen – none of the old stale tricks that show up in lots of magic shows. You were prompt, organized and professional. Thank you!” – Joan Johnsen

Fun Magic Shows for Children

MagicianMany magicians have trouble entertaining and controlling audiences of mostly children. Why? They treat the children as if they are miniature adults. Too many magicians use material that is not age-appropriate, doesn’t engage the children, or has an “I fooled you” attitude. Hence, these end up not keeping the children’s interest during the magic show.

Charlie understands what kids think is funny. How? Because, he has performed thousands of magic shows for children, families, and his own grandchildren.

So, Charlie has experience knowing what makes children laugh, what keeps them interested and involved throughout the magic show.

“I thought you did a very nice job. As a parent who has hired you twice, the thing that stands out is that you’re very professional and kind. You really seem to enjoy what you do. Your show is constantly moving to keep the children’s interest/attention. I love that you include every guest and include them into your various tricks. Music, sound effects, and microphone are all positive additions. Thank you Very, Very much!” – Jenny Rohlfer

Magician

What’s Included in Charlie’s Fun Magic Shows?Magician

  • Harvey, the Magical Rabbit, appears! And, Harvey stays around after the show for everyone to pet.
  • Also, lots of audience helpers to ensure that everyone is engaged throughout the show.
  • Age-appropriate comedy and magic designed for the audience’s primary age group. Unlike other magicians who only have one show for all ages, the magic shows are different based on the age range of the audience.
  • Incredible magical feats! With magic tricks that has everyone asking: “How did he do that?”
  • A hilarious and magical storytelling routine.
  • Plus, a funny puppet routine for younger audiences. Sherlock Bones perform a magic trick.
  • Children love to dress up. So, the shows include goofy costumes and funny hats worn by the helpers.

“The children were totally immersed for 45 minutes! It was one of the easiest parties I’ve had. All I did was send out the invitations and provide the cake and ice cream. I didn’t have to keep track of kids, tokens and pizza!” – Sabrina Hall

What’s NOT in Charlie’s Magic Shows?

Most importantly, Charlie also knows what to avoid and what NOT to include in Charlie’s shows.

Based on experience, here is a list of items that are signs of an inexperienced magician. And so, they end up performing a show that does NOT entertain and delight the children.Magician

  • No playing card tricks in the children’s magic show
  • No fire or flames, ever!
  • Snakes, rats or scary animals are not used
  • No “scare” techniques or “danger” tricks” are included
  • No sharp objects, like swords or knives
  • Toy weapons are not in the magic shows
  • No chemicals
  • No loud music booming

“Charlie did an AWESOME job with Miranda’s show. Top Notch. She will never forget it, and her friends are still talking about it! Thanks much for creating a very memorable day for my little princess.” – Glenn Algie

Entertainer Comparison Questions

Not all magic shows are the same! And you probably only book a magic show once a year. So, to ensure you get the best possible magician, use this FREE Magician Comparison Worksheet. Most of all, these 12 questions can guide you in selecting a fun magic show that will meet your needs.

Cincinnati’s FUN-tastic Magician

Charlie Cadabra is available to perform at your event throughout the Greater Cincinnati Area – including Mason, West Chester, Hamilton, Middletown, Harrison, Florence, Northern Kentucky and more.

Available Magic Shows:

Birthdays only come once a year and you want your child’s special day to be memorable. So, your child is the star in Charlie Cadabra’s Birthday Magic Show! In addition, the birthday child helps to magically produce Harvey, a live rabbit. And, everyone gets to pet Harvey after the show.

Charlie creates a new fun magic show every year for Early Learning Centers, Daycare Centers, Preschools, and Summer Camps. The Magic Show for Children includes age-appropriate routines, silly fun, and tons of audience participation. And, the magician, Charlie Cadabra has different magic shows based on the age range of the children (pre-school age, school age and both together).

As well as, Charlie’s silly fun, non-scary Halloween Magic Show. The show is perfect for daycares, family events, block parties, and church events. So, only non-scary, silly, versions of Ghosts, Witches, Pumpkins, Frankenstein, Zombies, and Dracula are included in the Halloween magic show.

Finally, a Christmas Magic Show with themes to celebrate the holidays. Themes include Santa, Reindeer, Snowpeople, Candy Canes and more!

Reviews of Cincinnati Magician, Charlie Cadabra

Charlie Cadabra’s Awards for Fun Magic Shows for Best Children’s Entertainer by Cincinnati Parents Magazine for 9 years in a row. And, the Best Party Entertainer award from Cincinnati Family Magazine for the last 10 years. Plus, here is actual client feedback received from Charlie Cadabra’s clients:

“You had complete control over the whole party. The children were mesmerized by your show. It was a very interactive show. You involved many of the children. The only thing I had to provide was the cake! You did a fantastic job.” – Sue Glynn


“It’s not like you need anymore raving comments on your site, but the kids were absolutely thrilled before, during, and especially after the show! Trevor says it was the best party he’s ever had…or been to! Thanks so much!” – Pam Owens


Additional Birthday Magic Show Feedback

“I highly recommend having Charlie Cadabra perform at your next Birthday party or party Celebration. Charlie interacted with the kids, who made them feel part of the show and kept them entertained the entire time. Not only were the kids entertained but so were the adults. Truly a fun Experience! Many parents commented on how much they enjoyed the show. One of my daughter’s friends who attended the birthday party summed it up by saying ‘this was the most awesome birthday party ever!’ Thank you so much for making my daughters 5th birthday so memorable.” – Cindy Maki


“Great with children. Tricks were adorable and funny. I enjoyed it as an adult as much as the children did!” – Meghan Reimels


More Birthday Magic Show Feedback

“The show was so exciting for the kids and even the adults. It was so easy, no stress or clean up, lots of kids got a chance to be up on stage as a helper. And the bunny is to die for, soooo cute.” – Amanda Borger


“The children did not take their eyes off of Charlie. He totally pulled them in and made them feel his magic wasn’t possible without them. The party was crazy until Charlie came. He magically brought order to the chaos!! The show made the parents glad they were invited too! A lot of times birthdays are things we have to do. This one was one we wanted to do. The magic show joined the entire group of parts gets together – not just the children. All the children that attended my daughter’s birthday party have requested that Charlie comes to their parties as well. Best birthday party we have had or attended!” – Shelley Johnson


Additional Reviews

“The whole experience was superb from start to finish. Excellent communication and top-notch professionalism from my initial contact right up to the day of the show. We had children from 2-9 years old, and every one of them was captivated the entire 45-minutes of the show!” – Jess Williams


“They laughed non-stop and couldn’t take their eyes off him. The magic “made” the whole event! Charlie was great, instant rapport with children of all ages and adults. He was on time, professional, yet personal. We will have him back again!” – Terri Randall


“We have had Charlie Cadabra do magic shows at school, for birthday parties and Halloween parties. Every show is unique and entertaining for kids and adults. We love Charlie Cadabra’s show and will hire him many more times as our children continue to grow! The magic word is Charlie Cadabra for sure!” – Taunja Kruckeberg


“As one parent put it ‘I never knew kids could laugh and squeal so loudly!’ ” – Susan Afanuh