Usar las opciones del widget 'fuera' del widget

13

Quiero guardar algunos parámetros en las opciones del widget que luego se pasan a otra página. El widget es un formulario que llama a un servicio web.

Las opciones que quiero pasar son la autenticación para el servicio web que actualmente está codificado en la página de resultados (hecho como una plantilla). Por lo tanto, deben estar ocultos para el usuario del sitio web.

Código del widget / complemento:

 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']."";

Todavía estoy aprendiendo cómo WP se mantiene unido, lo siento por la pregunta n00b.

JohnnyBizzle
fuente

Respuestas:

16

La respuesta de @JonathonByrd es probablemente 'la mejor', ciertamente debería usarla get_optionsi es posible, ya que no hay garantía de que el nombre de la opción se mantenga igual entre las versiones de WordPress.

Del mismo modo, @JonathonByrd también se basa en el uso de una variable global que se puede eliminar / renombrar (aunque quizás sea muy poco probable).

Desafortunadamente no hay envoltorios públicos que podamos usar de manera confiable. El más cercano es el get_settingsmétodo de su clase Widget. Supongamos que su clase de widget es My_Widget_Class, entonces:

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

$settingses entonces una matriz de la forma array(instance number => settings). Por lo general, su widget tendrá cualquier ID como my-widget-class-3, y el 'número de instancia' aquí es 3, y así

 $settings[3]

da la configuración (como una matriz) para el widget my-widget-class-3. Esto creo que es un método más confiable y a prueba de futuro.

Stephen Harris
fuente
4

No es una pregunta novata en absoluto.

Tendrá que sumergirse en MySQL (usando PhpMyAdmin o similar) y obtener primero el nombre de la opción. El siguiente SQL enumerará las opciones del widget:

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

Luego, en su plantilla (o publicación / página con algún tipo de complemento php exec) puede get_option()gustarle esto:

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

Et voila!

Tom Wright
fuente
Thx pero nada devuelto de la consulta de selección.
JohnnyBizzle
Eso es extraño. ¿Cuál es el nombre del complemento que proporciona el widget?
Tom Wright
4

Todos los widgets y sus opciones se almacenan dentro global $wp_registered_widgets. Simplemente cargue esta variable e imprima el contenido para encontrar las opciones de widget que está buscando.

Consultor de comercio electrónico
fuente
3

Usé el método sugerido de Stephen Harris.

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

reset () proporciona el primer valor clave de la matriz, si no sabe cuál es la ID de su widget.

Nota: No ayuda si hay varias copias del widget activas. Porque solo devuelve la configuración de la primera copia del widget.

Ulugov
fuente
0

Tal vez estoy leyendo mal su pregunta, pero parece que lo que está buscando hacer es guardar algunas opciones o información de su widget (nombre de usuario y contraseña) en algún lugar de WordPress donde luego puede volver a acceder a ellos fuera del código del widget . Si eso es correcto, querrá ver la función add_option () (así como update_option () y delete_option () según sea necesario).

Para establecer una opción, solo haga esto:

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

Luego puede recuperarlo en cualquier lugar dentro de WP llamando a get_option de esta manera:

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

fuente
¿Puedes explicar un poco más qué es lo que estás tratando de hacer? ¿Es la idea establecer el nombre de usuario y la contraseña para el servicio en forma de widget y luego pasarlos al servicio en cada carga de la página para entregar algún contenido al usuario del sitio web (sin mostrar el nombre de usuario y la contraseña)?
Ok, gracias, lo intentaré. Me estoy confundiendo en este momento, en parte debido a la presión del tiempo.
JohnnyBizzle
Para explicar más, el widget publica 2 opciones, Servicio requerido y Código postal. El formulario se envía a una página específica (sé que podría usar la página actual) que he llamado resultados de búsqueda. Los resultados de búsqueda toman las opciones que paso a la url que llama al servicio web. Los resultados regresan como XML que se pasa a una matriz y luego se envía al usuario. Este sitio está utilizando el mismo servicio web: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle
... la intención era usar parámetros para el nombre de usuario / pwd para el servicio web para que otros sitios pudieran usar el mismo widget.
JohnnyBizzle
Ok, entonces los propietarios del sitio deberán ingresar su propio nombre de usuario y contraseña, ¿correcto? Una vez que lo hacen, utiliza esa información para extraer el XML del otro sitio y luego mostrarlo. En ese caso, desea utilizar get_option y add_option. La función apply_filters funciona en el lado de visualización de las cosas, es decir, no cambia los datos en su base de datos, los modifica antes de que se muestren al usuario final. Parece que desea tomar la entrada del formulario en el widget y guardarla con add_option. Este sitio tiene un gran tutorial: valums.com/create-wordpress-widget