Support » Plugin: GDPR Cookie Compliance (CCPA, PIPEDA ready) » Disabling GTranslate plugin if cookies are rejected

  • Resolved jmernin

    (@jmernin)


    I use the GTranslate plugin [1] to allow users to view my website in different languages and this uses a cookie to store which language is the (current) preferred one.

    I’d therefore like to *not* offer the translation options if the user decides to reject the Additional Cookies, perhaps even hiding the language selection drop-down menu (and not creating the “googtrans” cookie).

    However, I’m not sure how to do this, because:

    1) The scripts section in the GDPR Cookie plugin only trigger when a cookie is ACCEPTED.
    2) Not familiar with the innards of the GTranslate function (i.e. to write a hook).

    [1] https://wordpress.org/support/plugin/gtranslate/

Viewing 10 replies - 1 through 10 (of 10 total)
  • Plugin Author Moove Agency

    (@mooveagency)

    Hi @jmernin,

    Thanks for using our plugins.

    You can try the following code snippet (should be added to your functions.php)

    /**
     * GDPR Cookie Compliance - GTranslate shortcode filter
     */
    function gdpr_gtranslate_shortcode_filter( $output, $tag ) {
    	if ( 'gtranslate' === $tag ) :
    		if ( function_exists( 'gdpr_cookie_is_accepted' ) ) {
    		  /* supported types: 'strict', 'thirdparty', 'advanced' */
    		  if ( gdpr_cookie_is_accepted( 'advanced' ) ) {
    		    return $output;
    		  } else {
    		    return '';
    		  }
    		}
    	endif;
    	return $output;
    }
    add_filter('do_shortcode_tag', 'gdpr_gtranslate_shortcode_filter', 10, 2);
    
    // Reloading the page if visitors accept the cookies
    add_action( 'gdpr_force_reload', '__return_true' );

    Hope this helps.

    Thanks for the prompt reply. In terms of what configuration I then use inside the plugins themselves (having added that directly into function.php), should I:

    1) Should I deselect the option to display the “Show floating language selector” in the GTranslate plugin settings
    2) What script should I specify in the GDPR cookie settings (that would get inserted into the header(s) when the cookie is then enabled?

    Thanks again,

    Plugin Author Moove Agency

    (@mooveagency)

    Hi @jmernin,

    1. Yes, you can disable the floating language selector, or you can hide using CSS (please speak to your developers to help with this option)

    2. You can add an empty <script></script> tag otherwise you can’t save the settings.

    Hope this helps.

    Thanks again for your help. I’ve disabled the floating language menu (in GTranslate settings), added the above code snippet to the main functions.php file (inside wp-includes) and entered an empty <script></script> into the Head section of the Advanced Cookies settings area. I then cleared all cookies for my site and refreshed.

    IF I then accept all cookies, what behaviour should I be seeing? I think it should be:

    1) The page auto-refreshes
    2) The floating language menu appears
    3) I’m guessing I should have a cookie called gdpr_cookie_enabled=true as well?

    Alas, I’m actually not seeing any of this behaviour, so wanted to check if I’m describing what I should be seeing correctly?

    In addition, if it helps, the only cookie I see (for my site) after I accept/save all is moove_gdpr_popup, with a sort of HEX-encoded value (e.g. %7B%22strict%22%3A%221%22%2C%22thirdparty%22%3A%221%22%2C%22advanced%22%3A%221%22%7D)

    And, my apologies, it does look like the page is reloading when I save my cookies settings. Thus, the only issue is that the floating language selection menu is not appearing.

    Plugin Author Moove Agency

    (@mooveagency)

    Hi @jmernin,

    Could you please provide your site URL to check the implementation on your site?

    The floating language selector will not be visible, the filter shared above is compatible with Google Translate shortcode only.
    The language selector could be hidden using CSS, please speak to your developers to help you with this.

    Hope this helps.

    I wonder if I’m over-thinking this a little. Let me re-clarify what I believe the user experience should be like here:

    1. Visitor arrives at site for first time and is presented with the cookie options;
    2a. Visitor accepts all cookies => language selector should remain visible;
    2b. Visitor rejects Additional Cookies => language translator should disappear

    This seems like the correct behaviour to me. If you agree, does that change your view on the comment about the visibility of the language selector above?

    The site URL (where I’m trialling this) is http://www.mernin.com/gpb, if that helps.

    Plugin Author Moove Agency

    (@mooveagency)

    Hi @jmernin,

    Thanks for the details.

    You can try the following code snippet (remove the old code snippet provided before, and replace with this, should be added to functions.php):

    /**
     * GDPR Cookie Compliance - GTranslate shortcode filter
     */
    function gdpr_gtranslate_shortcode_filter( $output, $tag ) {
    	if ( 'gtranslate' === $tag ) :
    		if ( function_exists( 'gdpr_cookie_is_accepted' ) ) {
    		  /* supported types: 'strict', 'thirdparty', 'advanced' */
    		  if ( gdpr_cookie_is_accepted( 'advanced' ) ) {
    		    return $output;
    		  } else {
    				?>
    					<style>#gtranslate_wrapper{display: none;}</style>
    				<?php
    		    return '';
    		  }
    		}
    	endif;
    	return $output;
    }
    add_filter('do_shortcode_tag', 'gdpr_gtranslate_shortcode_filter', 10, 2);
    
    // Reloading the page if visitors accept the cookies
    add_action( 'gdpr_force_reload', '__return_true' );

    Hope this helps.

    I sought the help of a PHP developer today and we tried to implement this. To satisfy ourselves that the gdpr_gtranslate_shortcode_filter was getting called, we inserted some “echo” statements inside the function, and added this just above the add_filter call:

    ini_set('display_errors', 1);

    However, the echo statements never appeared which led us to wonder if the function is getting called at all. As a test (for that), we then replaced the do_shortcode_tag filter with wp_footer (looking at https://codex.wordpress.org/Plugin_API/Hooks_2.0.x for reference) and this generated the following debug output in the page source:

    
    <b>Fatal error</b>:  Uncaught ArgumentCountError: Too few arguments to function gdpr_gtranslate_shortcode_filter(), 1 passed in /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/class-wp-hook.php on line 287 and exactly 2 expected in /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/functions.php:7640
    Stack trace:
    #0 /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/class-wp-hook.php(287): gdpr_gtranslate_shortcode_filter('')
    #1 /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/class-wp-hook.php(311): WP_Hook->apply_filters('', Array)
    #2 /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/plugin.php(478): WP_Hook->do_action(Array)
    #3 /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/general-template.php(3022): do_action('wp_footer')
    #4 /var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-content/themes/quality-orange/footer.php(35 in <b>/var/www/vhosts/133/142258/webspace/siteapps/WordPress-184401/htdocs/wp-includes/functions.php</b> on line <b>7640</b><br />
    

    Clearly, using wp_footer is at fault there (i.e. only passes a single argument) but it does still make us wonder why the gdpr_gtranslate_shortcode_filter isn’t triggering when we use the do_shortcode_tag filter.

    Is there another factor we’re missing here, or is there another way we could test/disprove that the correct function is getting called?

    Plugin Author Moove Agency

    (@mooveagency)

    Hi @jmernin,

    The hook will be called only if the “gtranslate” shortcode is used. I’ve checked the gtranslate shortcode and it seems this is how the language selector is displayed, but please ask the “gtranslate” developers for more details.

    You can try the following code snippets if it helps (if not, please aks the plugin developers to help you):

    /**
     * GDPR Cookie Compliance - GTranslate shortcode filter
     */
    function gdpr_gtranslate_shortcode_filter( $output, $tag ) {
    	if ( 'gtranslate' === $tag ) :
    		if ( function_exists( 'gdpr_cookie_is_accepted' ) ) {
    		  /* supported types: 'strict', 'thirdparty', 'advanced' */
    		  if ( gdpr_cookie_is_accepted( 'advanced' ) ) {
    		    return $output;
    		  } else {
    		    return '';
    		  }
    		}
    	endif;
    	return $output;
    }
    add_filter('do_shortcode_tag', 'gdpr_gtranslate_shortcode_filter', 10, 2);
    // Reloading the page if visitors accept the cookies
    add_action( 'gdpr_force_reload', '__return_true' );
    add_action( 'wp_footer', function(){
    	if ( function_exists( 'gdpr_cookie_is_accepted' ) ) {
    	  /* supported types: 'strict', 'thirdparty', 'advanced' */
    	  if ( ! gdpr_cookie_is_accepted( 'advanced' ) ) {
    	  	?>
    				<style>#gtranslate_wrapper{display: none;}</style>
    			<?php
    	  }
    	}
    });

    So these custom hooks and functions are hiding the language selector until the cookies are not accepted.

    Thanks

Viewing 10 replies - 1 through 10 (of 10 total)
  • You must be logged in to reply to this topic.