Игорь Воротнёв, нужно получить перевод строки в том же хуке, в зависимости от языка поста. Функция "__" (она же "translate") возвращает перевод в зависимости от текущего языка админки.
add_action('save_post', function($post_id) {
__('hello', 'wordpress'); //вернет перевод в зависимости от текущего языка админки
}
Может можно подменить текущий язык перед вызовом функции?
deadnice, так, это уже становится интересным. Опишите, пожалуйста, что вы делаете, с какой целью, какой результат ожидаете. Вижу, что вы идете ложным путем, но все еще не понимаю, в чем состоит ваша задача. На чуть более общем уровне чем "подменить текущий язык".
При сохранении каждого поста я формирую изображение (скажем карточку поста). В нём есть динамические поля (они берутся из данных поста) и статические(они должны меняться в зависимости от сохраняемого языка поста). Мне нужно чтобы при сохранении поста на английском языке функция "__('Some title', 'wordpress');" вернула 'Some title', а возвращает 'Некоторое название' (из-за того что функция берет текущий язык админки).
add_action('save_post', function($post_id) {
require_once('create_card.php');
//объект в котором создается картинка и возвращаются данные (ссылка на неё и т.д.)
$front_card = new Create_card(array(
//динамические поля
'name' => get_the_title()
,'description' => get_the_content()
//статические (они должны менятся в зависимости от языка поста)
,'header_logo_title' => __('Some title', 'wordpress');
,'header_text_description' => __('Somde description', 'wordpress');
));
}
deadnice, Боюсь так просто не получится, вы не совсем понимаете как работает локализация строк (функция __()). Когда вы вызываете __('Some title', 'wordpress'), WP берет перевод этой строки из уже загруженного на тот момент файла переводов (.mo), который грузится на достаточно раннем этапе, использует textdomain и локаль для получения нужного файла переводов. То есть да, данная функция вернет значение строки в текущей локали админки/WordPress.
Теоретически, можно на лету:
- взять текущий язык поста
- по языку взять его локаль
- загрузить файл перевода в нужной локали
- получить строку
Но я лично не тестил подобное, и более конкретно подсказать не могу, кроме вот этого общего указания нужного направления.
Посмотрите в сторону функции load_textdomain(), ей можно передать конкретный .mo файл (название которого, учитывая локаль, можно сформировать на лету). Но он заменить глобальный l10n объект. Возможно, стоит сначала закешировать оригинальный глобальный объект в $old_l10n, загрузить новый, взять оттуда строки, вернуть все на место.
Ещё раз спасибо вам за большой, развернутый ответ!
Впрниципе можно использовать функцию load_textdomain(), зарегистрировав собственный домен переводить строки, и как я понял он не меняет файл перевода для сайта в глобальном объекте $old_l10n, он просто добавляет новый домен для перевода. И оно работает так:
deadnice, Скорее всего глобальный $l10n все-таки заменяется (если посмотреть код функции load_textdomain - то именно это там и происходит), но, возможно, вы еще не заметили последствий этой замены. Надо дебажить, чтобы убедиться.
Игорь Воротнёв, да, он заменяется, но я имел ввиду что это не критично т.к. создается отдельный домен (в моём случае 'save_post_lang'), а стандартный домен 'wordpress' остается прежним и используется он как и ранее, в том числе и самим wp.
UPD! Протестировал админку и сайт с новым "textdomain", загруженным load_textdomain, никаких сбоев или багов (хотя у меня постоянно и не загружен он, только при обновлении/создании конкретного типа постов).