Widget-Optionen außerhalb des Widgets verwenden

13

Ich möchte einige Parameter in den Widget-Optionen speichern, die dann an eine andere Seite übergeben werden. Das Widget ist ein Formular, das einen Webservice aufruft.

Die Optionen, die ich übergeben möchte, sind die Authentifizierung für den Webservice, der derzeit fest auf der Ergebnisseite codiert ist (als Vorlage erstellt). Aus diesem Grund sollten sie für den Benutzer der Website nicht sichtbar sein.

Code aus dem 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...

Ergebnisseite ...

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

Ich lerne immer noch, wie WP zusammen hängt, also entschuldige die n00b-Frage.

JohnnyBizzle
quelle

Antworten:

16

@ JonathonByrds Antwort ist wahrscheinlich "am besten" - sicher sollten Sie verwenden, get_optionwenn es überhaupt möglich ist, da es keine Garantie gibt, dass der Optionsname zwischen den WordPress-Versionen gleich bleibt.

In ähnlicher Weise ist @JonathonByrd auch auf die Verwendung einer globalen Variablen angewiesen, die entfernt / umbenannt werden kann (obwohl dies möglicherweise sehr unwahrscheinlich ist).

Leider gibt es keine öffentlichen Wrapper, die wir zuverlässig verwenden können. Am nächsten ist die get_settingsMethode Ihrer Widget-Klasse. Nehmen wir an, Ihre Widget-Klasse ist My_Widget_Classdann:

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

$settingsist dann ein Array des Formulars array(instance number => settings). Normalerweise hat Ihr Widget eine ID wie my-widget-class-3- und die 'Instanznummer' hier ist 3 und so weiter

 $settings[3]

gibt die Einstellungen (als Array) für das Widget an my-widget-class-3. Dies halte ich für eine zuverlässigere und zukunftssicherere Methode.

Stephen Harris
quelle
4

Überhaupt keine Noob-Frage.

Sie müssen sich in MySQL (mit PhpMyAdmin oder ähnlichem) einarbeiten und zuerst den Namen der Option abrufen. Die folgende SQL listet die Widget-Optionen auf:

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

Dann können Sie in Ihrer Vorlage (oder in einem Beitrag / einer Seite mit einer Art PHP-Exec-Plugin) Folgendes tun get_option():

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

Et voila!

Tom Wright
quelle
Von der Auswahlabfrage wurde jedoch nichts zurückgegeben.
JohnnyBizzle
Das ist seltsam. Wie heißt das Plugin, das das Widget bereitstellt?
Tom Wright
4

Alle Widgets und ihre Optionen sind in gespeichert global $wp_registered_widgets. Laden Sie einfach diese Variable und drucken Sie den Inhalt aus, um die gewünschten Widget-Optionen zu finden.

E-Commerce-Berater
quelle
3

Ich habe die von Stephen Harris vorgeschlagene Methode verwendet.

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

reset () gibt den ersten Schlüsselwert aus dem Array an, wenn Sie die ID Ihres Widgets nicht kennen.

Hinweis: Es hilft nicht, wenn dort mehrere Kopien des Widgets aktiv sind. Weil es nur die Einstellungen der ersten Kopie des Widgets zurückgibt.

Ulugov
quelle
0

Vielleicht verstehe ich Ihre Frage falsch, aber es sieht so aus, als ob Sie einige Optionen oder Informationen aus Ihrem Widget (Benutzername und Passwort) irgendwo in WordPress speichern und dann außerhalb des Widget-Codes erneut darauf zugreifen können . Wenn dies korrekt ist, sollten Sie sich die Funktion add_option () (sowie ggf. update_option () und delete_option () ansehen.

So legen Sie eine Option fest:

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

Sie können es dann überall in WP abrufen, indem Sie get_option wie folgt aufrufen:

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

quelle
Können Sie uns etwas näher erläutern, was Sie vorhaben? Ist die Idee, den Benutzernamen und das Kennwort für den Dienst in einem Widget-Formular festzulegen und diese dann bei jedem Seitenaufruf an den Dienst weiterzuleiten, um dem Website-Benutzer Inhalte bereitzustellen (ohne den Benutzernamen und das Kennwort anzuzeigen)?
Ok, danke, werde es versuchen. Ich bin im Moment durcheinander, teilweise aufgrund von Zeitdruck.
JohnnyBizzle
Zur weiteren Erläuterung gibt das Widget 2 Optionen bekannt: Erforderlicher Service und Postleitzahl. Das Formular wird an eine bestimmte Seite gesendet (ich weiß, dass ich die aktuelle Seite verwenden kann), die ich Suchergebnisse genannt habe. Die Suchergebnisse enthalten die Optionen, die ich an die URL weitergebe, die den Webservice aufruft. Die Ergebnisse werden als XML zurückgegeben, das an ein Array übergeben und dann an den Benutzer ausgegeben wird. Diese Website benutzt denselben Webservice: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle
... sollten Parameter für den Benutzernamen / pwd für den Webservice verwendet werden, damit andere Websites dasselbe Widget verwenden können.
JohnnyBizzle
Ok, also müssen Websitebesitzer ihren eigenen Benutzernamen und ihr eigenes Passwort eingeben, richtig? Sobald sie das tun, verwendet es diese Informationen, um das XML von der anderen Site abzurufen und es dann anzuzeigen. In diesem Fall möchten Sie get_option und add_option verwenden. Die Funktion apply_filters funktioniert auf der Anzeigeseite der Dinge - dh sie ändert keine Daten in Ihrer Datenbank, sondern ändert sie, bevor sie dem Endbenutzer angezeigt werden. Es hört sich so an, als ob Sie die Formulareingabe im Widget aufnehmen und mit add_option speichern möchten. Diese Seite hat ein tolles Tutorial: valums.com/create-wordpress-widget