Utilizzo delle opzioni del widget "all'esterno" del widget


13

Voglio salvare alcuni parametri nelle opzioni del widget che vengono quindi passati in un'altra pagina. Il widget è un modulo che chiama un servizio web.

Le opzioni che desidero passare sono l'autenticazione per il servizio web che è attualmente codificato nella pagina dei risultati (come modello). Pertanto, devono essere nascosti all'utente del sito Web.

Codice dal 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...

Pagina dei risultati ...

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

Sto ancora imparando come WP si blocca, quindi scusate la domanda n00b.

Risposte:


16

@La risposta di JonathonByrd è probabilmente 'la migliore' - sicuramente dovresti usarla get_optionse possibile, poiché non c'è garanzia che il nome dell'opzione rimarrà lo stesso tra le versioni di WordPress.

Allo stesso modo - @JonathonByrd si affida anche all'uso di una variabile globale che può essere rimossa / rinominata (anche se forse molto improbabile).

Sfortunatamente non ci sono wrapper pubblici che possiamo usare in modo affidabile. Il più vicino è il get_settingsmetodo della tua classe Widget. Supponiamo che tu sia la classe widget My_Widget_Class, quindi:

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

$settingsè quindi una matrice del modulo array(instance number => settings). In genere il tuo widget avrà un ID simile my-widget-class-3- e il 'numero di istanza' qui è 3, e così

 $settings[3]

fornisce le impostazioni (come un array) per il widget my-widget-class-3. Ritengo sia un metodo più affidabile e a prova di futuro.


4

Non è affatto una domanda noob.

Dovrai immergerti in MySQL (usando PhpMyAdmin o simili) e ottenere prima il nome dell'opzione. Il seguente SQL elencherà le opzioni del widget:

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

Quindi nel tuo modello (o post / pagina con una sorta di plugin php exec) puoi fare get_option()così:

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

Et voilà!


Grazie, ma niente restituito dalla query selezionata.
JohnnyBizzle,

È strano. Qual è il nome del plugin che fornisce il widget?
Tom Wright,

4

Tutti i widget e le relative opzioni sono memorizzati all'interno global $wp_registered_widgets. Basta caricare questa variabile e stampare il contenuto per trovare le opzioni del widget che stai cercando.


3

Ho usato il metodo suggerito da Stephen Harris.

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

reset () fornisce il primo valore chiave dall'array, se non si conosce l'ID del widget.

Nota: non è utile se sono attive più copie del widget. Perché restituisce solo le impostazioni della prima copia del widget.


0

Forse sto leggendo male la tua domanda, ma sembra che quello che stai cercando di fare sia salvare alcune opzioni o informazioni dal tuo widget (nome utente e password) da qualche parte in WordPress dove puoi quindi accedere nuovamente al di fuori del codice del widget . Se è corretto, ti consigliamo di guardare la funzione add_option () (così come update_option () e delete_option () se necessario).

Per impostare un'opzione, basta fare questo:

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

È quindi possibile recuperarlo ovunque all'interno di WP chiamando get_option in questo modo:

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

Puoi spiegarci un po 'di più cosa stai cercando di fare? L'idea è di impostare il nome utente e la password per il servizio in un modulo widget e quindi di passarli al servizio su ogni caricamento della pagina per consegnare del contenuto all'utente del sito Web (senza visualizzare nome utente e password)?

Ok grazie, ci proverò. Sto confondendo al momento, in parte a causa della pressione del tempo.
JohnnyBizzle,

Per spiegare ulteriormente, il widget pubblica 2 opzioni, Servizio richiesto e Codice postale. Il modulo invia a una pagina specifica (so che potrei usare la pagina corrente) che ho chiamato risultati della ricerca. I risultati della ricerca prendono le opzioni che passo nell'URL chiamando il servizio web. I risultati tornano come XML che viene passato in un array e quindi inviato all'utente. Questo sito utilizza lo stesso servizio web
JohnnyBizzle

... l'intenzione era di usare i parametri per il nome utente / pwd per il servizio web in modo che altri siti potessero usare lo stesso widget.
JohnnyBizzle,

Ok, quindi i proprietari del sito dovranno inserire il proprio nome utente e password, giusto? Una volta che lo fanno, usa queste informazioni per estrarre l'XML dall'altro sito e quindi visualizzarlo. In tal caso, si desidera utilizzare get_option e add_option. La funzione apply_filters funziona sul lato di visualizzazione delle cose, ovvero non modifica i dati nel database, li modifica prima che vengano visualizzati all'utente finale. Sembra che tu voglia prendere l'input del modulo nel widget e salvarlo con add_option. Questo sito ha un ottimo tutorial: valums.com/create-wordpress-widget
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.