Utilisation des options de widget 'en dehors' du widget

11

Je souhaite enregistrer certains paramètres dans les options du widget, qui sont ensuite transférés dans une autre page. Le widget est un formulaire qui appelle un service Web.

Les options que je souhaite transmettre sont l’authentification du service Web actuellement codée en dur dans la page de résultats (en tant que modèle). Par conséquent, ils doivent être cachés de l'utilisateur du site Web.

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

Page de résultats ...

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

J'apprends toujours comment WP se bloque, désolé pour la question n00b.

    
posée JohnnyBizzle 22.09.2010 - 10:19

5 réponses

16

La réponse de @JonathonByrd est probablement 'la meilleure' - vous devriez certainement utiliser get_option si possible, car rien ne garantit que le nom de l'option restera le même entre les versions de WordPress.

De même, @JonathonByrd repose également sur l'utilisation d'une variable globale qui peut être supprimée / renommée (bien que peut-être très improbable).

Malheureusement, il n’existe pas de wrappers publics que nous puissions utiliser de manière fiable. Le plus proche est la méthode get_settings de votre classe Widget. Supposons que votre classe de widgets soit My_Widget_Class , puis:

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

$settings est alors un tableau de la forme array(instance number => settings) . Généralement, votre widget aura un identifiant tel que my-widget-class-3 - et le "numéro d'instance" est ici 3, et ainsi

 $settings[3]

donne les paramètres (sous forme de tableau) pour le widget my-widget-class-3 . Je pense que c’est une méthode plus fiable et évolutive.

    
réponse donnée Stephen Harris 03.07.2012 - 15:27
4

Pas une question de noob du tout.

Vous aurez besoin de plonger dans MySQL (avec PhpMyAdmin ou similaire) et d’obtenir le nom de l’option en premier. Le SQL suivant listera les options du widget:

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

Ensuite, dans votre modèle (ou dans votre publication / page avec une sorte de plugin exécutant php), vous pouvez get_option() comme ceci:

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

Et le tour est joué!

    
réponse donnée Tom Wright 22.09.2010 - 10:51
4

Tous les widgets et leurs options sont stockés dans global $wp_registered_widgets . Il suffit de charger cette variable et d’imprimer le contenu pour trouver les options de widget que vous recherchez.

    
réponse donnée Ecommerce Consultant 27.05.2011 - 00:23
3

J'ai utilisé la méthode suggérée par Stephen Harris.

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

reset () donne la première valeur de clé de array, si vous ne savez pas quel est l'identifiant de votre widget.

Remarque: le fait que plusieurs copies du widget soient actives n’aide en rien. Parce qu'il renvoie uniquement les paramètres de la première copie du widget.

    
réponse donnée Ulugov 02.07.2015 - 11:50
0

Peut-être que je comprends mal votre question, mais il semble que vous cherchiez à enregistrer certaines options ou informations de votre widget (nom d'utilisateur et mot de passe) quelque part dans WordPress, où vous pourrez ensuite y accéder à nouveau à l'extérieur. le code du widget. Si cela vous convient, consultez la fonction add_option () (ainsi que update_option () et delete_option ( ) le cas échéant).

Pour définir une option, procédez comme suit:

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

Vous pouvez ensuite le récupérer n'importe où dans WP en appelant get_option comme suit:

<?php $option_val = get_option("my_widget_option_name"); ?>
    
réponse donnée brandwaffle 23.09.2010 - 11:57

Lire d'autres questions sur les étiquettes