Использование параметров виджета «вне» виджета

13

Я хочу сохранить некоторые параметры в настройках виджета, которые затем передаются на другую страницу. Виджет - это форма, которая вызывает веб-сервис.

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

Код из виджета / плагина:

 function widget($args, $instance){
  extract($args);
  $title = apply_filters('widget_title', empty($instance['title']) ? 'Choose a service' : $instance['title']);
  $lineOne = empty($instance['username']) ? '' : $instance['username'];
  $lineTwo = empty($instance['password']) ? '' : $instance['password'];

  # Before the widget

  echo $before_widget; // etc...

Страница результатов ...

$url = "http://www.nhs.uk/NHSCWS/Services/ServicesSearch.aspx?user=".[USERNAME]."&pwd=".[PASSWORD]."&q=".$_POST['PostCode']."&type=".$_POST['ServiceType']."";

Все еще учимся, как WP висит вместе, так что извините за вопрос n00b.

JohnnyBizzle
источник

Ответы:

16

@ JonathonByrd ответ, вероятно, «лучший» - конечно, вы должны использовать, get_optionесли это вообще возможно, так как нет гарантии, что имя опции останется неизменным между версиями WordPress.

Точно так же @JonathonByrd также использует глобальную переменную, которая может быть удалена / переименована (хотя, возможно, очень маловероятно).

К сожалению, нет общедоступных упаковщиков, которые мы можем надежно использовать. Наиболее близким является get_settingsметод вашего класса Widget. Давайте предположим, что вы класс виджета My_Widget_Class, тогда:

 $dummy = new My_Widget_Class();
 $settings = $dummy->get_settings();

$settingsзатем массив формы array(instance number => settings). Как правило, ваш виджет будет иметь любой идентификатор, как my-widget-class-3- и «номер экземпляра» здесь 3, и так

 $settings[3]

дает настройки (в виде массива) для виджета my-widget-class-3. Я считаю, что это более надежный и перспективный метод.

Стивен Харрис
источник
4

Совсем не нубский вопрос.

Вам нужно будет окунуться в MySQL (используя PhpMyAdmin или аналогичный) и сначала получить имя опции. Следующий SQL перечислит параметры виджета:

SELECT *
FROM `wp_options`
WHERE `option_name`
REGEXP '^widget_'
LIMIT 0 , 30

Тогда в вашем шаблоне (или посте / странице с каким-нибудь плагином php exec) вы можете сделать get_option()так:

<?php echo get_option('your_widget_option_name'); ?>

И вуаля!

Том Райт
источник
Спасибо, но ничего не вернулось из запроса на выборку.
JohnnyBizzle
Странно. Как называется плагин, который предоставляет виджет?
Том Райт
4

Все виджеты и их параметры хранятся в global $wp_registered_widgets. Просто загрузите эту переменную и распечатайте содержимое, чтобы найти параметры виджета, которые вы ищете.

Консультант по электронной коммерции
источник
3

Я использовал предложенный Стивеном Харрисом метод.

$dummy = new My_Widget_Class();
$settings = $dummy->get_settings();
$settings = reset($settings);

reset () дает первое значение ключа из массива, если вы не знаете, каков идентификатор вашего виджета.

Примечание: это не помогает, если существует несколько копий виджета. Потому что он возвращает настройки только первой копии виджета.

Улугов
источник
0

Возможно, я неправильно читаю ваш вопрос, но похоже, что вы хотите сохранить некоторые параметры или информацию из вашего виджета (имя пользователя и пароль) где-нибудь в WordPress, где вы сможете снова получить к ним доступ вне кода виджета. , Если это правильно, вы захотите взглянуть на функцию add_option () (а также update_option () и delete_option () при необходимости).

Чтобы установить опцию, просто сделайте это:

<?php add_option("my_widget_option_name", 'option_value'); ?>

Затем вы можете получить его в любом месте WP, вызвав get_option следующим образом:

<?php $option_val = get_option("my_widget_option_name"); ?>

источник
Можете ли вы объяснить немного больше, что вы пытаетесь сделать? Есть ли идея установить имя пользователя и пароль для службы в форме виджета, а затем передавать их службе при каждой загрузке страницы, чтобы доставить некоторый контент пользователю веб-сайта (без отображения имени пользователя и пароля)?
Хорошо, спасибо, попробую. Сейчас я в замешательстве, частично из-за нехватки времени.
JohnnyBizzle
Чтобы пояснить дальше, виджет публикует 2 варианта, Требуется обслуживание и Почтовый индекс. Форма отправляется на определенную страницу (я знаю, что могу использовать текущую страницу), которую я назвал search-results. Результаты поиска принимают параметры, которые я передаю в URL, вызывающий веб-сервис. Результаты возвращаются в виде XML, который передается в массив и затем выводится пользователю. Этот сайт использует тот же веб-
сервис
... предполагалось использовать параметры для имени пользователя / pwd для веб-службы, чтобы другие сайты могли использовать тот же виджет.
JohnnyBizzle
Итак, владельцы сайтов должны будут ввести свое имя пользователя и пароль, правильно? Как только они это сделают, он использует эту информацию, чтобы извлечь XML с другого сайта и затем отобразить его. В этом случае вы хотите использовать get_option и add_option. Функция apply_filters работает на стороне отображения вещей - то есть она не изменяет данные в вашей базе данных, она изменяет их, прежде чем они будут отображены конечному пользователю. Похоже, вы хотите взять в форме ввода в виджете и сохранить его с add_option. На этом сайте есть отличный учебник: valums.com/create-wordpress-widget