This filter hook is applied to the translated text by the internationalization functions (__(), _e(), etc.).
IMPORTANT: This filter is always applied even if internationalization is not in effect, and if the text domain has not been loaded. If there are functions hooked to this filter, they will always run. This could lead to a performance problem.
For singular/plural aware translation functions such as _n(), see ngettext().
This filter is ideally avoided as the performance aspect can be huge. If you do need it, be aware with a common suite of plugins installed this can easily run thousands of times on one page! WooCommerce and similar make everything translatable.
It’s far improved to check the domain right away and return the translation instantly if it’s not the domain you’re wanting to translate. This minimises the overhead, rather than some of these examples that are running str_replace(), is_single() etc over and over unnecessarily which adds up due to the sheer quantity of times this code will run.
add_filter( 'gettext', 'wpdocs_translate_text', 10, 3 );
function wpdocs_translate_text( $translated_text, $untranslated_text, $domain ) {
if ( 'blah' !== $domain ) {
return $translated_text;
}
// Now do your checking for your string within the 'blah' domain
}
Change the default field names of the comment form. Assumes the current form includes field names “Name” and “Email” and that ‘theme_text_domain’ is the name of your theme’s text domain.
add_filter('gettext', 'remove_admin_stuff', 20, 3);
/**
* Remove the text at the bottom of the Custom fields box in WordPress Post/Page Editor.
*
* @link https://codex.wordpress.org/Plugin_API/Filter_Reference/gettext
*/
function remove_admin_stuff( $translated_text, $untranslated_text, $domain ) {
$custom_field_text = 'Custom fields can be used to add extra metadata to a post that you can <a href="https://codex.wordpress.org/Using_Custom_Fields" target="_blank">use in your theme</a>.';
if ( is_admin() && $untranslated_text === $custom_field_text ) {
return '';
}
return $translated_text;
}
add_filter('gettext', 'change_admin_cpt_text_filter', 20, 3);
/*
* Change the text in the admin for my custom post type
*
**/
function change_admin_cpt_text_filter( $translated_text, $untranslated_text, $domain ) {
global $typenow;
if( is_admin() && 'MY_CPT' == $typenow ) {
//make the changes to the text
switch( $untranslated_text ) {
case 'Featured Image':
$translated_text = __( 'NEW FEATURED IMAGE TEXT','text_domain' );
break;
case 'Enter title here':
$translated_text = __( 'NEW TITLE COPY','text_domain' );
break;
//add more items
}
}
return $translated_text;
}
This filter is ideally avoided as the performance aspect can be huge. If you do need it, be aware with a common suite of plugins installed this can easily run thousands of times on one page! WooCommerce and similar make everything translatable.
It’s far improved to check the domain right away and return the translation instantly if it’s not the domain you’re wanting to translate. This minimises the overhead, rather than some of these examples that are running str_replace(), is_single() etc over and over unnecessarily which adds up due to the sheer quantity of times this code will run.
Change the “Register” text on the WordPress default login page.
Change the Comment Form
Change the default field names of the comment form. Assumes the current form includes field names “Name” and “Email” and that ‘theme_text_domain’ is the name of your theme’s text domain.
Remove Text from Admin Form
Change Text in Custom Post Admin Form