web-dev-qa-db-fra.com

Utilisation des options de widget "en dehors" du widget

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.

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.

11
JohnnyBizzle

La réponse de @ JonathonByrd est probablement 'meilleure' - vous devriez certainement utiliser get_option dans la mesure du 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'y a 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). Typiquement, votre widget aura un identifiant comme my-widget-class-3 - et le 'numéro d’instance' ici est 3, et ainsi de suite.

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

16
Stephen Harris

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 post/page avec une sorte de plugin exécutant php), vous pouvez get_option() comme ceci:

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

Et voilà!

4
Tom Wright

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.

4

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: Cela n’aide en rien que plusieurs copies du widget soient actives. Parce qu'il renvoie uniquement les paramètres de la première copie du widget.

3
Ulugov

Je comprends peut-être 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 en dehors du code du widget. . Si cela est correct, vous voudrez peut-être consulter la fonction add_option () (ainsi que update_option () et delete_option () si nécessaire).

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 ceci:

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