위젯 옵션을 사용하여 위젯 '외부'


13

위젯 옵션에 일부 매개 변수를 저장 한 다음 다른 페이지로 전달하고 싶습니다. 위젯은 웹 서비스를 호출하는 양식입니다.

전달하려는 옵션은 현재 결과 페이지에 템플릿으로 작성된 웹 서비스에 대한 인증입니다. 따라서 웹 사이트 사용자로부터 숨겨져 야합니다.

위젯 / 플러그인 코드 :

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

결과 페이지 ...

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

아직도 WP가 어떻게 연결되는지 배우기 때문에 n00b 질문에 대해 죄송합니다.

답변:


16

@JonathonByrd의 대답은 아마도 '최고'일 것입니다 get_option-WordPress 버전간에 옵션 이름이 동일하게 유지된다는 보장이 없기 때문에 가능하다면 사용해야합니다 .

마찬가지로 @JonathonByrd도 제거 / 이름 변경 될 수있는 전역 변수를 사용합니다 (아마도 가능성은 낮음).

불행히도 우리가 신뢰할 수있는 공용 래퍼는 없습니다. 가장 가까운 것이 get_settingsWidget 클래스 의 메소드입니다. 위젯 클래스가 있다고 가정 해 봅시다 My_Widget_Class.

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

$settings그런 다음 형식의 배열입니다 array(instance number => settings). 일반적으로 위젯의 ID는 다음과 같습니다. my-widget-class-3여기서 '인스턴스 번호'는 3이므로

 $settings[3]

widget에 대한 설정을 배열로 제공합니다 my-widget-class-3. 나는 이것이 더 신뢰할 수 있고 미래의 증거 방법이라고 생각합니다.


4

멍청한 질문은 전혀 없습니다.

PhpMyAdmin 또는 이와 유사한 것을 사용하여 MySQL을 시작하고 옵션 이름을 먼저 가져와야합니다. 다음 SQL은 위젯 옵션을 나열합니다.

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

그런 다음 템플릿 (또는 일종의 php exec 플러그인이있는 게시물 / 페이지)에서 다음 get_option()과 같이 할 수 있습니다 .

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

짜잔!


Thx이지만 선택 쿼리에서 아무것도 반환되지 않습니다.
JohnnyBizzle

그거 이상 하네. 위젯을 제공하는 플러그인의 이름은 무엇입니까?
Tom Wright

4

모든 위젯 및 해당 옵션은에 저장됩니다 global $wp_registered_widgets. 이 변수를로드하고 내용을 인쇄하여 원하는 위젯 옵션을 찾으십시오.


3

Stephen Harris가 제안한 방법을 사용했습니다.

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

위젯의 ID가 무엇인지 모르는 경우 reset ()은 배열의 첫 번째 키 값을 제공합니다.

참고 : 여러 개의 위젯 사본이 활성화되어 있으면 도움이되지 않습니다. 위젯의 첫 번째 사본 설정 ​​만 리턴하기 때문입니다.


0

아마도 귀하의 질문을 잘못 읽었을 것입니다.하지만 원하는 것은 위젯 코드 외부에서 다시 액세스 할 수있는 WordPress의 어딘가에 위젯 (사용자 이름 및 비밀번호)의 일부 옵션 또는 정보를 저장하는 것 같습니다 . 올바른 경우 add_option () 함수 (필요에 따라 update_option () 및 delete_option ())를 확인해야합니다.

옵션을 설정하려면 다음과 같이하십시오 :

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

그런 다음 get_option을 다음과 같이 호출하여 WP 내 어디서나 검색 할 수 있습니다.

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

당신이하려는 일을 조금 더 설명해 주시겠습니까? 위젯 양식으로 서비스의 사용자 이름과 비밀번호를 설정 한 다음 모든 페이지로드에서 서비스로 사용자 이름과 비밀번호를 전달하여 일부 사용자 이름과 비밀번호를 표시하지 않고 웹 사이트 사용자에게 일부 컨텐츠를 전달하는 아이디어입니까?

고마워요, 시도해 볼 것입니다. 나는 시간 압력 때문에 부분적으로 혼란스러워하고 있습니다.
JohnnyBizzle

더 자세히 설명하기 위해 위젯에는 서비스 필요 및 우편 번호의 두 가지 옵션이 있습니다. 양식은 검색 결과라고하는 특정 페이지 (현재 페이지를 사용할 수 있음)에 제출합니다. 검색 결과에는 웹 서비스를 호출하는 URL로 전달되는 옵션이 사용됩니다. 결과는 XML로 돌아와 배열로 전달 된 다음 사용자에게 출력됩니다. 이 사이트는 같은 웹 서비스를 사용하고 있습니다 : camden.nhs.uk/nhs-search-results.htm?type=1&q=E17
JohnnyBizzle

... 다른 사이트가 동일한 위젯을 사용할 수 있도록 웹 서비스의 사용자 이름 / 암호에 매개 변수를 사용하는 것이 목적이었습니다.
JohnnyBizzle

사이트 소유자는 자신의 사용자 이름과 비밀번호를 입력해야합니다. 맞습니까? 일단 그렇게하면 해당 정보를 사용하여 다른 사이트에서 XML을 가져 와서 표시합니다. 이 경우 get_option 및 add_option을 사용하려고합니다. apply_filters 함수는 표시 측면에서 작동합니다. 즉, 데이터베이스의 데이터를 변경하지 않고 최종 사용자에게 표시되기 전에 수정합니다. 위젯에서 양식 입력을 가져 와서 add_option으로 저장하려는 것처럼 들립니다. 이 사이트에는 훌륭한 튜토리얼이 있습니다 : valums.com/create-wordpress-widget
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.