Intereting Posts
я не могу войти в панель управления моего сайта WordPress Как добавить баннеры в боковой панели моей темы WP 4.3.1 новая установка на localhost отсутствует php.ini Создание / post_type / таксономия / термин Постоянная ссылка Структура Получение эскиза эскиза таксономии Регистрация методов класса как обратных вызовов Вносить изменения в файл wp-db.php, сохраняющийся в отношении обновлений Как сортировать таблицу пользовательских сообщений по столбцу, содержащему настраиваемое поле Сортировка цикла с запросом в ссылке Отключить ссылки на изображения, только если ссылка – это изображение Как использовать раскрывающийся список для заполнения списка сообщений из CPT Невозможно перевести дочернюю тему Divi с помощью load_child_theme_textdomain Таймер на Рекомендуемый продукт – Woocommerce Как добавить текстовое поле только в одно из полей этого настраиваемого метаболизма? Сообщение thumbnail не работает после регенерации

Как перевести Widget Описание в конструкторе?

Я создаю локализованный виджет, и перевод работает везде, но в строке языка в конструкторе . Я прочитал, что

вся инициализация плагина должна быть привязана к init init

чтобы избежать этой проблемы, но я не знаю, как это сделать, потому что, если я попытаюсь зарегистрировать виджет с init вместо widgets_init, ничего не инициализируется вообще.

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

Мой код:

class Pinboard_Linkroll_Widget extends WP_Widget { // Constants & Properties go here... protected $widget_slug = 'pinboard-linkroll-widget'; /*--------------------------------------------------*/ /* Constructor /*--------------------------------------------------*/ /** * Includes pinboard API class, * Specifies the classname and description, instantiates the widget, * loads localization files, and includes necessary stylesheets and JavaScript. */ public function __construct() { // include pinboard api class // https://github.com/kijin/pinboard-api include_once( dirname(__FILE__). '/lib/pinboard-api.php' ); // load plugin text domain add_action( 'init', array( &$this, 'widget_textdomain' ) ); // actual widget constructor parent::__construct( $this->get_widget_slug(), __( 'Pinboard Linkroll Widget', $this->get_widget_slug() ), array( 'classname' => $this->get_widget_slug().'-class', 'description' => __( 'Returns a list of recent Pinboard Links.', $this->get_widget_slug() ) ) ); // handle token errors in admin area (check for valid token and display errors) add_action( 'sidebar_admin_setup', array( &$this, 'handle_token_errors' ) ); // delete transients when last widget instance is deleted // http://wordpress.stackexchange.com/questions/95091/how-to-delete-cached-transients-from-a-widget-instance-properly add_action( 'sidebar_admin_setup', array( &$this, 'delete_transient' ) ); } // end constructor /** * Returns widget slug * * @since 0.7.0 * @return Plugin slug variable. */ public function get_widget_slug() { return $this->widget_slug; } /** * Loads the Widget's text domain for localization and translation. * * @since 0.7.0 */ public function widget_textdomain() { load_plugin_textdomain( $this->get_widget_slug(), false, $this->get_widget_slug() . '/lang' ); } // end widget_textdomain // WP Widget API functions & other stuff goes here... } // register widget add_action( 'widgets_init', create_function('', 'return register_widget("Pinboard_Linkroll_Widget");') ); } 

У вас небольшие проблемы с синхронизацией, потому что вы сначала генерируете заголовок (в вызове конструктора), но переносите нагрузку на текстовый домен позже ( init по умолчанию). Текстовый домен mus загружается для __() для правильного перевода. Они не «ленивы», они генерируют и возвращают строки прямо там, где их называют.

Текстовый домен должен быть загружен очень рано, Codex рекомендует в plugins_loaded для плагинов.

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