Usando opciones de widget 'fuera' del widget

11

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

Las opciones que deseo pasar son la autenticación para el servicio web que actualmente está codificado en la página de resultados (hecha como una plantilla). Por lo tanto, deben estar ocultos al 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 une, por lo que lamento la pregunta n00b.

    
pregunta JohnnyBizzle 22.09.2010 - 10:19

5 respuestas

16
La respuesta de

@ JonathonByrd es probablemente "la mejor": seguramente debería usar get_option si es posible, ya que no hay garantía de que el nombre de la opción se mantenga igual entre las versiones de WordPress.

De manera similar, @JonathonByrd también se basa en el uso de una variable global que puede ser eliminada / renombrada (aunque quizás sea muy poco probable).

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

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

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

 $settings[3]

proporciona la configuración (como una matriz) para el widget my-widget-class-3 . Creo que este es un método más confiable y seguro para el futuro.

    
respondido por el Stephen Harris 03.07.2012 - 15:27
4

No es una pregunta noob en absoluto.

Deberá sumergirse en MySQL (usando PhpMyAdmin o similar) y obtener primero el nombre de la opción. El siguiente SQL mostrará una lista de 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 php exec plugin) puede get_option() como esto:

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

Et voila!

    
respondido por el Tom Wright 22.09.2010 - 10:51
4

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

    
respondido por el Ecommerce Consultant 27.05.2011 - 00:23
3

Utilicé el método sugerido por 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 sabes cuál es el ID de tu widget.

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

    
respondido por el Ulugov 02.07.2015 - 11:50
0

Quizás estoy leyendo mal tu pregunta, pero parece que lo que estás buscando es guardar algunas opciones o información de tu widget (nombre de usuario y contraseña) en algún lugar de WordPress donde puedas volver a acceder a ellas desde fuera. El código del widget. Si eso es correcto, querrá consultar la función add_option () (así como update_option () y delete_option ( ) según sea necesario).

Para establecer una opción, simplemente 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 forma:

<?php $option_val = get_option("my_widget_option_name"); ?>
    
respondido por el brandwaffle 23.09.2010 - 11:57

Lea otras preguntas en las etiquetas