Korzystanie z opcji widżetu „poza” widżetem

13

Chcę zapisać niektóre parametry w opcjach widgetu, które są następnie przekazywane na inną stronę. Widżet jest formularzem wywołującym usługę internetową.

Opcje, które chcę przekazać, to uwierzytelnianie dla usługi internetowej, która jest obecnie zakodowana na stałe na stronie wyników (wykonywana jako szablon). Dlatego powinny być ukryte przed użytkownikiem strony.

Kod z widżetu / wtyczki:

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

Strona wyników ...

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

Wciąż uczę się, jak WP się łączy, przepraszam za pytanie n00b.

JohnnyBizzle
źródło

Odpowiedzi:

16

Odpowiedź @ JonathonByrd jest prawdopodobnie „najlepsza” - na pewno powinieneś użyć, get_optionjeśli to w ogóle możliwe, ponieważ nie ma gwarancji, że nazwa opcji pozostanie taka sama między wersjami WordPress.

Podobnie - @JonathonByrd polega również na użyciu zmiennej globalnej, którą można usunąć / zmienić jej nazwę (choć być może bardzo mało prawdopodobne).

Niestety nie ma publicznych opakowań, z których moglibyśmy korzystać niezawodnie. Najbliższa jest get_settingsmetoda twojej klasy Widget. Załóżmy, że Twoja klasa widżetów to My_Widget_Class:

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

$settingsjest wówczas tablicą formularza array(instance number => settings). Zwykle widżet będzie miał dowolny identyfikator podobny do my-widget-class-3- a „numer instancji” tutaj wynosi 3 i tak dalej

 $settings[3]

podaje ustawienia (jako tablicę) widżetu my-widget-class-3. Uważam, że jest to bardziej niezawodna i przyszłościowa metoda.

Stephen Harris
źródło
4

W ogóle nie jest to pytanie noob.

Musisz zanurzyć się w MySQL (używając PhpMyAdmin lub podobnego) i najpierw uzyskać nazwę opcji. Poniższy kod SQL wyświetli listę opcji widgetu:

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

Następnie w swoim szablonie (lub poście / stronie z jakąś wtyczką php exec) możesz get_option()polubić to:

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

Gotowe!

Tom Wright
źródło
Dzięki, ale nic nie zwróciło z wybranego zapytania.
JohnnyBizzle,
To dziwne. Jak nazywa się wtyczka udostępniająca widget?
Tom Wright,
4

Wszystkie widżety i ich opcje są przechowywane w nim global $wp_registered_widgets. Wystarczy załadować tę zmienną i wydrukować zawartość, aby znaleźć opcje widgetu, którego szukasz.

Konsultant ds. E-commerce
źródło
3

Zastosowałem metodę Stephena Harrisa.

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

reset () podaje pierwszą wartość klucza z tablicy, jeśli nie wiesz jaki jest identyfikator twojego widgetu.

Uwaga: Nie pomaga, jeśli istnieje wiele kopii widżetu. Ponieważ zwraca ustawienia tylko pierwszej kopii widżetu.

Ulugow
źródło
0

Być może źle czytam twoje pytanie, ale wydaje się, że to, co chcesz zrobić, to zapisać niektóre opcje lub informacje z widżetu (nazwa użytkownika i hasło) gdzieś w WordPress, gdzie możesz uzyskać do nich dostęp poza kodem widżetu . Jeśli to prawda, powinieneś przyjrzeć się funkcji add_option () (a także update_option () i delete_option (), jeśli to konieczne).

Aby ustawić opcję, po prostu wykonaj następujące czynności:

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

Możesz go pobrać w dowolnym miejscu w WP, wywołując get_option w następujący sposób:

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

źródło
Czy możesz wyjaśnić nieco więcej, co chcesz zrobić? Czy pomysł polega na ustawieniu nazwy użytkownika i hasła do usługi w formie widgetu, a następnie przekazania ich do usługi przy każdym ładowaniu strony w celu dostarczenia treści użytkownikowi (bez wyświetlania nazwy użytkownika i hasła)?
Ok dzięki, spróbuję. W tej chwili mam kłopoty, częściowo z powodu presji czasu.
JohnnyBizzle,
Aby wyjaśnić dalej, widget publikuje 2 opcje, Wymagana usługa i Kod pocztowy. Formularz przesyła się na określoną stronę (wiem, że mógłbym skorzystać z bieżącej strony), którą nazwałem wynikami wyszukiwania. Wyniki wyszukiwania biorą opcje, które przekazuję do adresu URL wywołującego usługę internetową. Wyniki wracają jako XML, który jest przekazywany do tablicy, a następnie przekazywany do użytkownika. Ta strona korzysta z tej samej usługi: camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle
... celem było użycie parametrów dla nazwy użytkownika / pwd dla usługi internetowej, aby inne strony mogły korzystać z tego samego widżetu.
JohnnyBizzle,
Ok, więc właściciele witryn będą musieli wprowadzić własną nazwę użytkownika i hasło, prawda? Gdy to zrobią, wykorzystuje te informacje, aby pobrać plik XML z innej witryny, a następnie wyświetlić go. W takim przypadku chcesz użyć get_option i add_option. Funkcja Apply_filters działa po stronie wyświetlania rzeczy - tzn. Nie zmienia danych w bazie danych, modyfikuje je przed wyświetleniem użytkownikowi końcowemu. Wygląda na to, że chcesz pobrać formularz z widżetu i zapisać go z opcją add_option. Ta strona ma świetny samouczek: valums.com/create-wordpress-widget