johnnybizzle
  • 0
Новичок

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

  • 0

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

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

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

 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.

Share
  1. Ответ @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 . Я считаю, что это более надежный и перспективный метод.

    • 0
    • Спасибо, но ничего не вернулось из запроса на выборку.

      • 0
    • Это странно. Как называется плагин, который предоставляет виджет?

      • 0
    • Можете ли вы объяснить немного больше, что вы пытаетесь сделать? Является ли идея установить имя пользователя и пароль для службы в виде виджета, а затем передавать их службе при каждой загрузке страницы, чтобы доставлять некоторый контент пользователю веб-сайта (без отображения имени пользователя и пароля)?

      • 0
    • Хорошо, спасибо, попробую. Я сейчас сбиваюсь с толку, отчасти из-за нехватки времени.

      • 0
    • Для дальнейшего объяснения виджет публикует 2 варианта: «Требуется услуга» и «Почтовый индекс». Форма отправляется на определенную страницу (я знаю, что могу использовать текущую страницу), которую я назвал результатами поиска. Результаты поиска принимают параметры, которые я передаю в URL-адрес, вызывающий веб-сервис. Результаты возвращаются в виде XML, который передается в массив, а затем выводится пользователю. Этот сайт использует тот же веб-сервис: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17.

      • 0
    • … цель состояла в том, чтобы использовать параметры для имени пользователя/пароля для веб-службы, чтобы другие сайты могли использовать один и тот же виджет.

      • 0
    • Итак, владельцам сайтов нужно будет ввести собственное имя пользователя и пароль, верно? Как только они это сделают, он использует эту информацию для получения XML-файла с другого сайта, а затем отобразит его. В этом случае вы хотите использовать get_option и add_option. Функция apply_filters работает на стороне отображения вещей, т.е. она не изменяет данные в вашей базе данных, она модифицирует их до того, как они будут показаны конечному пользователю. Похоже, вы хотите ввести форму, введенную в виджет, и сохранить ее с помощью add_option. На этом сайте есть отличное руководство: valums.com/create-wordpress-widget.

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

    Вам нужно будет погрузиться в 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'); ?>
    

    И вуаля!

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

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

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

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

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

    • 0
  5. Возможно, я неправильно понимаю ваш вопрос, но, похоже, вы хотите сохранить некоторые параметры или информацию из вашего виджета (имя пользователя и пароль) где-нибудь в 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"); ?>
    
    • 0

Оставить ответ

You must login to add an answer.