Show Content Only in Certain Languages
Adds a [wpide_lang only="fr,de"]...[/wpide_lang] shortcode that shows the enclosed text only when the page is displayed in one of those languages, for small differences between translations.
Opens WPIDE on
Code
add_shortcode( 'wpide_lang', function ( $atts, $content = '' ) {
$atts = shortcode_atts( array( 'only' => '', 'except' => '' ), $atts, 'wpide_lang' );
$locale = strtolower( determine_locale() );
$code = strtok( $locale, '_' );
if ( defined( 'ICL_LANGUAGE_CODE' ) && ICL_LANGUAGE_CODE ) {
$code = strtolower( ICL_LANGUAGE_CODE );
} elseif ( function_exists( 'pll_current_language' ) && pll_current_language() ) {
$code = strtolower( pll_current_language() );
}
$matches = function ( $list ) use ( $code, $locale ) {
$items = array_filter( array_map( 'trim', explode( ',', strtolower( $list ) ) ) );
return in_array( $code, $items, true ) || in_array( $locale, $items, true );
};
if ( '' !== $atts['only'] && ! $matches( $atts['only'] ) ) {
return '';
}
if ( '' !== $atts['except'] && $matches( $atts['except'] ) ) {
return '';
}
return do_shortcode( $content );
} );
Notes
Uses the WPML or Polylang language when available, otherwise the WordPress locale (e.g. fr matches fr_FR). Add except="en" to hide content in a language instead.
How to add this snippet
- Install WPIDE on your WordPress site (it is free) and open Code Snippets.
- Use snippet above adds it from the library in one click. Or copy the code into a new snippet with the same code type.
- It is added inactive: review the code and settings, then switch it on.