Contact Widget, captcha link is broken

When I click the Generate a set of API link in the widget it refers me to a page that does not exist, error 404.

  • Patrick

    Hi there @Ocean Digital Corp

    I hope you're well today!

    Whoops, you're absolutely right. Google recently changed reCaptcha and, consequently, the page where you create your keys. That URL should be updated to point to here:
    https://www.google.com/recaptcha/admin

    Simply go to that URL to set up your reCaptcha keys and enter them in the widget. The Site key should go in the Public key field in the widget, and the Secret key goes in the Private key field.

    I'll notify the developer so he can that URL and those labels fixed up for the next release. Thanks for pointing this out. :slight_smile:

  • Vinod Dalvi

    Hi @Ocean Digital Corp,

    Thank you for your reply.

    The captcha image appears above a blank text field but there is no direction for the user on how to use it

    You can display the text "Please enter the characters displayed in the above image into the following input field." below the captcha image by adding the following adding the following code in the functions.php file of your child theme or add it in your site using any of the following plugins.

    http://wordpress.org/plugins/code-snippets/
    http://wordpress.org/plugins/add-actions-and-filters/

    function add_custom_scripts(){
    	?>
    	<script type="text/javascript">
    		jQuery(window).load(function(){
    			// setTimeout(
    			jQuery('.Contact_form #recaptcha_response_field').before('<br />Please enter the characters displayed in the above image into the following input field.<br />')
    			// , 4000);
    		});
    	</script>
    <?php
    }
    add_action('wp_footer', 'add_custom_scripts');

    there is no refresh button either.

    To display the refresh link you have to disable the widget compact mode by unchecking the Compact mode option of the Contact Form widget.

    Best Regards,
    Vinod Dalvi

  • Mike D

    Ok. I made a copy functions.php and placed it in my child theme folder. Then I copied your code and placed it in that file, at the bottom. Now I get this message:
    Fatal error: Cannot redeclare nuviofuturemag_content_width() (previously declared in /home/user/public_html/wp-content/themes/nuviofuturemag-red-child/functions.php:102) in /home/user/public_html/wp-content/themes/nuviofuturemag-red/functions.php on line 105

    Attached is a copy of the functions.php file

  • Mike D
    <?php
    
    /**
     * Functions and definitions in this theme are from Twenty Fourteen theme (from Wordpress Development Team).
     */  
    
    if ( ! isset( $content_width ) ) {
    	$content_width = 474;
    }
    
    /**
     * Nuvio FutureMag only works in WordPress 3.6 or later.
     */
    if ( version_compare( $GLOBALS['wp_version'], '3.6', '<' ) ) {
    	require get_template_directory() . '/inc/back-compat.php';
    }
    
    if ( ! function_exists( 'nuviofuturemag_setup' ) ) :
    /**
     * Nuvio FutureMag setup.
     *
     * Functions and definitions in this theme are from Twenty Fourteen theme (from Wordpress Development Team).
     *
     * Set up theme defaults and registers support for various WordPress features.
     *
     * Note that this function is hooked into the after_setup_theme hook, which
     * runs before the init hook. The init hook is too late for some features, such
     * as indicating support post thumbnails.
     *
     * @since Nuvio FutureMag 1.0
     */
    function nuviofuturemag_setup() {
    
    	/*
    	 * Make Nuvio FutureMag available for translation.
    	 *
    	 * Translations can be added to the /languages/ directory.
    	 * If you're building a theme based on Nuvio FutureMag, use a find and
    	 * replace to change 'nuviofuturemag' to the name of your theme in all
    	 * template files.
    	 */
    	load_theme_textdomain( 'nuviofuturemag', get_template_directory() . '/languages' );
    
    	// This theme styles the visual editor to resemble the theme style.
    	add_editor_style( array( 'css/editor-style.css', nuviofuturemag_font_url() ) );
    
    	// Add RSS feed links to <head> for posts and comments.
    	add_theme_support( 'automatic-feed-links' );
    
    	// Enable support for Post Thumbnails, and declare two sizes.
    	add_theme_support( 'post-thumbnails' );
    	set_post_thumbnail_size( 672, 372, true );
    	add_image_size( 'nuviofuturemag-full-width', 1038, 576, true );
    
    	// This theme uses wp_nav_menu() in two locations.
    	register_nav_menus( array(
    		'primary'   => __( 'Top primary menu', 'nuviofuturemag' ),
    		'secondary' => __( 'Secondary menu in left sidebar', 'nuviofuturemag' ),
    	) );
    
    	/*
    	 * Switch default core markup for search form, comment form, and comments
    	 * to output valid HTML5.
    	 */
    	add_theme_support( 'html5', array(
    		'search-form', 'comment-form', 'comment-list',
    	) );
    
    	/*
    	 * Enable support for Post Formats.
    	 * See http://codex.wordpress.org/Post_Formats
    	 */
    	add_theme_support( 'post-formats', array(
    		'aside', 'image', 'video', 'audio', 'quote', 'link', 'gallery',
    	) );
    
    	// This theme allows users to set a custom background.
    	add_theme_support( 'custom-background', apply_filters( 'nuviofuturemag_custom_background_args', array(
    		'default-color' => 'f5f5f5',
    	) ) );
    
    	// Add support for featured content.
    	add_theme_support( 'featured-content', array(
    		'featured_content_filter' => 'nuviofuturemag_get_featured_posts',
    		'max_posts' => 6,
    	) );
    
    	// This theme uses its own gallery styles.
    	add_filter( 'use_default_gallery_style', '__return_false' );
    }
    endif; // nuviofuturemag_setup
    add_action( 'after_setup_theme', 'nuviofuturemag_setup' );
    
    /**
     * Adjust content_width value for image attachment template.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return void
     */
    function nuviofuturemag_content_width() {
    	if ( is_attachment() && wp_attachment_is_image() ) {
    		$GLOBALS['content_width'] = 810;
    	}
    }
    add_action( 'template_redirect', 'nuviofuturemag_content_width' );
    
    /**
     * Getter function for Featured Content Plugin.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return array An array of WP_Post objects.
     */
    function nuviofuturemag_get_featured_posts() {
    	/**
    	 * Filter the featured posts to return in Nuvio FutureMag.
    	 *
    	 * @since Nuvio FutureMag 1.0
    	 *
    	 * @param array|bool $posts Array of featured posts, otherwise false.
    	 */
    	return apply_filters( 'nuviofuturemag_get_featured_posts', array() );
    }
    
    /**
     * A helper conditional function that returns a boolean value.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return bool Whether there are featured posts.
     */
    function nuviofuturemag_has_featured_posts() {
    	return ! is_paged() && (bool) nuviofuturemag_get_featured_posts();
    }
    
    /**
     * Register three Nuvio FutureMag widget areas.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return void
     */
    function nuviofuturemag_widgets_init() {
    	require get_template_directory() . '/inc/widgets.php';
    	register_widget( 'nuvio_futuremag_Ephemera_Widget' );
    
    	register_sidebar( array(
    		'name'          => __( 'Primary Sidebar', 'nuviofuturemag' ),
    		'id'            => 'sidebar-1',
    		'description'   => __( 'Main sidebar that appears on the left.', 'nuviofuturemag' ),
    		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    		'after_widget'  => '</aside>',
    		'before_title'  => '<h1 class="widget-title">',
    		'after_title'   => '</h1>',
    	) );
    	register_sidebar( array(
    		'name'          => __( 'Content Sidebar', 'nuviofuturemag' ),
    		'id'            => 'sidebar-2',
    		'description'   => __( 'Additional sidebar that appears on the right.', 'nuviofuturemag' ),
    		'before_widget' => '<aside id="%1$s" class="widget %2$s">',
    		'after_widget'  => '</aside>',
    		'before_title'  => '<h1 class="widget-title">',
    		'after_title'   => '</h1>',
    	) );
    }
    add_action( 'widgets_init', 'nuviofuturemag_widgets_init' );
    
    /**
     * Register Lato Google font for Nuvio FutureMag.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return string
     */
    function nuviofuturemag_font_url() {
    	$font_url = '';
    	/*
    	 * Translators: If there are characters in your language that are not supported
    	 * by Lato, translate this to 'off'. Do not translate into your own language.
    	 */
    	if ( 'off' !== _x( 'on', 'Lato font: on or off', 'nuviofuturemag' ) ) {
    		$font_url = add_query_arg( 'family', urlencode( 'Lato:300,400,700,900,300italic,400italic,700italic' ), "//fonts.googleapis.com/css" );
    	}
    
    	return $font_url;
    }
    
    /**
     * Enqueue scripts and styles for the front end.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return void
     */
    function nuviofuturemag_scripts() {
    	// Add Lato font, used in the main stylesheet.
    	wp_enqueue_style( 'nuviofuturemag-lato', nuviofuturemag_font_url(), array(), null );
    
    	// Add Genericons font, used in the main stylesheet.
    	wp_enqueue_style( 'genericons', get_template_directory_uri() . '/genericons/genericons.css', array(), '3.0.2' );
    
    	// Load our main stylesheet.
    	wp_enqueue_style( 'nuviofuturemag-style', get_stylesheet_uri(), array( 'genericons' ) );
    
    	// Load the Internet Explorer specific stylesheet.
    	wp_enqueue_style( 'nuviofuturemag-ie', get_template_directory_uri() . '/css/ie.css', array( 'nuviofuturemag-style', 'genericons' ), '20131205' );
    	wp_style_add_data( 'nuviofuturemag-ie', 'conditional', 'lt IE 9' );
    
    	if ( is_singular() && comments_open() && get_option( 'thread_comments' ) ) {
    		wp_enqueue_script( 'comment-reply' );
    	}
    
    	if ( is_singular() && wp_attachment_is_image() ) {
    		wp_enqueue_script( 'nuviofuturemag-keyboard-image-navigation', get_template_directory_uri() . '/js/keyboard-image-navigation.js', array( 'jquery' ), '20130402' );
    	}
    
    	if ( is_active_sidebar( 'sidebar-3' ) ) {
    		wp_enqueue_script( 'jquery-masonry' );
    	}
    
    	if ( is_front_page() && 'slider' == get_theme_mod( 'featured_content_layout' ) ) {
    		wp_enqueue_script( 'nuviofuturemag-slider', get_template_directory_uri() . '/js/slider.js', array( 'jquery' ), '20131205', true );
    		wp_localize_script( 'nuviofuturemag-slider', 'featuredSliderDefaults', array(
    			'prevText' => __( 'Previous', 'nuviofuturemag' ),
    			'nextText' => __( 'Next', 'nuviofuturemag' )
    		) );
    	}
    
    	wp_enqueue_script( 'nuviofuturemag-script', get_template_directory_uri() . '/js/functions.js', array( 'jquery' ), '20131209', true );
    }
    add_action( 'wp_enqueue_scripts', 'nuviofuturemag_scripts' );
    
    /**
     * Enqueue Google fonts style to admin screen for custom header display.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return void
     */
    function nuviofuturemag_admin_fonts() {
    	wp_enqueue_style( 'nuviofuturemag-lato', nuviofuturemag_font_url(), array(), null );
    }
    add_action( 'admin_print_scripts-appearance_page_custom-header', 'nuviofuturemag_admin_fonts' );
    
    if ( ! function_exists( 'nuviofuturemag_the_attached_image' ) ) :
    /**
     * Print the attached image with a link to the next attached image.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return void
     */
    function nuviofuturemag_the_attached_image() {
    	$post                = get_post();
    	/**
    	 * Filter the default Nuvio FutureMag attachment size.
    	 *
    	 * @since Nuvio FutureMag 1.0
    	 *
    	 * @param array $dimensions {
    	 *     An array of height and width dimensions.
    	 *
    	 *     @type int $height Height of the image in pixels. Default 810.
    	 *     @type int $width  Width of the image in pixels. Default 810.
    	 * }
    	 */
    	$attachment_size     = apply_filters( 'nuviofuturemag_attachment_size', array( 810, 810 ) );
    	$next_attachment_url = wp_get_attachment_url();
    
    	/*
    	 * Grab the IDs of all the image attachments in a gallery so we can get the URL
    	 * of the next adjacent image in a gallery, or the first image (if we're
    	 * looking at the last image in a gallery), or, in a gallery of one, just the
    	 * link to that image file.
    	 */
    	$attachment_ids = get_posts( array(
    		'post_parent'    => $post->post_parent,
    		'fields'         => 'ids',
    		'numberposts'    => -1,
    		'post_status'    => 'inherit',
    		'post_type'      => 'attachment',
    		'post_mime_type' => 'image',
    		'order'          => 'ASC',
    		'orderby'        => 'menu_order ID',
    	) );
    
    	// If there is more than 1 attachment in a gallery...
    	if ( count( $attachment_ids ) > 1 ) {
    		foreach ( $attachment_ids as $attachment_id ) {
    			if ( $attachment_id == $post->ID ) {
    				$next_id = current( $attachment_ids );
    				break;
    			}
    		}
    
    		// get the URL of the next image attachment...
    		if ( $next_id ) {
    			$next_attachment_url = get_attachment_link( $next_id );
    		}
    
    		// or get the URL of the first image attachment.
    		else {
    			$next_attachment_url = get_attachment_link( array_shift( $attachment_ids ) );
    		}
    	}
    
    	printf( '<a href="%1$s" rel="attachment">%2$s</a>',
    		esc_url( $next_attachment_url ),
    		wp_get_attachment_image( $post->ID, $attachment_size )
    	);
    }
    endif;
    
    if ( ! function_exists( 'nuviofuturemag_list_authors' ) ) :
    /**
     * Print a list of all site contributors who published at least one post.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @return void
     */
    function nuviofuturemag_list_authors() {
    	$contributor_ids = get_users( array(
    		'fields'  => 'ID',
    		'orderby' => 'post_count',
    		'order'   => 'DESC',
    		'who'     => 'authors',
    	) );
    
    	foreach ( $contributor_ids as $contributor_id ) :
    		$post_count = count_user_posts( $contributor_id );
    
    		// Move on if user has not published a post (yet).
    		if ( ! $post_count ) {
    			continue;
    		}
    	?>
    
    	<div class="contributor">
    		<div class="contributor-info">
    			<div class="contributor-avatar"><?php echo get_avatar( $contributor_id, 132 ); ?></div>
    			<div class="contributor-summary">
    				<h2 class="contributor-name"><?php echo get_the_author_meta( 'display_name', $contributor_id ); ?></h2>
    				<p class="contributor-bio">
    					<?php echo get_the_author_meta( 'description', $contributor_id ); ?>
    				</p>
    				<a class="contributor-posts-link" href="<?php echo esc_url( get_author_posts_url( $contributor_id ) ); ?>">
    					<?php printf( _n( '%d Article', '%d Articles', $post_count, 'nuviofuturemag' ), $post_count ); ?>
    				</a>
    			</div><!-- .contributor-summary -->
    		</div><!-- .contributor-info -->
    	</div><!-- .contributor -->
    
    	<?php
    	endforeach;
    }
    endif;
    
    /**
     * Extend the default WordPress body classes.
     *
     * Adds body classes to denote:
     * 1. Single or multiple authors.
     * 2. Presence of header image.
     * 3. Index views.
     * 4. Full-width content layout.
     * 5. Presence of footer widgets.
     * 6. Single views.
     * 7. Featured content layout.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @param array $classes A list of existing body class values.
     * @return array The filtered body class list.
     */
    function nuviofuturemag_body_classes( $classes ) {
    	if ( is_multi_author() ) {
    		$classes[] = 'group-blog';
    	}
    
    	if ( get_header_image() ) {
    		$classes[] = 'header-image';
    	} else {
    		$classes[] = 'masthead-fixed';
    	}
    
    	if ( is_archive() || is_search() || is_home() ) {
    		$classes[] = 'list-view';
    	}
    
    	if ( ( ! is_active_sidebar( 'sidebar-2' ) )
    		|| is_page_template( 'page-templates/full-width.php' )
    		|| is_page_template( 'page-templates/contributors.php' )
    		|| is_attachment() ) {
    		$classes[] = 'full-width';
    	}
    
    	if ( is_active_sidebar( 'sidebar-3' ) ) {
    		$classes[] = 'footer-widgets';
    	}
    
    	if ( is_singular() && ! is_front_page() ) {
    		$classes[] = 'singular';
    	}
    
    	if ( is_front_page() && 'slider' == get_theme_mod( 'featured_content_layout' ) ) {
    		$classes[] = 'slider';
    	} elseif ( is_front_page() ) {
    		$classes[] = 'grid';
    	}
    
    	return $classes;
    }
    add_filter( 'body_class', 'nuviofuturemag_body_classes' );
    
    /**
     * Extend the default WordPress post classes.
     *
     * Adds a post class to denote:
     * Non-password protected page with a post thumbnail.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @param array $classes A list of existing post class values.
     * @return array The filtered post class list.
     */
    function nuviofuturemag_post_classes( $classes ) {
    	if ( ! post_password_required() && has_post_thumbnail() ) {
    		$classes[] = 'has-post-thumbnail';
    	}
    
    	return $classes;
    }
    add_filter( 'post_class', 'nuviofuturemag_post_classes' );
    
    /**
     * Create a nicely formatted and more specific title element text for output
     * in head of document, based on current view.
     *
     * @since Nuvio FutureMag 1.0
     *
     * @param string $title Default title text for current view.
     * @param string $sep Optional separator.
     * @return string The filtered title.
     */
    function nuviofuturemag_wp_title( $title, $sep ) {
    	global $paged, $page;
    
    	if ( is_feed() ) {
    		return $title;
    	}
    
    	// Add the site name.
    	$title .= get_bloginfo( 'name' );
    
    	// Add the site description for the home/front page.
    	$site_description = get_bloginfo( 'description', 'display' );
    	if ( $site_description && ( is_home() || is_front_page() ) ) {
    		$title = "$title $sep $site_description";
    	}
    
    	// Add a page number if necessary.
    	if ( $paged >= 2 || $page >= 2 ) {
    		$title = "$title $sep " . sprintf( __( 'Page %s', 'nuviofuturemag' ), max( $paged, $page ) );
    	}
    
    	return $title;
    }
    add_filter( 'wp_title', 'nuviofuturemag_wp_title', 10, 2 );
    
    // Implement Custom Header features.
    require get_template_directory() . '/inc/custom-header.php';
    
    // Custom template tags for this theme.
    require get_template_directory() . '/inc/template-tags.php';
    
    // Add Theme Customizer functionality.
    require get_template_directory() . '/inc/customizer.php';
    
    /*
     * Add Featured Content functionality.
     *
     * To overwrite in a plugin, define your own Featured_Content class on or
     * before the 'setup_theme' hook.
     */
    if ( ! class_exists( 'Featured_Content' ) && 'plugins.php' !== $GLOBALS['pagenow'] ) {
    	require get_template_directory() . '/inc/featured-content.php';
    } 
    
    // Adds text under Contacts Form captcha.
    function add_custom_scripts(){
    	?>
    	<script type="text/javascript">
    		jQuery(window).load(function(){
    			// setTimeout(
    			jQuery('.Contact_form #recaptcha_response_field').before('<br />Please enter the characters displayed in the above image into the following input field.<br />')
    			// , 4000);
    		});
    	</script>
    <?php
    }
    add_action('wp_footer', 'add_custom_scripts');
  • Michael Bissett

    Hey @Ocean Digital Corp, my apologies for the delay here!

    You're running into this error:

    Fatal error: Cannot redeclare nuviofuturemag_content_width() (previously declared in /home/user/public_html/wp-content/themes/nuviofuturemag-red-child/functions.php:102) in /home/user/public_html/wp-content/themes/nuviofuturemag-red/functions.php on line 105

    Because the functions.php was copied from the parent theme, that's not how WordPress wants people to handle this. You would instead create a blank functions.php, and then insert my colleague @Vinod Dalvi's code into that, as the child theme will first load the functions.php file from the parent theme, and then the functions.php inside the child theme.

    Once you've made that adjustment, things should work here. :slight_smile:

    Hope this helps!

    Kind Regards,
    Michael

  • Mike D

    I copy and pasted this given code:

    function add_custom_scripts(){
    	?>
    	<script type="text/javascript">
    		jQuery(window).load(function(){
    			// setTimeout(
    			jQuery('.Contact_form #recaptcha_response_field').before('<br />Please enter the characters displayed in the above image into the following input field.<br />')
    			// , 4000);
    		});
    	</script>
    <?php
    }
    add_action('wp_footer', 'add_custom_scripts');

    into a new file in the child theme folder called functions.php and then I got this error:

    Parse error: syntax error, unexpected '}' in /home/user/public_html/wp-content/themes/nuviofuturemag-red-child/functions.php on line 11

    What now?

  • Michelle Shull

    Hey Ocean Digital!

    Since this in a new php file, we need to open PHP in the very first line. Try using this:

    <?php
    function add_custom_scripts(){
    	?>
    	<script type="text/javascript">
    		jQuery(window).load(function(){
    			// setTimeout(
    			jQuery('.Contact_form #recaptcha_response_field').before('<br />Please enter the characters displayed in the above image into the following input field.<br />')
    			// , 4000);
    		});
    	</script>
    <?php
    }
    add_action('wp_footer', 'add_custom_scripts');
    ?>

    This should fix the error you're seeing.

  • Vinod Dalvi

    Hi Mike,

    In the recent version of Contact Form widget the captcha instructions are provided by the widget as displayed in the attached screenshots therefore now you don't need to use the custom code provided by me.

    Just remove the custom code and use the Contact Form widget input label option as shown in the attached screenshots.

    I have tested it on my test site using default WordPress Twenty Twelve theme and it worked fine for me.

    If somehow it doesn't work for you then please share the page URL where you are displaying this widget so that we can troubleshoot it.

    Regards,
    Vinod Dalvi

  • Vinod Dalvi

    Hi Mike,

    To also display the captcha instructions in the contact form compact mode try using the following CSS code by adding it in the style.css file of your child theme or add it in your site using the following plugin.

    https://wordpress.org/plugins/simple-custom-css/

    .widget .cw-compact_form.cw-has_captcha #cw-recaptcha_widget > label{
        display: block !important;
    }

    Please note i have used !important in the above CSS code to overwrite all other CSS property values, it's not recommended to always use the !important as it overwrites other property values but we have used it here because in this case we have to overwrite other property values.

    I think in the compact mode the captcha instructions should be displayed in the captcha textbox therefore i have moved this over to the features & feedback section. This way it can be considered for future development, and we can also see what other community members think about the feature request.

    Regards,
    Vinod Dalvi