WordPress: Как добавить поддержку Qtranslate в пользовательские типы иерархий

Недавно решал задачу: есть плагин nimble-portfolio для WordPress, в нём есть своя иерархия (категории) порфтолио и свой тип записей. После установки плагина Qtranslate в записях появилась двух язычность, а в категориях нет, и они всё равно выводятся в русском.

WordPress: Как добавить поддержку Qtranslate в пользовательские типы иерархий

Как мы видим статья на английском, а категории на русском.

И в админке нет возможности указывать названия для двух языков:

qransl-user-hook-ierarhies-2

хотя для обычной категории и при редактировании портфолио такая возможность есть:
qranslate - многоязычность в стандартных таксономиях
qranslate - многоязычность в пользовательских записях

Как же это исправить?

Все оказалось достаточно просто, если знать где копать.

Сначала в файле плагина nimble-portfolio я нашёл код добавления новой таксономии.

Выглядит это так:

function nimble_portfolio_register_taxonomies() {
    register_taxonomy('nimble-portfolio-type', 'portfolio', array('hierarchical' => true, 'label' => 'Item Type', 'query_var' => true, 'rewrite' => array('slug' => 'portfolio-type')));

    if (count(get_terms('nimble-portfolio-type', 'hide_empty=0')) == 0) {
        register_taxonomy('type', 'portfolio', array('hierarchical' => true, 'label' => 'Item Type'));
        /// ****
        /// Убрал всё лишнее, оставил только самое важное для понимания.
        register_taxonomy('type', array());
    }
}

Дальше нашёл файл qtranslate_hooks.php в папке плагина Qtranslate, меня интересовали там строчки:

 add_action('category_edit_form', 'qtrans_modifyTermFormFor');
 add_action('post_tag_edit_form', 'qtrans_modifyTermFormFor');

Тут мы видим, что к форме редактирования категорий и тегов цепляется хук. Следовательно, что бы у нас появилась многоязычность, необходимо и к нашей форме прицепить хук. Осталось понять как.

Я испытательным путём выяснил, если наш тип таксономии называется «nimble-portfolio-type», то писать необходимо так:

add_action('nimble-portfolio-type_add_form', 'qtrans_modifyTermFormFor');
add_action('nimble-portfolio-type_edit_form', 'qtrans_modifyTermFormFor');

Этот код сделает форму добавления и редактирования пользовательских таксономий нашего портфолио многоязычной.

И получили (остальные на русском, потому как не переводил их):

qranslate - многоязычность в пользовательских таксономиях

  • va1entins

    Спасибо большое, очень помог!