在窗口小部件外部使用窗口小部件选项


13

我想在小部件选项中保存一些参数,然后将其传递到另一个页面。小部件是一种称为Web服务的表单。

我要传递的选项是当前已硬编码到结果页面(作为模板)中的Web服务的身份验证。因此,它们应该对网站用户隐藏。

来自小部件/插件的代码:

 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问题感到抱歉。

Answers:


16

@JonathonByrd的答案可能是“最好的”-当然,您应该尽可能使用get_option它,因为不能保证选项名称在WordPress版本之间保持不变。

类似地-@JonathonByrd也依赖于使用可能被删除/重命名的全局变量(尽管可能不太可能)。

不幸的是,没有可以可靠使用的公共包装器。最接近的是get_settings您的Widget类的方法。假设您的窗口小部件类为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]

提供小部件的设置(作为数组)my-widget-class-3。我觉得这是一种更可靠且可以证明未来的方法。


4

根本不是菜鸟问题。

您需要使用MySQL(使用PhpMyAdmin或类似工具)并首先获取选项的名称。以下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 2010年

真奇怪 提供小部件的插件的名称是什么?
汤姆·赖特

4

所有小部件及其选项都存储在中global $wp_registered_widgets。只需加载此变量并打印出内容,即可找到所需的小部件选项。


3

我使用了斯蒂芬·哈里斯建议的方法。

$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

为了进一步说明,该小部件发布了2个选项,即需要服务和邮政编码。表单提交到特定的页面(我知道我可以使用当前页面),该页面称为搜索结果。搜索结果采用了一些选项,这些选项传递给了调用Web服务的URL。结果以XML的形式返回,该XML传递到数组中,然后输出给用户。该网站使用相同的Web服务:camden.nhs.uk/nhs-search-results.htm?type=
q

...的目的是为网络服务的用户名/密码使用参数,以便其他站点可以使用相同的小部件。
JohnnyBizzle 2010年

好的,因此网站所有者需要输入自己的用户名和密码,对吗?一旦他们这样做,它将使用该信息从另一个站点提取XML,然后显示它。在这种情况下,您确实要使用get_option和add_option。apply_filters函数在事物的显示方面起作用–即,它不会更改数据库中的数据,而是在将数据显示给最终用户之前对其进行修改。听起来您想接受小部件中的表单输入并使用add_option保存它。这个站点有一个很棒的教程:valums.com/create-wordpress-widget
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.