Intereting Posts
Как остановить wp_postmeta от вызова на страницах архива и поиска? Динамические конечные точки как можно использовать woocommerce добавить в корзину всплывающее окно? Как полностью отключить архив таксономии на интерфейсе? сообщение тега texonomy rename получение ошибки Несколько доменов с разными дочерними темами на одной установке? Переместить заголовок архива в заголовок записи – Бытие Пустые страницы «Форумы» страница форума BuddyPress форум – bbPress Сохраните исходное имя изображения при изменении размера Зависимость подключаемого модуля третьей стороны – как правильно загружать классы Разбиение страниц на несколько запросов для разных авторов на author.php Соединение потеряно. Сохранение отключено … (Обновление сообщений / страниц) Использование wp_ajax и wp_ajax_nopriv hooks Каковы параметры запуска пользовательских файлов css и javascript на странице? Пользовательский шаблон для типа сообщения не работает

Как определить виджет с одним экземпляром?

Как может виджет, из которого можно использовать только один экземпляр?

Solutions Collecting From Web of "Как определить виджет с одним экземпляром?"

Простым способом было бы установить некоторую глобальную переменную при первом запуске виджета и проверить ее. Вывести ничего или информационное сообщение, если оно уже установлено.

Правильным способом, вероятно, будет работа с интерфейсом и удаление виджета из доступных при добавлении его на боковой панели, но это выход из моей лиги.

Я собрал следующий код, основанный на ответе @ Philip. Кажется, работает для меня. Любые предложения приветствуются!

 function mfields_test_single_instance_widget( $args ) { $args = wp_parse_args( (array) $args, array( 'before_widget' => '<div>', 'after_widget' => '</div>', 'before_title' => '<h2>', 'after_title' => '</h2>', ) ); print $args['before_title'] . esc_html( $args['widget_name'] ) . $args['after_title']; print $args['before_widget'] . '<p>THERE CAN BE ONLY ONE!!!</p>' . $args['after_widget']; } wp_register_sidebar_widget( 'mfields-test-single-instance-widget', 'Single Instance Widget', 'mfields_test_single_instance_widget', array( 'classname' => 'mfields-test-single-instance-widget' ) ); 

вы можете создавать виджеты, которые можно активировать один раз с помощью старого метода:

 <?php // Custom Widget function widget_artdev_custom() { ?> // YOUR CODE-FUNCTIONS HERE <?php } if ( function_exists('register_sidebar_widget') ) register_sidebar_widget(__('Custom Widget','artdev'), 'widget_artdev_custom'); ?> 

имейте в виду, что этот код можно использовать для> 2.8 и более старых версий wordpress.

Раньше я предоставил ссылку на учебник, следующий полный рабочий пример. Пример @mfields работает просто отлично, у меня просто есть поля опций.

 /* * Single Instance Widget with Options */ add_action("widgets_init", array('Single_instance_widget', 'register')); register_activation_hook(__FILE__, array('Single_instance_widget', 'activate')); register_deactivation_hook(__FILE__, array('Single_instance_widget', 'deactivate')); class Single_instance_widget { function activate() { $data = array( 'option1' => 'Default value', 'option2' => 55 ); if (!get_option('wpse_1828_widget')) { add_option('wpse_1828_widget', $data); } else { update_option('wpse_1828_widget', $data); } } function deactivate() { delete_option('wpse_1828_widget'); } function control() { $data = get_option('wpse_1828_widget'); echo <<<HTML <p><label>Option 1<input name="wpse_1828_widget_option1" type="text" value="{$data['option1']}"/></label></p> <p><label>Option 2<input name="wpse_1828_widget_option2" type="text" value="{$data['option2']}"/></label></p> HTML; if (isset($_POST['wpse_1828_widget_option1'])) { $data['option1'] = attribute_escape($_POST['wpse_1828_widget_option1']); $data['option2'] = attribute_escape($_POST['wpse_1828_widget_option2']); update_option('wpse_1828_widget', $data); } } function widget($args) { echo $args['before_widget']; echo $args['before_title'] . 'Your widget title' . $args['after_title']; echo 'I am your widget'; echo $args['after_widget']; } function register() { wp_register_sidebar_widget('wpse_1828_widget_id', 'Single Instance Widget', array('Single_instance_widget', 'widget')); wp_register_widget_control('wpse_1828_widget_id', 'Single Instance Widget', array('Single_instance_widget', 'control')); } }