Utiliser les options du widget «en dehors» du widget


13

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

Les options que je veux transmettre sont l'authentification pour le webservice qui est actuellement codée en dur dans la page de résultats (réalisée comme modèle). Par conséquent, ils doivent être cachés à 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 tient ensemble, donc désolé pour la question n00b.

Réponses:


16

La réponse de @ JonathonByrd est probablement `` la meilleure '' - vous devriez certainement utiliser get_optionsi possible, car il n'y a aucune garantie 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 cela soit très peu probable).

Malheureusement, il n'y a pas de wrappers publics que nous pouvons utiliser de manière fiable. La get_settingsméthode la plus proche est celle de votre classe Widget. Supposons que votre classe de widget soit My_Widget_Class, alors:

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

$settingsest alors un tableau du formulaire array(instance number => settings). En règle générale, votre widget aura n'importe quel ID 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) du widget my-widget-class-3. Je pense que c'est une méthode plus fiable et à l'épreuve du temps.


4

Pas une question du tout.

Vous devrez plonger dans MySQL (en utilisant PhpMyAdmin ou similaire) et obtenir le nom de l'option en premier. Le code SQL suivant répertorie les options du widget:

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

Ensuite, dans votre modèle (ou poste / page avec une sorte de plugin php exec), vous pouvez get_option()aimer ceci:

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

Et voilà!


Thx mais rien n'est revenu de la requête de sélection.
JohnnyBizzle

C'est étrange. Quel est le nom du plugin qui fournit le widget?
Tom Wright

4

Tous les widgets et leurs options sont stockés dans global $wp_registered_widgets. Chargez simplement cette variable et imprimez le contenu pour trouver les options de widget que vous recherchez.


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é du tableau, si vous ne savez pas quel est l'ID de votre widget.

Remarque: Cela n'aide pas si plusieurs copies du widget sont actives. Parce qu'il renvoie uniquement les paramètres de la première copie du widget.


0

Peut-être que je lis mal votre question, mais il semble que ce que vous cherchez à faire, c'est d'enregistrer des options ou des informations de votre widget (nom d'utilisateur et mot de passe) quelque part dans WordPress où vous pouvez ensuite y accéder de nouveau en dehors du code du widget . Si c'est correct, vous voudrez regarder 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"); ?>

Pouvez-vous expliquer un peu plus ce que vous essayez de faire? L'idée est-elle de définir le nom d'utilisateur et le mot de passe du service sous forme de widget, puis de les transmettre au service à chaque chargement de page pour fournir du contenu à l'utilisateur du site Web (sans afficher le nom d'utilisateur et le mot de passe)?

Ok merci, je vais essayer. Je m'embrouille en ce moment, en partie à cause de la pression du temps.
JohnnyBizzle

Pour expliquer davantage, le widget affiche 2 options, Service requis et Code postal. Le formulaire se soumet à une page spécifique (je sais que je pourrais utiliser la page actuelle) que j'ai appelée résultats de recherche. Les résultats de la recherche prennent les options que je passe dans l'url appelant le webservice. Les résultats reviennent sous forme de XML qui est passé dans un tableau puis envoyé à l'utilisateur. Ce site utilise le même service Web
JohnnyBizzle

... l'intention était d'utiliser des paramètres pour le nom d'utilisateur / pwd pour le webservice afin que d'autres sites puissent utiliser le même widget.
JohnnyBizzle

D'accord, les propriétaires de sites devront donc saisir leur propre nom d'utilisateur et mot de passe, n'est-ce pas? Une fois qu'ils l'ont fait, il utilise ces informations pour extraire le XML de l'autre site, puis l'afficher. Dans ce cas, vous souhaitez utiliser get_option et add_option. La fonction apply_filters fonctionne du côté affichage des choses - c'est-à-dire qu'elle ne modifie pas les données dans votre base de données, elle les modifie avant qu'elles ne soient affichées pour l'utilisateur final. Il semble que vous souhaitiez prendre la forme saisie dans le widget et l'enregistrer avec add_option. Ce site a un excellent tutoriel: valums.com/create-wordpress-widget
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.