2

I've created custom post type and taxonomy via generator, but not quite sure how to make it translatable. Google doesn't help in this. I have no idea where to put text-domain here and things what I've tried made taxonomies don't work at all.

Thanks in advance.

The code:

    add_action( 'init', 'register_cpt_portfolio' );
    function register_cpt_portfolio() {

        $labels = array( 
            'name' => _x( 'Portfolios',  'portfolio'),
            'singular_name' => _x( 'single-portfolio',  'portfolio' ),
            'add_new' => _x( 'Add New', 'portfolio' ),
            'add_new_item' => _x( 'Add New Portfolio', 'portfolio' ),
            'edit_item' => _x( 'Edit Portfolio',  'portfolio' ),
            'new_item' => _x( 'New Portfolio', 'portfolio' ),
            'view_item' => _x( 'View Portfolio',  'portfolio' ),
            'search_items' => _x( 'Search Portfolios',  'portfolio' ),
            'not_found' => __( 'No portfolios found',  'portfolio' ),
            'not_found_in_trash' => _x( 'No portfolios found in Trash',  'portfolio' ),
            'parent_item_colon' => _x( 'Parent Portfolio:', 'portfolio' ),
            'menu_name' => _x( 'Portfolio',  'portfolio' ),
        );

        $args = array( 
            'labels' => $labels,
            'hierarchical' => false,
            'supports' => array( 'title', 'editor', 'thumbnail' ),
            'taxonomies' => array( 'portfolio_taxonomy' ),
            'public' => true,
            'show_ui' => true,
            'show_in_menu' => true,
            'show_in_nav_menus' => true,
            'publicly_queryable' => true,
            'exclude_from_search' => false,
            'has_archive' => true,
            'query_var' => true,
            'can_export' => true,
            'rewrite' => true,
            'capability_type' => 'post'
        );

        register_post_type( 'portfolio', $args );
    }    


    add_action( 'init', 'register_taxonomy_portfolio_taxonomy' );

    function register_taxonomy_portfolio_taxonomy() {

        $labels = array( 
            'name' => _x( 'Portfolio Categories',  'portfolio_taxonomy' ),
            'singular_name' => _x( 'Portfolio Category', 'portfolio_taxonomy' ),
            'search_items' => _x('Search Portfolio Categories',  'portfolio_taxonomy'),
            'popular_items' => _x( 'Popular Portfolio Categories',  'portfolio_taxonomy' ),
            'all_items' => _x('All Portfolio Categories', 'portfolio_taxonomy' ),
            'parent_item' => _x('Parent Portfolio Category',  'portfolio_taxonomy' ),
            'parent_item_colon' => _x( 'Parent Portfolio Category:',  'portfolio_taxonomy' ),
            'edit_item' => _x( 'Edit Portfolio Category', 'portfolio_taxonomy' ),
            'update_item' => _x( 'Update Portfolio Category', 'portfolio_taxonomy' ),
            'add_new_item' => _x( 'Add New Portfolio Category', 'portfolio_taxonomy'),
            'new_item_name' => _x( 'New Portfolio Category',  'portfolio_taxonomy' ),
            'separate_items_with_commas' => _x( 'Separate portfolio categories with commas', 'portfolio_taxonomy'),
            'add_or_remove_items' => _x( 'Add or remove portfolio categories',  'portfolio_taxonomy' ),
            'choose_from_most_used' => _x( 'Choose from the most used portfolio categories', 'portfolio_taxonomy' ),
            'menu_name' => _x( 'Portfolio Categories','portfolio_taxonomy'),
        );

        $args = array( 
            'labels' => $labels,
            'public' => true,
            'show_in_nav_menus' => true,
            'show_ui' => true,
            'show_tagcloud' => true,
            'hierarchical' => true,
            'rewrite' => true,
            'query_var' => true
        );

        register_taxonomy( 'portfolio_taxonomy', array('portfolio'), $args );
    }
4
  • I don't understand your question. The text domain is 'portfolio'?
    – fuxia
    Sep 22, 2012 at 0:31
  • Nope, that the code generated by themergency.com/generators/wordpress-custom-post-types
    – denoizzed
    Sep 22, 2012 at 9:22
  • In your code portfolio and portfolio_taxonomy are the text domains. Do you ask how you should change these values or which parts of your code are the text domains?
    – fuxia
    Sep 22, 2012 at 9:52
  • Got it, thanks! For some reason I thought they're not.
    – denoizzed
    Sep 22, 2012 at 12:38

1 Answer 1

4

Since you have already figured out what the text domain is - the last parameter of __() - I want to add something most people forget when custom post types or taxonomies are made translatable: slugs.

Your post type or taxonomy name can mean something very different or even embarrassing in another language. Or it can contain letters that are not available (like the famous i in Turkish) and therefore hard to type.

See untranslatable slugs as bugs in your code.

The rewrite argument for register_taxonomy() and register_post_type() accepts an array. One of the array keys is slug. Use it, make it translatable too:

register_post_type( 
    'post_type_name', 
    array (
        'rewrite' => array (
            'slug' => _x( 'post_type_name', 'URL slug', 'your_text_domain' )
        )
    )
);
register_taxonomy( 
    'taxonomy_name',
    array ( 'post', 'post_type_name' ), 
    array (
        'rewrite' => array (
            'slug' => _x( 'taxonomy_name', 'URL slug', 'your_text_domain' )
        )
    )
);

The function _x() uses a context parameter. This will help translators to see where the string will be used.

1
  • So what ? how Wordpress can know you are writting a post in english or french ? Can't understand. Apr 4, 2017 at 15:35

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

Not the answer you're looking for? Browse other questions tagged or ask your own question.