Sử dụng tùy chọn tiện ích 'bên ngoài' tiện ích


13

Tôi muốn lưu một số tham số trong các tùy chọn widget sau đó được chuyển sang một trang khác. Các widget là một hình thức gọi một dịch vụ web.

Các tùy chọn tôi muốn vượt qua là xác thực cho dịch vụ web hiện đang được mã hóa cứng vào trang kết quả (được thực hiện dưới dạng mẫu). Do đó, chúng nên được ẩn khỏi người dùng trang web.

Mã từ 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...

Trang kết quả ...

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

Vẫn đang học cách WP liên kết với nhau, rất tiếc cho câu hỏi n00b.

Câu trả lời:


16

Câu trả lời của @ JonathonByrd có lẽ là 'tốt nhất' - chắc chắn bạn nên sử dụng get_optionnếu có thể, vì không có gì đảm bảo tên tùy chọn sẽ giữ nguyên giữa các phiên bản WordPress.

Tương tự - @JonathonByrd cũng dựa vào việc sử dụng biến toàn cục có thể bị xóa / đổi tên (mặc dù có lẽ rất khó xảy ra).

Thật không may, không có trình bao bọc công khai mà chúng ta có thể sử dụng một cách đáng tin cậy. Gần nhất là get_settingsphương thức của lớp Widget của bạn. Giả sử bạn là lớp widget My_Widget_Class, sau đó:

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

$settingssau đó là một mảng của mẫu array(instance number => settings). Thông thường, tiện ích của bạn sẽ có bất kỳ ID nào như my-widget-class-3- và 'số hiệu' ở đây là 3, và vì vậy

 $settings[3]

đưa ra các cài đặt (dưới dạng một mảng) cho widget my-widget-class-3. Điều này tôi cảm thấy là một phương pháp chứng minh đáng tin cậy hơn và trong tương lai.


4

Không một câu hỏi nào cả.

Bạn sẽ cần nhúng vào MySQL (sử dụng PhpMyAdmin hoặc tương tự) và lấy tên của tùy chọn trước. SQL sau sẽ liệt kê các tùy chọn widget:

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

Sau đó, trong mẫu của bạn (hoặc bài đăng / trang với một số loại plugin thực thi php), bạn có thể get_option()thích điều này:

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

Et voila!


Thx nhưng không có gì trả về từ truy vấn chọn.
JohnnyBizzle

Thật ki quặc. Tên của plugin cung cấp widget là gì?
Tom Wright

4

Tất cả các vật dụng và các tùy chọn của chúng được lưu trữ trong global $wp_registered_widgets. Chỉ cần tải biến này và in ra nội dung để tìm các tùy chọn widget mà bạn đang tìm kiếm.


3

Tôi đã sử dụng phương pháp gợi ý của Stephen Harris.

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

reset () cung cấp giá trị khóa đầu tiên từ mảng, nếu bạn không biết ID của tiện ích con là gì.

Lưu ý: Sẽ không hữu ích nếu có nhiều bản sao của widget đang hoạt động. Bởi vì nó chỉ trả về các thiết lập của bản sao đầu tiên của widget.


0

Có lẽ tôi đang đọc sai câu hỏi của bạn, nhưng có vẻ như những gì bạn đang muốn làm là lưu một số tùy chọn hoặc thông tin từ tiện ích con (tên người dùng và mật khẩu) của bạn ở đâu đó trong WordPress nơi bạn có thể truy cập lại chúng bên ngoài mã widget . Nếu đó là chính xác, bạn sẽ muốn xem hàm add_option () (cũng như update_option () và xóa_option () nếu cần).

Để đặt tùy chọn, chỉ cần làm điều này:

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

Sau đó, bạn có thể truy xuất nó ở bất cứ đâu trong WP bằng cách gọi get_option như thế này:

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

Bạn có thể giải thích thêm một chút về những gì bạn đang cố gắng làm không? Ý tưởng đặt tên người dùng và mật khẩu cho dịch vụ ở dạng widget và sau đó chuyển chúng cùng với dịch vụ trên mỗi lần tải trang để cung cấp một số nội dung cho người dùng trang web (không hiển thị tên người dùng và mật khẩu)?

Ok cảm ơn, sẽ cho nó một thử. Hiện tại tôi đang lầm bầm, một phần do áp lực thời gian.
JohnnyBizzle

Để giải thích thêm, tiện ích đăng 2 tùy chọn, Yêu cầu dịch vụ và Mã bưu chính. Biểu mẫu gửi đến một trang cụ thể (tôi biết tôi có thể sử dụng trang hiện tại) mà tôi đã gọi là kết quả tìm kiếm. Kết quả tìm kiếm có các tùy chọn mà tôi chuyển vào url gọi dịch vụ web. Các kết quả trở lại dưới dạng XML được truyền vào một mảng và sau đó xuất ra cho người dùng. Trang web này đang sử dụng cùng một dịch vụ web: camden.nhs.uk/nhs-search-results.htmlm?type=1&q=E17
JohnnyBizzle

... Ý định là sử dụng các tham số cho tên người dùng / pwd cho dịch vụ web để các trang web khác có thể sử dụng cùng một tiện ích.
JohnnyBizzle

Ok, vậy chủ sở hữu trang web sẽ cần phải nhập tên người dùng và mật khẩu của riêng họ, đúng không? Khi họ làm điều đó, nó sử dụng thông tin đó để lấy XML từ trang web khác và sau đó hiển thị nó. Trong trường hợp đó, bạn muốn sử dụng get_option và add_option. Hàm application_filters hoạt động ở phía hiển thị của mọi thứ - tức là nó không thay đổi dữ liệu trong cơ sở dữ liệu của bạn, nó sửa đổi nó trước khi nó được hiển thị cho người dùng cuối. Có vẻ như bạn muốn nhận dạng đầu vào trong widget và lưu nó với add_option. Trang web này có một hướng dẫn tuyệt vời: valums.com/create-wordpress-widget
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.