Usando as opções do widget 'fora' do widget

13

Desejo salvar alguns parâmetros nas opções do widget que são passadas para outra página. O widget é um formulário que chama um serviço da web.

As opções que desejo passar são a autenticação do serviço da web, atualmente codificado na página de resultados (feito como um modelo). Portanto, eles devem estar ocultos do usuário do site.

Código do widget / plugin:

 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...

Página de resultados ...

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

Ainda aprendendo como o WP se encaixa, desculpe a pergunta n00b.

JohnnyBizzle
fonte

Respostas:

16

A resposta de @ JonathonByrd provavelmente é 'melhor' - certamente você deve usar get_optionse possível, pois não há garantia de que o nome da opção permaneça o mesmo entre as versões do WordPress.

Da mesma forma - o @JonathonByrd também conta com o uso de uma variável global que pode ser removida / renomeada (embora talvez seja muito improvável).

Infelizmente, não há wrappers públicos que possamos usar com segurança. O mais próximo é o get_settingsmétodo da sua classe Widget. Vamos supor que você seja da classe do widget My_Widget_Class, então:

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

$settingsé então uma matriz do formulário array(instance number => settings). Normalmente, o seu widget terá qualquer ID como my-widget-class-3- e o 'número da instância' aqui é 3 e, portanto,

 $settings[3]

fornece as configurações (como uma matriz) para o widget my-widget-class-3. Este é um método mais confiável e à prova de futuro.

Stephen Harris
fonte
4

Não é uma pergunta noob.

Você precisará mergulhar no MySQL (usando PhpMyAdmin ou similar) e obter o nome da opção primeiro. O SQL a seguir listará as opções do widget:

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

Em seguida, no seu modelo (ou post / página com algum tipo de plugin php exec), você pode get_option():

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

Et voila!

Tom Wright
fonte
Thx, mas nada retornou da consulta de seleção.
precisa saber é o seguinte
Isso é estranho. Qual é o nome do plug-in que fornece o widget?
Tom Wright
4

Todos os widgets e suas opções são armazenados dentro global $wp_registered_widgets. Basta carregar esta variável e imprimir o conteúdo para encontrar as opções de widget que você está procurando.

Consultor de comércio eletrônico
fonte
3

Eu usei o método sugerido por Stephen Harris.

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

reset () fornece o primeiro valor-chave da matriz, se você não souber qual é o ID do seu widget.

Nota: Não ajuda se houver várias cópias do widget ativas. Porque retorna as configurações da primeira cópia do widget.

Ulugov
fonte
0

Talvez eu esteja lendo mal sua pergunta, mas parece que você está procurando salvar algumas opções ou informações do seu widget (nome de usuário e senha) em algum lugar do WordPress, onde você pode acessá-las novamente fora do código do widget . Se estiver correto, convém examinar a função add_option () (assim como update_option () e delete_option () conforme necessário).

Para definir uma opção, faça o seguinte:

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

Você pode recuperá-lo em qualquer lugar do WP chamando get_option assim:

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

fonte
Você pode explicar um pouco mais o que você está tentando fazer? A ideia é definir o nome de usuário e a senha do serviço em um formato de widget e depois passá-los para o serviço em cada carregamento de página para fornecer algum conteúdo ao usuário do site (sem exibir o nome de usuário e a senha)?
Ok, obrigado, vamos tentar. Estou atrapalhando no momento, em parte devido à pressão do tempo.
precisa saber é o seguinte
Para explicar melhor, o widget publica 2 opções, Serviço necessário e Código Postal. O formulário é enviado para uma página específica (sei que poderia usar a página atual) que chamei de resultados de pesquisa. Os resultados da pesquisa utilizam as opções que eu passo no URL que chama o serviço da web. Os resultados retornam como XML, que são passados ​​para uma matriz e, em seguida, são enviados para o usuário. Este site está usando o mesmo serviço da web: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17 #
JohnnyBizzle
... a intenção era usar parâmetros para o nome de usuário / senha para o serviço da web, para que outros sites pudessem usar o mesmo widget.
JohnnyBizzle
Ok, então os proprietários do site precisarão inserir seu próprio nome de usuário e senha, correto? Depois de fazer isso, ele usa essas informações para extrair o XML do outro site e depois exibi-lo. Nesse caso, você deseja usar as opções get_option e add_option. A função apply_filters funciona no lado de exibição das coisas - ou seja, não altera os dados no seu banco de dados, modifica-os antes de serem exibidos para o usuário final. Parece que você deseja inserir o formulário no widget e salvá-lo com add_option. Este site tem um ótimo tutorial: valums.com/create-wordpress-widget